matlab实现对matlab仿真出来的心电信号加噪声,并且用低通滤波器滤除基线漂移的程序
时间: 2023-08-26 18:10:49 浏览: 48
以下是一个示例程序,可以对MATLAB仿真出来的心电信号加噪声,并使用低通滤波器滤除基线漂移:
```matlab
% 生成心电信号
fs = 1000; % 采样频率
t = 0:1/fs:1; % 时间向量
f = 60; % 心率
ecg = 0.5*sin(2*pi*f*t); % 生成正弦波形式的心电信号
% 加入高斯白噪声
snr = 10; % 信噪比
ecg_noisy = awgn(ecg, snr, 'measured');
% 滤波去除基线漂移
fc = 0.2; % 截止频率
[b,a] = butter(2, fc/(fs/2), 'low'); % 设计二阶低通滤波器
ecg_filtered = filtfilt(b, a, ecg_noisy);
% 绘制结果
figure;
subplot(3,1,1);
plot(t, ecg);
title('原始心电信号');
xlabel('时间 (s)');
ylabel('幅值');
subplot(3,1,2);
plot(t, ecg_noisy);
title('加噪后的心电信号');
xlabel('时间 (s)');
ylabel('幅值');
subplot(3,1,3);
plot(t, ecg_filtered);
title('滤波后的心电信号');
xlabel('时间 (s)');
ylabel('幅值');
```
在代码中,我们先生成了一个正弦波形式的心电信号。然后使用 `awgn` 函数加入指定信噪比的高斯白噪声。接着,设计了一个二阶低通滤波器,并使用 `filtfilt` 函数对信号进行滤波。最后,将原始信号、加噪后的信号和滤波后的信号进行绘制比较。
注意,此示例程序中使用了 `butter` 函数来设计了一个二阶低通滤波器,该函数返回了滤波器的分子和分母系数。使用 `filtfilt` 函数对信号进行滤波时,需要将该滤波器的分子和分母系数作为输入参数传递给函数。
另外,需要注意的是,本示例程序中的信噪比是指信号的有效值与噪声的有效值之比。在使用 `awgn` 函数时,我们传递的是 `snr` 参数,该参数指定的是信噪比的分贝值。函数内部会自动将该分贝值转换为信噪比。