matlab不支持复数输入,高版本MATLAB中medfilt1函数不支持复数问题

medfilt1函数功能为一维中值滤波,最近在MATLAB R2018b中使用时,发现该函数已经不能支持直接输入复数进行滤波了,如下图在帮助文档中也有说明

54e8d45076e2

1.png

在网上查询了好久,不知道为啥没有一点相关资料。后来下载了MATLAB R2010b进行安装,果然低版本的medfilt1函数就是支持输入复数,进入函数m文件,发现高低版本内部实现方式不同,但顺藤摸瓜、追根溯源一通,最后发现在哪个版本(高或低具体忘了)中,medfilt1函数中最终是调用了求中值函数median,这也是medfilt1的核心所在,只是对一段数据通过一个移动的窗不断进行median操作,看到这突然有点激动,用复数一试便知median是支持复数操作的,这就好办了,自己动手写一个medfilt1函数,为了与MATLAB库函数区别开,函数名为medfilt。

function [y] = medfilt(sig,n)

% input sig is a column vector

slen = length(sig);

y = zeros(slen,1);

if(mod(n,2)==0)

N = n/2;

stpt = zeros(N,1);

edpt = zeros(N-1,1);

sigex = [stpt;sig;edpt]; % 前补N个零,后补N-1个零

else

N = (n-1)/2;

adpt = zeros(N,1);

sigex = [adpt;sig;adpt]; % 前后各补N个零

end

for k = 1:slen

subsig = sigex(k:k+n-1);

y(k,1) = median(subsig);

end

end

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值