滤波器类型:FIR IIR;性能进行频谱分析和时域信号分析
时间: 2023-09-09 21:12:42 浏览: 46
好的,下面是一个简单的MATLAB示例程序,用于进行语音信号数字滤波器的仿真报告。这个程序可以用于设计FIR和IIR两种类型的数字滤波器,并进行频谱分析和时域信号分析。
```
% 语音信号数字滤波器仿真报告
% 作者:XXX
%% 清空环境变量
clear all;
%% 加载语音信号
load handel.mat; % 加载Matlab自带的handel语音文件
h = y'/2; % 将语音信号归一化到[-1,1]范围内
Fs = 8192; % 采样频率为8192Hz
%% 设计数字滤波器
% FIR滤波器
B = fir1(128, 0.5); % 采用Hamming窗口设计一个128阶FIR低通滤波器
% IIR滤波器
[b, a] = butter(8, 0.5); % 采用Butterworth滤波器设计一个8阶IIR低通滤波器
%% 频谱分析
% FIR滤波器
H_fir = fft(B, length(h)); % 计算FIR滤波器的频谱响应
H_fir_mag = abs(H_fir); % 取模值
H_fir_phase = unwrap(angle(H_fir)); % 取相位
% IIR滤波器
[H_iir, W_iir] = freqz(b, a, length(h)); % 计算IIR滤波器的频谱响应
% 绘制FIR滤波器的频谱响应
figure(1);
subplot(2, 1, 1);
plot(H_fir_mag);
title('FIR滤波器的幅度频谱响应');
subplot(2, 1, 2);
plot(H_fir_phase);
title('FIR滤波器的相位频谱响应');
% 绘制IIR滤波器的频谱响应
figure(2);
subplot(2, 1, 1);
plot(W_iir, abs(H_iir));
title('IIR滤波器的幅度频谱响应');
subplot(2, 1, 2);
plot(W_iir, angle(H_iir));
title('IIR滤波器的相位频谱响应');
%% 时域信号分析
% FIR滤波器
y_fir = filter(B, 1, h); % 对语音信号进行FIR滤波
% IIR滤波器
y_iir = filter(b, a, h); % 对语音信号进行IIR滤波
% 绘制原始语音信号和FIR滤波器输出信号的波形图
figure(3);
subplot(2, 1, 1);
plot(h);
title('原始语音信号');
subplot(2, 1, 2);
plot(y_fir);
title('FIR滤波器输出信号');
% 绘制原始语音信号和IIR滤波器输出信号的波形图
figure(4);
subplot(2, 1, 1);
plot(h);
title('原始语音信号');
subplot(2, 1, 2);
plot(y_iir);
title('IIR滤波器输出信号');
%% 播放语音信号和滤波器输出信号
sound(h, Fs); % 播放原始语音信号
pause(length(h)/Fs); % 等待语音播放完毕
sound(y_fir, Fs); % 播放FIR滤波器输出信号
pause(length(h)/Fs); % 等待语音播放完毕
sound(y_iir, Fs); % 播放IIR滤波器输出信号
pause(length(h)/Fs); % 等待语音播放完毕
```
上述程序中,我们首先加载了MATLAB自带的handel语音文件,并将其归一化到[-1,1]范围内。然后,我们分别采用fir1和butter函数设计了一个FIR和一个IIR数字低通滤波器,并通过fft和freqz计算了它们的频谱响应。接着,我们将原始语音信号分别进行了FIR和IIR滤波,并绘制了它们的波形图。最后,我们播放了原始语音信号和滤波器输出信号。
在运行上述程序之后,您将得到4个图形窗口,分别显示FIR和IIR滤波器的幅度和相位频谱响应,以及原始语音信号和滤波器输出信号的波形图。您可以进一步对这些图形进行分析,以评估滤波器的性能。