当前位置: 首页 > 程序语言 >用Matlab设计一个0.5-20HZ的带通滤波器!

用Matlab设计一个0.5-20HZ的带通滤波器!

作者 GlintRock
来源: 小木虫 200 4 举报帖子
+关注

采集了一段脉搏波信号,有一些干扰,想用matlab设计一个0.5-20HZ的带通滤波器,求代码!
假设脉搏波序列为y,采样率1000Hz。 返回小木虫查看更多

今日热帖
  • 精华评论
  • qobitroway

    这是我在网上看到的,希望对你有所帮助。
    -----------------------------------------------------------------------------
    function y=bandp(x,f1,f3,fsl,fsh,rp,rs,Fs)
    %带通滤波
    %使用注意事项:通带或阻带的截止频率与采样率的选取范围是不能超过采样率的一半
    %即,f1,f3,fs1,fsh,的值小于 Fs/2
    %x:需要带通滤波的序列
    % f 1:通带左边界
    % f 3:通带右边界
    % fs1:衰减截止左边界
    % fsh:衰变截止右边界
    %rp:边带区衰减DB数设置
    %rs:截止区衰减DB数设置
    %FS:序列x的采样频率
    % f1=300;f3=500;%通带截止频率上下限
    % fsl=200;fsh=600;%阻带截止频率上下限
    % rp=0.1;rs=30;%通带边衰减DB值和阻带边衰减DB值
    % Fs=2000;%采样率
    %
    wp1=2*pi*f1/Fs;
    wp3=2*pi*f3/Fs;
    wsl=2*pi*fsl/Fs;
    wsh=2*pi*fsh/Fs;
    wp=[wp1 wp3];
    ws=[wsl wsh];
    %
    % 设计切比雪夫滤波器;
    [n,wn]=cheb1ord(ws/pi,wp/pi,rp,rs);
    [bz1,az1]=cheby1(n,rp,wp/pi);
    %查看设计滤波器的曲线
    [h,w]=freqz(bz1,az1,256,Fs);
    h=20*log10(abs(h));
    figure;plot(w,h);title('所设计滤波器的通带曲线');grid on;
    y=filter(bz1,az1,x);
    end,

  • zeussword

    ECG 为待处理的信号; 10为order;  0.05, 0.5 为start stop frequency; ECGRATE 为 sampling rate

    d = fdesign.bandpass('N,F3dB1,F3dB2',10,0.05,0.5,ECGRATE);  % Bandpass filter for the ECG
    Hd = design(d,'butter');
    ECG = filter(Hd,ECG);

  • zeussword

    引用回帖:
    3楼: Originally posted by zeussword at 2014-01-10 20:02:34
    ECG 为待处理的信号; 10为order;  0.05, 0.5 为start stop frequency; ECGRATE 为 sampling rate

    d = fdesign.bandpass('N,F3dB1,F3dB2',10,0.05,0.5,ECGRATE);  % Bandpass filter for the ECG
    Hd = design(d ...

    将 0.05 0.5 改为 0.5 20 即可。
    ECG 为输入信号
    我这里返回值覆盖原信号。

  • hfesg

    楼主这个问题解决了吗?buttord函数不会设置,滤出来不对。。

猜你喜欢
下载小木虫APP
与700万科研达人随时交流
  • 二维码
  • IOS
  • 安卓