tjucruiser 发表于 2008-5-22 20:03

请问怎么实现零相移带通滤波,请高手指点!

:'( 信号频带范围0.5~70Hz,采样频率250Hz,要获取8~15Hz频段信号,要求相位不失真,请问该怎么做?
   我尝试用matlab中的filtfilt函数进行滤波,但是效果不好,代码如下:
   %Data是一个20000*60的数组
   =butter(10,7/125,'low');
   filter_data=filtfilt(b,a,Data);
   =butter(10,4/125,'high');
   filter_data=filtfilt(b,a,filter_data);
   smoothData=filter_data';

然后我又想用FDA Tool设计滤波器,但是不知道该设计FIR还是IIR滤波器能实现我的目的,请高手指点!

[ 本帖最后由 tjucruiser 于 2008-5-22 20:28 编辑 ]

zkj 发表于 2008-5-22 22:21

可以尝试用谐波小波或morlet小波变换滤波

tjucruiser 发表于 2008-5-24 22:03

复morlet小波

向各位高手请教,关于连续小波命令CWT的疑惑
1、CWT有复小波,离散DWT也有复数小波变换吗?
2、离散小波变换后,需要重构才能获得各个尺度下的系数,CWT没有看到,是不是变换之后的系数就是小波系数,比如:
   load leleccum;
   c=cwt(leleccum,1:2:64,'cgau4');
   得到的结果c是32×4320的矩阵,是不是就是32个尺度下的系数;
3、如果2中获得的是小波系数,那么这些小波系数分别代表什么,有细节或者概貌信息之说吗?
4、对于一个采样频率是250Hz的信号,如果想获取8~15Hz带宽的信号,那么这个CWT函数的尺度应该怎么写,
c=cwt(leleccum,尺度???,'cgau4');哪个尺度下是我需要的信号呢?

songzy41 发表于 2008-5-25 07:51

本帖最后由 wdhd 于 2016-9-12 13:19 编辑

原帖由 tjucruiser 于 2008-5-22 20:03 发表   
请问怎么实现零相移带通滤波,请高手指点!:'( 信号频带范围0.5~70Hz,采样频率250Hz,要获取8~15Hz频段信号,要求相位不失真,请问该怎么做?
   我尝试用matlab中的filtfilt函数进行滤波,但是效果不好,代码如下:
   %Data是一个20000*60的数组
   =butter(10,7/125,'low');
   filter_data=filtfilt(b,a,Data);
   =butter(10,4/125,'high');
   filter_data=filtfilt(b,a,filter_data);
   smoothData=filter_data';

...
楼主的程序似乎有点问题:
1,楼主先设计的是一个7Hz为截止频率的低通,把它的输出又输入4Hz为截止频率的高通,等于4-7Hz之间的带通,而楼主需要的是8~15Hz频段信号,怎么取4-7Hz之间的信号?
2,楼主为何不用带通滤波器的设计呢?
=butter(n,/125);
3,滤波器阶数n不能使用太高,因为对阶数高的滤波器系数有很高的精度要求,而由于有限字长的运算,往往达不到很高的精度,反而造成较大的误差而影响了滤波效果。

tjucruiser 发表于 2008-5-25 21:18

非常感谢,还有一个小问题

非常感谢您的回答,是我搞错了。我现在对滤波器设计应该用FIR还是IIR很迷惑,请问这个butter滤波器是FIR还是IIR滤波器?我希望准确获取信号的相位,请问您用什么滤波器合适?

songzy41 发表于 2008-5-26 08:49

本帖最后由 wdhd 于 2016-9-12 13:19 编辑

原帖由 tjucruiser 于 2008-5-25 21:18 发表
非常感谢您的回答,是我搞错了。我现在对滤波器设计应该用FIR还是IIR很迷惑,请问这个butter滤波器是FIR还是IIR滤波器?我希望准确获取信号的相位,请问您用什么滤波器合适?
butter滤波器是IIR滤波器,楼主想获取准确信号的相位,我认为用IIR滤波器,又用零相位滤波。

弯弓射大雕 发表于 2008-6-11 16:36

用Fir滤波器可以很好的保持信号的幅值,解决相位偏移问题可以用双向滤波方法
页: [1]
查看完整版本: 请问怎么实现零相移带通滤波,请高手指点!