数字滤波器设计
要求
在子作业4的基础上,采用MATLAB的filterDesigner或fdatool工具箱,设计出相应的IIR滤波器和FIR滤波器。
音频加噪处理
由于在子作业1中的音频较为纯净,没有过多噪声。为了方便数字滤波器性能指标的分析和数字滤波器的设计,需要对原有的音频进行加噪处理。本项目通过在音频的8.5kHz至10kHz中增加带限噪声,并在绘制出其时域波形和频域波形。
加噪程序设计
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| clear ;
[x,Fs] = audioread('puppy love.mp3'); x=x(:,1); x=x.'; n=length(x); dt=1/Fs; time=(0:n-1)*dt; subplot(221); plot(time,x); title('原始声音信号时域波形') xlabel('时间/s');
f_true=time*Fs/length(time); k=fft(x,length(time)); k(:,ceil(length(k)/2):end) = []; l=f_true*Fs/1e3; l(:,ceil(length(l)/2):end) = []; subplot(222); plot(l,abs(k));title('原始声音信号傅里叶变换');xlabel('kHz');
noise=0; for f=8500:20:10000 noise=noise+0.01*sin(2*pi*f*time); end xa=x+noise; subplot(223); plot(time,xa); title('加噪声音信号时域波形') xlabel('时间/s');
f_true=time*Fs/length(time); k=fft(xa,length(time)); k(:,ceil(length(k)/2):end) = []; l=f_true*Fs/1e3; l(:,ceil(length(l)/2):end) = []; subplot(224); plot(l,abs(k));title('加噪后声音信号傅里叶变换');xlabel('kHz');
|
数字滤波器性能指标分析
假设数字滤波器的频率响应表示为:
H(ejω)=∣H(ejω)∣ejβ(jω)
根据下图中理想低通滤波器逼近的误差容限可以看出,频率响应有通带、过渡带、阻带三个范围。
下图为不同滤波器的技术指标:
因此我们对加噪后的音频频谱进行分析,可以确定出通带截止频率为8kHz,阻带截止频率为8.5kHz。通带最大允许衰减为1dB,阻带最小允许衰减为80dB。
Matlab数字滤波器设计
经过上述分析得到数字滤波器的性能指标后,采用MATLAB的filterDesigner或fdatool工具箱,设计出相应的IIR滤波器和FIR滤波器。设计过程如下图所示:
滤波程序设计
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| clear ;
[x,Fs] = audioread('puppy love.mp3'); x=x(:,1); x=x.'; n=length(x); dt=1/Fs; time=(0:n-1)*dt; subplot(421); plot(time,x);
title('原始声音信号时域波形') xlabel('时间/s');
f_true=time*Fs/length(time); k=fft(x,length(time)); k(:,ceil(length(k)/2):end) = []; l=f_true*Fs/1e3; l(:,ceil(length(l)/2):end) = []; subplot(422); plot(l,abs(k));title('原始声音信号傅里叶变换');xlabel('kHz');
noise=0; for f=8500:20:10000 noise=noise+0.01*sin(2*pi*f*time); end xa=x+noise; subplot(423); plot(time,xa);
title('加噪声音信号时域波形') xlabel('时间/s');
f_true=time*Fs/length(time); k=fft(xa,length(time)); k(:,ceil(length(k)/2):end) = []; l=f_true*Fs/1e3; l(:,ceil(length(l)/2):end) = []; subplot(424); plot(l,abs(k));title('加噪后声音信号傅里叶变换');xlabel('kHz');
y = filter(my_fir,xa); subplot(425); plot(time,y); title('FIR滤波器(凯撒窗)滤波后声音信号时域波形') xlabel('时间/s');
f_true=time*Fs/length(time); k=fft(y,length(time)); k(:,ceil(length(k)/2):end) = []; l=f_true*Fs/1e3; l(:,ceil(length(l)/2):end) = []; subplot(426); plot(l,abs(k));title('FIR滤波器(凯撒窗)滤波后声音信号傅里叶变换');xlabel('kHz');
y1 = filter(my_iir,xa); subplot(427); plot(time,y1); title('IIR滤波器(切比雪夫二型)滤波后声音信号时域波形') xlabel('时间/s');
f_true=time*Fs/length(time); k=fft(y1,length(time)); k(:,ceil(length(k)/2):end) = []; l=f_true*Fs/1e3; l(:,ceil(length(l)/2):end) = []; subplot(428); plot(l,abs(k));title('IIR滤波器(切比雪夫二型)滤波后声音信号傅里叶变换');xlabel('kHz');
clear sound
|
分析总结
通过上述分析实验可以看出加噪后的音频在经过采用MATLAB的filterDesigner或fdatool工具箱,设计出相应的IIR滤波器和FIR滤波器滤除后的频谱图中噪声信号已经完全滤除,时域波形也与原信号相似,在对滤波的音频试听后发现,噪声几乎已经完全听不见,滤波效果较好。滤波效果如下图所示:
项目开源
点击🔗即可下载完整可运行项目: 项目下载