我正在使用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] ......)
并引入光谱仪峰值的变化:
因此,我需要使用双面对称滤波器。在Matlab中有一种简单的内置方法吗?
---或者---有没有真正好的,“它只是有效”,那里有抗噪的deconvo算法?
答案 0 :(得分:2)
所有滤波器在输出中产生的“移位”或“延迟”与滤波器的长度一样多。这是使用filter
命令的行为。
要在输出中没有延迟,你应该向前和向后过滤一次(+ shift -shift = 0)。使用filtfilt
命令可以轻松实现这一点。语法是
filtfilt(b,a,toBS)
缺点(如果你真的关心这个)是有效的过滤顺序加倍。