利用IIR数字滤波器 对加噪语音信号进行滤波,要求录制一段个人的加噪语音信号并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,设计以上两种滤波器,然后用设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱 ,并对滤波前后的信号进行对比,分析信号的变化,回放语音信号,以上功能用matlab实现
时间: 2023-06-24 18:04:14 浏览: 81
首先,我们需要录制一段加噪语音信号并进行采样。可以使用MATLAB自带的audiorecorder函数进行录音,并使用audiowrite函数保存采样后的语音信号。
```matlab
% 录音设置
recObj = audiorecorder(8000, 16, 1);
% 开始录音
disp('开始录音...');
recordblocking(recObj, 5);
disp('录音结束.');
% 保存录音信号
y = getaudiodata(recObj);
audiowrite('noisy_signal.wav', y, 8000);
```
接下来,我们可以绘制采样后语音信号的时域波形和频谱图。
```matlab
% 读取采样后的语音信号
[y, fs] = audioread('noisy_signal.wav');
% 绘制时域波形
t = (0:length(y)-1)/fs;
figure;
plot(t, y);
xlabel('Time (s)');
ylabel('Amplitude');
title('Noisy Speech Signal');
% 绘制频谱图
nfft = 1024;
window = hann(nfft);
overlap = nfft/2;
[S, f, t] = spectrogram(y, window, overlap, nfft, fs);
figure;
imagesc(t, f, 20*log10(abs(S)));
axis xy;
xlabel('Time (s)');
ylabel('Frequency (Hz)');
title('Spectrogram of Noisy Speech Signal');
```
接下来,我们需要设计IIR数字滤波器。假设我们需要设计一个3阶低通Butterworth滤波器,截止频率为1kHz。可以使用MATLAB自带的butter函数进行滤波器设计。
```matlab
% 滤波器设计
order = 3; % 滤波器阶数
fc = 1000; % 截止频率
[b, a] = butter(order, fc/(fs/2), 'low');
```
然后,我们可以使用设计好的滤波器对采集的语音信号进行滤波,并绘制滤波后信号的时域波形和频谱图。
```matlab
% 读取采样后的语音信号
[y, fs] = audioread('noisy_signal.wav');
% 滤波处理
y_filtered = filter(b, a, y);
% 绘制时域波形
t = (0:length(y)-1)/fs;
figure;
plot(t, y, 'b', t, y_filtered, 'r');
xlabel('Time (s)');
ylabel('Amplitude');
title('Comparison of Noisy and Filtered Speech Signals');
% 绘制频谱图
nfft = 1024;
window = hann(nfft);
overlap = nfft/2;
[S1, f1, t1] = spectrogram(y, window, overlap, nfft, fs);
[S2, f2, t2] = spectrogram(y_filtered, window, overlap, nfft, fs);
figure;
subplot(211);
imagesc(t1, f1, 20*log10(abs(S1)));
axis xy;
xlabel('Time (s)');
ylabel('Frequency (Hz)');
title('Spectrogram of Noisy Speech Signal');
subplot(212);
imagesc(t2, f2, 20*log10(abs(S2)));
axis xy;
xlabel('Time (s)');
ylabel('Frequency (Hz)');
title('Spectrogram of Filtered Speech Signal');
```
最后,我们可以回放滤波后的语音信号,并比较滤波前后的差异。
```matlab
% 回放语音信号
sound(y_filtered, fs);
% 比较滤波前后的差异
figure;
subplot(211);
plot(t, y);
xlabel('Time (s)');
ylabel('Amplitude');
title('Noisy Speech Signal');
subplot(212);
plot(t, y_filtered);
xlabel('Time (s)');
ylabel('Amplitude');
title('Filtered Speech Signal');
```
通过比较滤波前后的时域波形和频谱图,可以发现滤波后的信号中高频噪声成分被有效地去除了。