对一段语音信号加高斯噪音,并画出加噪后语音信号的时域波形和频谱图;给定滤波器的性能指标,设计FIR数字滤波器,然后用设计的滤波器对加噪音的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化,回放语音信号。以上功能由matlab编写代码
时间: 2023-06-19 13:08:51 浏览: 64
1. 加高斯噪声并绘制时域波形和频谱图
```matlab
% 读取语音信号
[x, fs] = audioread('speech.wav');
% 设置高斯噪声的标准差
sigma = 0.1;
% 生成高斯噪声
noise = sigma * randn(size(x));
% 将高斯噪声加到语音信号上
noisy_x = x + noise;
% 绘制语音信号和加噪音的时域波形
subplot(2,1,1);
plot(x);
title('原始语音信号');
ylabel('幅值');
xlabel('样本点');
subplot(2,1,2);
plot(noisy_x);
title('加噪后的语音信号');
ylabel('幅值');
xlabel('样本点');
% 绘制语音信号和加噪音的频谱图
N = length(x);
X = fft(x);
f = (0:N-1) * fs / N;
subplot(2,1,1);
plot(f, abs(X));
title('原始语音信号');
ylabel('幅值');
xlabel('频率 / Hz');
subplot(2,1,2);
N = length(noisy_x);
X = fft(noisy_x);
f = (0:N-1) * fs / N;
plot(f, abs(X));
title('加噪后的语音信号');
ylabel('幅值');
xlabel('频率 / Hz');
```
2. 设计FIR数字滤波器并对加噪音的信号进行滤波
```matlab
% 设计FIR数字滤波器
fs = 8000; % 采样率
N = 100; % 滤波器阶数
fc = 1000; % 截止频率
b = fir1(N, fc/(fs/2));
% 对加噪音的信号进行滤波
filtered_x = filter(b, 1, noisy_x);
% 绘制滤波前后的时域波形
subplot(2,1,1);
plot(noisy_x);
title('加噪后的语音信号');
ylabel('幅值');
xlabel('样本点');
subplot(2,1,2);
plot(filtered_x);
title('滤波后的语音信号');
ylabel('幅值');
xlabel('样本点');
% 绘制滤波前后的频谱图
N = length(noisy_x);
X = fft(noisy_x);
f = (0:N-1) * fs / N;
subplot(2,1,1);
plot(f, abs(X));
title('加噪后的语音信号');
ylabel('幅值');
xlabel('频率 / Hz');
N = length(filtered_x);
X = fft(filtered_x);
f = (0:N-1) * fs / N;
subplot(2,1,2);
plot(f, abs(X));
title('滤波后的语音信号');
ylabel('幅值');
xlabel('频率 / Hz');
```
3. 分析信号的变化并回放语音信号
在加高斯噪声之后,语音信号的时域波形和频谱图都发生了明显的变化,同时出现了噪声。经过FIR数字滤波器的滤波处理后,语音信号的噪声被有效地去除,时域波形和频谱图恢复到了原始状态。回放处理前后的语音信号可以听到滤波处理的效果。
```matlab
% 回放语音信号
soundsc(x, fs); % 原始语音信号
pause(length(x) / fs);
soundsc(noisy_x, fs); % 加噪后的语音信号
pause(length(noisy_x) / fs);
soundsc(filtered_x, fs); % 滤波后的语音信号
pause(length(filtered_x) / fs);
```