matlab代码导入原始音频和噪声两个音频文件,将之混合叠加后,使用lms算法从混合音频中提取出原始信号,并画出混合音频和原始音频的时域图和语谱图共4个图
时间: 2023-06-15 15:05:54 浏览: 55
以下是实现该功能的 MATLAB 代码:
```matlab
% 导入原始音频文件
[x, Fs] = audioread('original_audio.wav');
% 导入噪声音频文件
[n, Fs] = audioread('noise_audio.wav');
% 混合音频信号
y = x + n;
% LMS算法参数设置
M = 100; % 滤波器长度
mu = 0.01; % 步长
% 初始化滤波器系数
w = zeros(M, 1);
% LMS算法提取原始信号
for i = M:length(y)
x_hat = y(i:-1:i-M+1);
e = x(i) - w'*x_hat;
w = w + mu*e*x_hat;
end
% 去噪后的信号
x_hat = filter(w, 1, y);
% 绘制混合音频和原始音频的时域图
t = (0:length(x)-1)/Fs;
figure;
subplot(2,1,1);
plot(t,x,'b');hold on;
plot(t,y,'r');
xlabel('Time (s)');
ylabel('Amplitude');
title('Time Domain Plot');
legend('Original Audio', 'Mixed Audio');
% 绘制混合音频和原始音频的语谱图
win = hamming(256);
nfft = 256;
noverlap = 128;
figure;
subplot(2,1,1);
spectrogram(x, win, noverlap, nfft, Fs, 'yaxis');
title('Original Audio Spectrogram');
subplot(2,1,2);
spectrogram(y, win, noverlap, nfft, Fs, 'yaxis');
title('Mixed Audio Spectrogram');
% 绘制原始音频和去噪后的音频的时域图
t = (0:length(x)-1)/Fs;
figure;
subplot(2,1,1);
plot(t,x,'b');hold on;
plot(t,x_hat,'r');
xlabel('Time (s)');
ylabel('Amplitude');
title('Time Domain Plot');
legend('Original Audio', 'Denoised Audio');
% 绘制原始音频和去噪后的音频的语谱图
win = hamming(256);
nfft = 256;
noverlap = 128;
figure;
subplot(2,1,1);
spectrogram(x, win, noverlap, nfft, Fs, 'yaxis');
title('Original Audio Spectrogram');
subplot(2,1,2);
spectrogram(x_hat, win, noverlap, nfft, Fs, 'yaxis');
title('Denoised Audio Spectrogram');
```
其中,'original_audio.wav' 和 'noise_audio.wav' 分别是原始音频和噪声音频的文件名。在 `spectrogram` 函数中,使用了汉明窗口 (`hamming`),窗口大小为 256,重叠大小为 128,FFT 点数为 256。可以根据自己的需要调整这些参数。
程序运行后会生成4个图,分别是混合音频和原始音频的时域图、混合音频和原始音频的语谱图、原始音频和去噪后的音频的时域图、原始音频和去噪后的音频的语谱图。