PPG信号IIR低通滤波matlab实现

% 1. 导入数据
A=xlsread('baselinedata.xlsx'); %基线漂移明显的PPG信号

Fs=100;                         %采样频率,单位为Hz


% 2.IIR5Hz低通滤波,去高频噪声
A1=A(101:2148);
LA1=length(A1);                 %数据长度
tA1=(1:LA1)/Fs;                 %产生时间序列,A1的横坐标


% 2.1 对输入信号进行频率变换
A2=fft(A1,LA1);                 %计算傅立叶变换
ftA2=(2:LA1)*Fs/LA1;            %产生频率序列,A2的横坐标,以Hz为单位
A2=A2(2:length(A2));            %去掉fft变换后异常的第一个数据


figure('Name','原始信号时频图');  
subplot(2,1,1);
plot(tA1,A1); 
xlabel('时间(s)'); 
ylabel('幅值');
title('原始信号时域波形');


subplot(2,1,2);
plot(ftA2,abs(A2));              %求得傅里叶变换后的A2振幅,abs:求绝对值
xlabel('频率(Hz)');   
ylabel('幅值');
title('原始信号频域波形');


% 2.2 低通滤波器设计
m=4;                           %阶数为4
fp=5;                          %通带截止频率
Wn=fp*2/Fs;                    %归一化截止频率  
[Bb,Ba]=butter(m,Wn);          %巴特沃斯滤波器,Bb、Ba为系统函数的分母、分子


% [h,w]=freqz(Bb,Ba,LA1,Fs);
% figure('Name','低通滤波器');  
% plot(w,abs(h));
% xlabel('频率(Hz)');
% ylabel('幅值') ;
% title('低通滤波器');


% 2.3 信号通过低通滤波器
A3=filter(Bb,Ba,A1);           %滤波后信号时域波形
A3=A3(40:length(A3));          %去掉滤波后不稳定的前40个点
LA3=length(A3);
tA3=(1:LA3)/Fs;                %A3的横坐标
A4=fft(A3,LA3);                %滤波后信号频域波形
ftA4=(2:LA3)*Fs/LA3;           %A4的横坐标
A4=A4(2:LA3);                  %去掉fft变换后异常的第一个数据


% xlswrite('A3.xlsx',A3);        %导出A3
% D=xlsread('A3.xlsx');
% figure('Name','滤波后信号'); 
% plot(D); 


figure('Name','滤波前后信号时域图'); 
subplot(2,1,1);
plot(tA1,A1);
xlabel('时间(s)'); 
ylabel('幅值');
title('原始信号时域波形');


subplot(2,1,2);
plot(tA3,A3);
xlabel('时间(s)'); 
ylabel('幅值');
title('滤波后信号时域波形');


figure('Name','滤波前后信号频域图'); 
subplot(2,1,1);
plot(ftA2,abs(A2));
xlabel('频率(Hz)'); 
ylabel('幅值');
title('原始信号频域波形');


subplot(2,1,2);
plot(ftA4,abs(A4));
xlabel('频率(Hz)'); 
ylabel('幅值');
title('滤波后信号频域波形');

你可能感兴趣的:(PPG信号IIR低通滤波matlab实现)