利用IIR数字滤波器 对加噪语音信号进行滤波 画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标,设计以上两种滤波器,然后用设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化,回放语音信号。以上功能由matlab编写代码
时间: 2023-06-19 11:09:25 浏览: 99
应用Matlab对语音信号进行频谱分析及滤波完整代码.rar_manufacturingncc_数字信号处理_滤波器_频谱分析
5星 · 资源好评率100%
下面是利用IIR数字滤波器对加噪语音信号进行滤波的matlab代码,其中包括两种滤波器的设计和信号的滤波处理,以及绘制时域波形和频谱图的函数:
```matlab
% 加载语音信号
[x,fs] = audioread('speech.wav');
% 添加高斯噪声
noise = 0.1*randn(size(x));
y = x + noise;
% 设计IIR数字滤波器
% 第一种滤波器:低通滤波器
fp = 500/(fs/2); % 通带截止频率
fs = 600/(fs/2); % 阻带截止频率
rp = 1; % 通带最大衰减量
rs = 50; % 阻带最小衰减量
[n,fc] = buttord(fp,fs,rp,rs); % 计算滤波器阶数和截止频率
[b,a] = butter(n,fc); % 滤波器系数
% 第二种滤波器:高通滤波器
fp = 600/(fs/2); % 通带截止频率
fs = 500/(fs/2); % 阻带截止频率
rp = 1; % 通带最大衰减量
rs = 50; % 阻带最小衰减量
[n,fc] = buttord(fp,fs,rp,rs); % 计算滤波器阶数和截止频率
[b1,a1] = butter(n,fc,'high'); % 滤波器系数
% 用设计的滤波器对信号进行滤波处理
% 第一种滤波器:低通滤波器
y_filtered = filter(b,a,y);
% 第二种滤波器:高通滤波器
y_filtered1 = filter(b1,a1,y);
% 绘制时域波形和频谱图
plot_waveform_spectrum(x,fs,'原始语音信号');
plot_waveform_spectrum(y,fs,'加噪语音信号');
plot_waveform_spectrum(y_filtered,fs,'低通滤波后信号');
plot_waveform_spectrum(y_filtered1,fs,'高通滤波后信号');
% 播放语音信号
sound(x,fs);
sound(y,fs);
sound(y_filtered,fs);
sound(y_filtered1,fs);
% 定义绘制时域波形和频谱图的函数
function plot_waveform_spectrum(x,fs,title_str)
figure;
% 绘制时域波形
subplot(2,1,1);
plot((0:length(x)-1)/fs,x);
xlabel('Time (s)');
ylabel('Amplitude');
title(title_str);
% 绘制频谱图
subplot(2,1,2);
N = length(x);
f = (-N/2:N/2-1)/N*fs;
X = fftshift(abs(fft(x)));
plot(f,X);
xlabel('Frequency (Hz)');
ylabel('Magnitude');
xlim([-fs/2,fs/2]);
end
```
在上述代码中,我们首先加载了原始语音信号,并添加了高斯噪声,然后设计了两种IIR数字滤波器(低通滤波器和高通滤波器),并用设计的滤波器对加噪语音信号进行了滤波处理,最后绘制了时域波形和频谱图,并播放了各个信号。
其中,设计IIR数字滤波器的函数为 `buttord` 和 `butter`,它们可以根据给定的滤波器性能指标计算滤波器的阶数和截止频率,并得到滤波器的系数。具体来说,`buttord` 函数可以计算巴特沃斯滤波器的阶数和截止频率,而 `butter` 函数则根据计算出的阶数和截止频率得到滤波器的系数。
最后,我们定义了一个绘制时域波形和频谱图的函数 `plot_waveform_spectrum`,它可以绘制信号的时域波形和频谱图,并将其分别显示在两个子图中。
阅读全文