clear,clc; val=importdata('Ecg.txt'); signal=val(1,1:1800); fs=500; figure(1) subplot(4,2,1); plot(signal); title('干净的EGC信号'); xlabel('采样点'); ylabel('幅值(dB)'); grid on; signal1=awgn(signal,10,'measured'); subplot(4,2,2); plot(signal1); title('高斯噪声的EGC信号'); xlabel('采样点'); ylabel('幅值(dB)'); % 设计IIR低通滤波器 Wp = 0.1pi; % 通带截止频率 Ws = 0.16pi; % 阻带截止频率 Rp = 1; % 通带衰减 Rs = 15; % 阻带衰减 [n, Wn] = buttord(Wp, Ws, Rp, Rs, 's'); [b, a] = butter(n, Wn); % 绘制数字低通滤波器的幅频响应 [H, w] = freqz(b, a, 512); f = w/pi500; subplot(4,2,3); plot(w/pi,20log10(abs(H))); xlabel('频率'); ylabel('幅值(dB)'); title('IIR低通滤波器幅频响应'); iir_filtered_signal = filter(b, a, signal1); subplot(4,2,4); plot(iir_filtered_signal); xlabel('频率'); ylabel('幅值(dB)'); title('IIR低通滤波后的含高斯噪声的图像'); iir_signal = abs(fft(signal)); subplot(4,2,5); plot(20log10(abs(iir_signal))); xlabel('频率'); ylabel('幅值(dB)'); title('含高斯噪声的频谱'); iir_signal1 = abs(fft(signal1)); subplot(4,2,6); plot(20log10(abs(iir_signal1))); xlabel('频率'); ylabel('幅值(dB)'); title('IIR低通滤波后的含高斯噪声的频谱'); n = 80; % 滤波器阶数 wc = 0.1pi; % 通带截止频率 h = fir1(n, wc/(fs/2), kaiser(n+1, 6)); % 计算FIR低通滤波器系数 filtered_signal_fir = filter(h, 1, signal); % 应用FIR滤波器 subplot(4,2,7); plot(20log10(abs(h))); title('FIR低通滤波幅频响应'); xlabel('频率'); ylabel('幅值(dB)'); [Pxx_filtered_fir, f_filtered_fir] = periodogram(filtered_signal_fir, [], [], fs); subplot(4,2,8); plot(20*log10(abs(Pxx_filtered_fir))); title('FIR低通滤波后的含高斯噪声的频谱'); xlabel('频率'); ylabel('幅值(dB)');逐句注释这段代码
时间: 2023-11-18 08:03:01 浏览: 82
这段代码是用 MATLAB 实现了对 ECG 信号进行数字滤波的过程。下面是逐句的注释:
```
clear,clc; % 清空命令窗口和工作空间
val=importdata('Ecg.txt'); % 读入 ECG 数据
signal=val(1,1:1800); % 取 ECG 数据的前 1800 个采样点
fs=500; % 采样率为 500 Hz
figure(1) % 创建一个新图形窗口
subplot(4,2,1); % 将窗口分为 4 行 2 列,并在第 1 个子图中绘制
plot(signal); % 绘制干净的 ECG 信号
title('干净的EGC信号'); % 设置标题
xlabel('采样点'); % 设置 x 轴标签
ylabel('幅值(dB)'); % 设置 y 轴标签
grid on; % 显示网格线
signal1=awgn(signal,10,'measured'); % 生成一个高斯噪声为 10 dB 的含噪声 ECG 信号
subplot(4,2,2); % 在第 2 个子图中绘制含噪声的 ECG 信号
plot(signal1); % 绘制含噪声的 ECG 信号
title('高斯噪声的EGC信号'); % 设置标题
xlabel('采样点'); % 设置 x 轴标签
ylabel('幅值(dB)'); % 设置 y 轴标签
% 设计 IIR 低通滤波器
Wp = 0.1*pi; % 通带截止频率
Ws = 0.16*pi; % 阻带截止频率
Rp = 1; % 通带衰减
Rs = 15; % 阻带衰减
[n, Wn] = buttord(Wp, Ws, Rp, Rs, 's'); % 计算滤波器的阶数和截止频率
[b, a] = butter(n, Wn); % 计算 IIR 低通滤波器的系数
% 绘制数字低通滤波器的幅频响应
[H, w] = freqz(b, a, 512); % 计算数字滤波器的频率响应
f = w/pi*500; % 将频率转换为 Hz
subplot(4,2,3); % 在第 3 个子图中绘制幅频响应
plot(w/pi,20*log10(abs(H))); % 绘制幅频响应
xlabel('频率'); % 设置 x 轴标签
ylabel('幅值(dB)'); % 设置 y 轴标签
title('IIR低通滤波器幅频响应'); % 设置标题
iir_filtered_signal = filter(b, a, signal1); % 对含噪声的 ECG 信号进行 IIR 低通滤波处理
subplot(4,2,4); % 在第 4 个子图中绘制滤波后的信号
plot(iir_filtered_signal); % 绘制滤波后的信号
xlabel('频率'); % 设置 x 轴标签
ylabel('幅值(dB)'); % 设置 y 轴标签
title('IIR低通滤波后的含高斯噪声的图像'); % 设置标题
iir_signal = abs(fft(signal)); % 计算干净的 ECG 信号的频谱
subplot(4,2,5); % 在第 5 个子图中绘制频谱
plot(20*log10(abs(iir_signal))); % 绘制幅值谱
xlabel('频率'); % 设置 x 轴标签
ylabel('幅值(dB)'); % 设置 y 轴标签
title('含高斯噪声的频谱'); % 设置标题
iir_signal1 = abs(fft(signal1)); % 计算含噪声的 ECG 信号的频谱
subplot(4,2,6); % 在第 6 个子图中绘制频谱
plot(20*log10(abs(iir_signal1))); % 绘制幅值谱
xlabel('频率'); % 设置 x 轴标签
ylabel('幅值(dB)'); % 设置 y 轴标签
title('IIR低通滤波后的含高斯噪声的频谱'); % 设置标题
n = 80; % 滤波器阶数
wc = 0.1*pi; % 通带截止频率
h = fir1(n, wc/(fs/2), kaiser(n+1, 6)); % 计算 FIR 低通滤波器的系数
filtered_signal_fir = filter(h, 1, signal); % 对干净的 ECG 信号进行 FIR 低通滤波处理
subplot(4,2,7); % 在第 7 个子图中绘制幅频响应
plot(20*log10(abs(h))); % 绘制幅频响应
title('FIR低通滤波幅频响应'); % 设置标题
xlabel('频率'); % 设置 x 轴标签
ylabel('幅值(dB)'); % 设置 y 轴标签
[Pxx_filtered_fir, f_filtered_fir] = periodogram(filtered_signal_fir, [], [], fs); % 计算 FIR 低通滤波后的信号的频谱
subplot(4,2,8); % 在第 8 个子图中绘制频谱
plot(20*log10(abs(Pxx_filtered_fir))); % 绘制幅值谱
title('FIR低通滤波后的含高斯噪声的频谱'); % 设置标题
xlabel('频率'); % 设置 x 轴标签
ylabel('幅值(dB)'); % 设置 y 轴标签
```
注:原代码中的 `%` 应改为 `pi`。
阅读全文