Matlab中的对称带阻滤波器?

时间:2011-06-01 18:06:02

标签: matlab filter

我正在使用Matlab找到有效的解卷积光谱仪输出的方法来获得原始输入。函数deconvwnr()运行良好,除了它引入了很多正弦曲线噪声,我已经用matlab的内置带阻滤波器滤除了它:

[b,a] = butter(3,[iters-freq,iters+freq],'stop'); recovered = filter(b,a,toBS);

问题是这个过滤器是片面的,定义为

如果x [n]是数组且y [n]是滤波后的数组,则f:x-> y是单侧的iff y [n] = f(x [n],x [n-1] ],x [n-2] ......)

并引入光谱仪峰值的变化:

shift

因此,我需要使用双面对称滤波器。在Matlab中有一种简单的内置方法吗?

---或者---有没有真正好的,“它只是有效”,那里有抗噪的deconvo算法?

1 个答案:

答案 0 :(得分:2)

所有滤波器在输出中产生的“移位”或“延迟”与滤波器的长度一样多。这是使用filter命令的行为。

要在输出中没有延迟,你应该向前和向后过滤一次(+ shift -shift = 0)。使用filtfilt命令可以轻松实现这一点。语法是

filtfilt(b,a,toBS)

缺点(如果你真的关心这个)是有效的过滤顺序加倍。