% 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('滤波后信号频域波形');