(2)利用“fft”解析频谱,绘出其时域波形及幅度频谱,并放在同一个figure中; (3)利用MATLAB中的随机函数产生高斯白噪声加入到语音信号中,模仿语音信号被污染,并对其进行频谱分析。 (4)设计IIR和FIR数字滤波器,并对被噪声污染的语音信号进行滤波,分析滤波后信号的时域和频域特征,回放语音信号。 (5)与原信号进行对比
时间: 2023-12-25 20:03:31 浏览: 27
以下是MATLAB代码实现上述任务:
首先,读取语音文件并播放:
```matlab
[y, Fs] = audioread('example.wav');
sound(y, Fs);
```
接着,绘制语音信号的时域波形和幅度频谱:
```matlab
N = length(y);
t = linspace(0, N/Fs, N);
subplot(2,1,1);
plot(t, y);
xlabel('Time (s)');
ylabel('Amplitude');
title('Time Domain Waveform');
Y = fft(y);
f = linspace(0, Fs/2, N/2+1);
A = abs(Y(1:N/2+1));
subplot(2,1,2);
plot(f, A);
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Amplitude Spectrum');
```
接下来,生成高斯白噪声并加入到语音信号中:
```matlab
noise = randn(size(y));
noisy_y = y + 0.1 * noise; % 加入噪声
sound(noisy_y, Fs);
```
然后,绘制被噪声污染的语音信号的时域波形和幅度频谱:
```matlab
N = length(noisy_y);
t = linspace(0, N/Fs, N);
subplot(2,1,1);
plot(t, noisy_y);
xlabel('Time (s)');
ylabel('Amplitude');
title('Noisy Time Domain Waveform');
Y = fft(noisy_y);
f = linspace(0, Fs/2, N/2+1);
A = abs(Y(1:N/2+1));
subplot(2,1,2);
plot(f, A);
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Noisy Amplitude Spectrum');
```
接着,设计IIR和FIR数字滤波器进行滤波:
```matlab
% IIR滤波器
[b, a] = butter(10, 2000/(Fs/2), 'low');
filtered_y_IIR = filter(b, a, noisy_y);
sound(filtered_y_IIR, Fs);
% FIR滤波器
h = fir1(30, 2000/(Fs/2), 'low');
filtered_y_FIR = filter(h, 1, noisy_y);
sound(filtered_y_FIR, Fs);
```
最后,绘制滤波后信号的时域波形和幅度频谱,并与原信号进行对比:
```matlab
% IIR滤波器
N = length(filtered_y_IIR);
t = linspace(0, N/Fs, N);
subplot(2,2,1);
plot(t, filtered_y_IIR);
xlabel('Time (s)');
ylabel('Amplitude');
title('IIR Filtered Time Domain Waveform');
Y = fft(filtered_y_IIR);
f = linspace(0, Fs/2, N/2+1);
A = abs(Y(1:N/2+1));
subplot(2,2,2);
plot(f, A);
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('IIR Filtered Amplitude Spectrum');
% FIR滤波器
N = length(filtered_y_FIR);
t = linspace(0, N/Fs, N);
subplot(2,2,3);
plot(t, filtered_y_FIR);
xlabel('Time (s)');
ylabel('Amplitude');
title('FIR Filtered Time Domain Waveform');
Y = fft(filtered_y_FIR);
f = linspace(0, Fs/2, N/2+1);
A = abs(Y(1:N/2+1));
subplot(2,2,4);
plot(f, A);
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('FIR Filtered Amplitude Spectrum');
% 对比原信号
N = length(y);
t = linspace(0, N/Fs, N);
figure;
subplot(2,1,1);
plot(t, y);
hold on;
plot(t, filtered_y_IIR);
hold on;
plot(t, filtered_y_FIR);
legend('Original Signal', 'IIR Filtered Signal', 'FIR Filtered Signal');
xlabel('Time (s)');
ylabel('Amplitude');
title('Comparison of Filtered Signals');
Y = fft(y);
f = linspace(0, Fs/2, N/2+1);
A1 = abs(Y(1:N/2+1));
Y = fft(filtered_y_IIR);
A2 = abs(Y(1:N/2+1));
Y = fft(filtered_y_FIR);
A3 = abs(Y(1:N/2+1));
subplot(2,1,2);
plot(f, A1);
hold on;
plot(f, A2);
hold on;
plot(f, A3);
legend('Original Signal', 'IIR Filtered Signal', 'FIR Filtered Signal');
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Comparison of Amplitude Spectra');
```
其中,IIR滤波器采用了10阶Butterworth低通滤波器,截止频率为2kHz;FIR滤波器采用了31个系数的低通滤波器,截止频率也为2kHz。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)