脉搏波信号处理

脉搏波信号处理

%信号采样
N = 256;fs = fr;
data = data(1:N);
n = 1:N;
t = n/fs;
plot(t,data);
  • 首先,我们将原始一维脉搏波信号做256点的采样,以便其方便fft计算。采样频率和原信号的频率一样均为30hz。

脉搏波信号处理_第1张图片

  • 画出此信号,可见其包含一些高低频的噪声。

y=fft(data,N);    %对信号进行快速Fourier变换
mag=abs(y);     %求得Fourier变换后的振幅
f=n*fs/N;    %频率序列
figure, plot(f,mag);   %绘出随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('N=256');grid on;

脉搏波信号处理_第2张图片

  • 求出原始信号的频谱,由于脉搏信号的频率大约在42bps-180bps之间,也就是0.7hz-3.0hz。在这个频率区间之外的可以认定为噪声,所以接下来需要一个带通滤波器来滤除噪声。

  • 这里采样巴特沃兹带通滤波,其通带范围fp是[0.7,3.5],阻带截至[0.5 5]。要求带边频率衰减<=3db; 0.5hz以下5hz以上衰减>=18db (10^(-3/20)=0.707; 10^(-18/20)=0.125 )。
% 设计巴特沃兹带通滤波
fp=[0.7 3.5];fs=[0.5 5]; 
rp=3;rs=18; 
Fs=30; 
wp=fp*2*pi/Fs;ws=fs*2*pi/Fs; 
[n,wn]=buttord(wp/pi,ws/pi,rp,rs);
[b,a]=butter(n,wp/pi); 
[h,w]=freqz(b,a,256,Fs); 
% h=20*log10(abs(h)); 
figure;
plot(w,abs(h));grid;
ylabel('Bandpass DF') ;
xlabel('Hz');

脉搏波信号处理_第3张图片

  • 滤波去频率响应如上图所示,可见其基本符合设计要求。

  • 接下来将原始信号用所设计的滤波器进行滤波,matlab中,只需要知道滤波器分子分母系数,就可以用filter函数直接进行滤波了。
% 滤波器滤波
nData=filter(b,a,data);
nDataAbs = abs(fft(nData, 256));
figure; plot(f, nDataAbs);
figure; plot(nData);

脉搏波信号处理_第4张图片

脉搏波信号处理_第5张图片

  • 画出了滤波信号的频谱图和原始数据,可见其已经达到了滤波要求。

你可能感兴趣的:(数字信号处理)