数字滤波器设计
 要求
         在子作业4的基础上,采用MATLAB的filterDesigner或fdatool工具箱,设计出相应的IIR滤波器和FIR滤波器。
 音频加噪处理
         由于在子作业1中的音频较为纯净,没有过多噪声。为了方便数字滤波器性能指标的分析和数字滤波器的设计,需要对原有的音频进行加噪处理。本项目通过在音频的8.5kHz至10kHz中增加带限噪声,并在绘制出其时域波形和频域波形。

 加噪程序设计
| 12
 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滤波器。设计过程如下图所示:


 滤波程序设计
| 12
 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滤波器滤除后的频谱图中噪声信号已经完全滤除,时域波形也与原信号相似,在对滤波的音频试听后发现,噪声几乎已经完全听不见,滤波效果较好。滤波效果如下图所示:

 项目开源
点击🔗即可下载完整可运行项目: 项目下载