使用数字滤波器处理音频噪声(附Matlab程序)
本篇文章主要介绍使用窗函数法构造FIR数字滤波器,并且滤除音频文件的噪声。以下为完整的程序,修改一下文件的位置,直接复制应该就可以。1.音频文件的采集与分析Matlab输入的音频文件需要“.wav”文件,可以使用一些软件转换格式(例如酷狗音乐)。使用Matlab软件中的“audioread”函数进行音频的读取,定义读取的音频文件为“signal”并使用“fft”函数把读取的音频进行傅里叶变换,经过
文章共1,592字 · 阅读需要大约6分钟
一键AI生成摘要,助你高效阅读
问答
·
本篇文章主要介绍使用窗函数法构造FIR数字滤波器,并且滤除音频文件的噪声。以下为完整的程序,修改一下文件的位置,直接复制应该就可以。
1.音频文件的采集与分析
Matlab输入的音频文件需要“.wav”文件,可以使用一些软件转换格式(例如酷狗音乐)。使用Matlab软件中的“audioread”函数进行音频的读取,定义读取的音频文件为“signal”并使用“fft”函数把读取的音频进行傅里叶变换,经过傅氏变换之后的音频定义为“signal1”,使用Matlab中的画图工具进行绘图,输出原始音频的时域波形和频域波形。原始音频文件的读取与分析程序如下:
[signal,fs] = audioread('C:\Users\Administrator\Desktop\signal.wav');
N = length(signal); %采样长度
signal1 = fft(signal,n); %快速傅里叶变换
t = (0:n-1)/fs; %时间范围
figure(1)
subplot(2,1,1);plot(t,signal1); %绘出时域波
title('原始音频的时域波形'); xlabel('时间/s');ylabel('幅度');
处理结果如下:
2.为音频文件添加噪声
noise = 0.5 * randn(n,2);
signal_noise=signal+noise; %在原始信号上如加随机噪声
ts=1/fs;
tt=(length(signal_noise)-1)/fs;
t=0:ts:tt;
n1=length(signal_noise);
signal_noise_fft=fft(signal_noise,n1); %快速傅里叶变换
figure(2);
subplot(2,1,1); %绘制含噪声信号的时域波形图
plot(t,signal_noise);
title('加随机噪声之后的音频的时域波形');
xlabel('时间/s'); ylabel('幅度');
其图像如下:
可以看出其幅度与原来的音频相比,具有明显的变化。
3.设计滤波器
本次使用凯泽(kaiser)窗函数设计滤波器,关于窗函数的学习,可以参考这篇文章。
程序如下:
fp=1500;ft=3000;as=60;
wp=2*pi*fp/fs;
ws=2*pi*ft/fs;
bt=ws-wp;
M=ceil((as-8)/2.285/bt);
wc=(wp+ws)/2/pi;
alph=0.203*(as-15);
hn=fir1(M,wc,kaiser(M+1,alph));
4.使用滤波器
程序如下:
signal_noise_fit=fftfilt(hn,signal_noise);
signal_noise_fit_p=fft(signal_noise_fit);
n2=length(signal_noise_fit);
figure(3);
subplot(2,1,1);
plot(t,signal_noise_fit_p); %绘出时域波
title('去噪音频的时域波形'); xlabel('时间/s');ylabel('幅度');
结果图如下:
从图中可以看出,滤波之后与原始音频文件的波形较为接近。
更多推荐
已为社区贡献3条内容
所有评论(0)