采集了一段脉搏波信号,有一些干扰,想用matlab设计一个0.5-20HZ的带通滤波器,求代码! 假设脉搏波序列为y,采样率1000Hz。 返回小木虫查看更多
这是我在网上看到的,希望对你有所帮助。 ----------------------------------------------------------------------------- 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,
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);
楼主这个问题解决了吗?buttord函数不会设置,滤出来不对。。
这是我在网上看到的,希望对你有所帮助。
-----------------------------------------------------------------------------
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,
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);
将 0.05 0.5 改为 0.5 20 即可。
ECG 为输入信号
我这里返回值覆盖原信号。
楼主这个问题解决了吗?buttord函数不会设置,滤出来不对。。