MATLAB:去除音频信号噪音

MATLAB:去除音频信号噪音

实验内容:
获取一段带噪声的语音或音乐信号,输出无噪声的信号。

代码:

%读音频test,添加噪声后滤除噪声
clear;clc;
[audio,fs]=audioread('test.wav');%声音读取audio是读出数据 fs为音频文件的采样率
audio = audio(:,1); %双通道变单通道
n=length(audio);
T = 1/fs;%采样间隔
t = (0:n-1)*T;%时间轴
f = (0:n-1)/n*fs;%频率轴
%快速傅里叶变换
audio_fft=fft(audio,n)*T; 
%加噪声
tt =(1:n);
noise=0.02*cos(8000*2*pi/fs*tt');%噪声
%noise=0.01*randn(n,1);%加噪声
s_noise=fft(noise,n);
abs_noise=abs(s_noise);
figure(3);
subplot(2,1,1); plot(t,noise);   
xlabel('时间/s');ylabel('幅度');
title('噪声时域波形');  grid on;
subplot(2,1,2); 
% plot(f(1:n-1),abs_noise(1:n-1));
plot(f,abs_noise);
title('噪声功率谱');
grid on;
s=audio+noise;%加噪声
s_fft=fft(s,n); 

%设计IIR低通滤波器
rp=1;             %设置通带波纹系数
rs=50;             %设置阻带波纹系数 
Ft=7000;           %设置阻带频率
Fp=6500;           %设置通带频率
Fs=20000;           %设置抽样频率                         
wp=Fp/(Fs/2);     
ws=Ft/(Fs/2);   %求出待设计的模拟滤波器的边界频率
[N,wc]=buttord(wp,ws,rp,rs);    %低通滤波器的阶数和截止频率
[b,a]=butter(N,wc);       %S域频率响应的参数即:滤波器的传输函数
fprintf('巴特沃斯滤波器 N= %4d\n',N);  %显示滤波器阶数
figure(2);
[h,w]=freqz(b,a);%低通滤波器特性
plot(w*Fs/(2*pi),20*log10(abs(h)));xlabel('f/Hz');
axis([0 10000 -50 2]);
title('IIR低通滤波器');grid on;
z=filter(b,a,s);%使用filter函数对信号进行滤波
z_fft=fft(z);     %滤波后的信号频谱

figure(1); 
%绘出原始音频时域波
subplot(2,3,1);plot(t,audio);   
xlabel('时间/s');ylabel('幅度');
title('初始信号波形');  grid on;
 %绘出原始音频频域频谱
subplot(2,3,4); 
audiof = abs(audio_fft);
plot(f(1:(n-1)/2),audiof(1:(n-1)/2));
title('初始信号频谱');
xlabel('频率/Hz');
ylabel('幅度');
grid;
%绘出加噪音频时域波
subplot(2,3,2);plot(t,s);
title('加噪声后信号波形');xlabel('时间/s');ylabel('幅度');grid on;
%绘出加噪音频频域频谱
subplot(2,3,5);sf = abs(s_fft);
plot(f(1:n-1),sf(1:(n-1)));
xlabel('频率/Hz');ylabel('幅度');title('加噪声后信号信号频谱');grid on;
%绘出滤波音频时域波
subplot(2,3,3);plot(t,z);axis([ 0 10 -0.04 0.04]);
title('低通滤波后的信号波形');xlabel('时间/s');ylabel('幅度');grid on;
%绘出滤波音频频域波
subplot(2,3,6);zf = abs(z_fft);
plot(f(1:(n-1)/2),zf(1:(n-1)/2));
title('低通滤波后信号的频谱');xlabel('频率/Hz');ylabel('幅度');grid on;
audio_final = [audio;s;z];%原始语音,加噪语音,滤波语音的合成音频矩阵
sound(audio_final,fs); %播放语音

图形:
MATLAB:去除音频信号噪音_第1张图片
MATLAB:去除音频信号噪音_第2张图片
MATLAB:去除音频信号噪音_第3张图片

你可能感兴趣的:(#,MATLAB,#,信号处理,matlab,音视频,开发语言)