请教高手,滤波后相位问题
我用FIR滤波器加窗对信号进行了滤波,结果见附件,并用origin中带的fft-filter进行了分析,结果发现用fir滤波结果相位与原始数据有较大偏移,请各位高手指点。
还有个问题就是阶数如何确定呀,有没有一些公式可参考,我这是随便取得,调试
还有就是求归一化频率时fs=1/dt吗 一般滤波后都会产生延迟,所以发展出零相移的滤波。在MATLAB中有函数filtfilt,就不知FORTRAN或ORIGIN中是否有相应的函数或子程序。
谢谢宋老师
谢谢宋老师,我用的是胡广书老师编的《数字信号处理》提供的fortran程序,并通过双向滤波,问题得到了一些改善,结果见附件。现在的问题是在最后滤波结果与原始数据出现较大偏差,请宋老师指点, 求归一化频率时,我用的fs=1/(dt*2) dt为采样间隔,但我用fs=1/dt时结果就很不好,见附图
请宋老师给指点
回复 #3 弯弓射大雕 的帖子
后面不对的数据长度等于滤波器的阶数,呵呵. 本帖最后由 wdhd 于 2016-9-7 15:53 编辑原帖由 弯弓射大雕 于 2007-9-16 08:57 发表
求归一化频率时,我用的fs=1/(dt*2) dt为采样间隔,但我用fs=1/dt时结果就很不好,见附图
请宋老师给指点
表达的不太清楚,归一频率就应该等于1/dt/2啊.否则结果肯定要有问题啊.
改进后
我看一些资料上都是,fs=1/dt呀,我也试了,结果可以通过调滤波器长度调好。我将数据反向输入,使得最后不太吻合的部分变得吻合了,这样处理可不可以呀问题
就是前面有一部分出现不太吻合,不过我只关心后面的部分,这样处理 可行吗 实际上数据进行零相位滤波后,在数据的二端都会有一个过度过程,前端是在正向输入时产生的,后端是在反向输入时造成的,使它你有所偏离。楼主这样处理是可以的。另外我想指出,fs=1/dt,但归一化频率,在MATLAB的滤波器设计中用的是fs/2。例如在buttord、cheb1ord、cheb2ord、ellipord等等中的ws和wp都是把实际频率除以fs/2(0<ws和wp<1),butter、cheby1、cheby2、ellip、fir1等等中的wn也是这样(0<wn<1),freqz作出的图给出归一化频率(0<fn<1),都是以fs/2归正的。所以楼主在FORTRAN中用到归一化频率,要注意是按fs还是按fs/2归一化的。
回复 #9 songzy41 的帖子
我参考胡广书老师的fortran编的Fir加窗滤波器中,fs按照1/dt做的,并且我按照fs=1/dt,效果见上图(改进后),感觉还挺好的。
页:
[1]