数字信号滤波器设计 - 图文 联系客服

发布时间 : 星期六 文章数字信号滤波器设计 - 图文更新完毕开始阅读775532b569dc5022aaea00b1

山东财经大学学士学位论文

可以看出,采用特殊的窗函数如Hamming窗,可以减小Gibbs效应,但同时也会使滤波器的过度带变宽。波动幅度取决于窗函数幅度频谱旁瓣的相对幅度, 而波纹的多少取决于窗函数旁瓣的多少。以上两点是就是窗函数直接截断Hd(n)引起的截断效应在频域的反映, 截断效应直接影响滤波器的性能, 因为通带内的波动会影响滤波器痛带中的平稳性, 阻带内的波动则影响阻带最小衰减,因此,减少截断效应是FIR数字滤波器设计的关键之一。

5.4.2读入语音信号:

利用MATLAB中的“wavread”命令来读入语音信号,将它赋值给某一向量。再对其进行采样,记住采样频率和采样点数。下面介绍wavread函数几种调用格式。 (1) y=wavread(file)

功能说明:读取file所规定的wav文件,返回采样值放在向量y中。 (2)[y,fs,nbits]=wavread(file)

功能说明:采样值放在向量y中,fs表示采样频率(hz),nbits表示为采样位数。 (3) y=wavread(file,N)

功能说明:读取前N点的采样值放在向量y中。 (4)y=wavread(file,[N1,N2])

功能说明:读取从N1到N2点的采样值放在向量y中。 接下来,对语音信号Windows.wav进行采样。其程序如下:

[x1,fs,bits]=wavread('Windows.wav');

然后,画出语音信号的时域波形,再对语音信号进行频谱分析。MATLAB提供了快速傅里叶变换算法FFT计算DFT的函数fft,其调用格式如下: y=fft(x,N);

参数x为被变换的时域序列向量,N是DFT变换区间长度,当N大于x的长度时,fft函数自动在x后面补零。当N小于x的长度时,fft函数计算x的前N个元素,忽略其后面的元素。 在本次设计中,我们利用fft对语音信号进行快速傅里叶变换,就可以得到信号的频谱特性。 其程序如下:

[x1,fs,bits]=wavread('3a.wav'); %对语音信号进行采样,记住采样频率和采样点数 L=length(x1); Y=fft(x1,L); subplot(2,1,1); plot(x1);

title('原始信号波形'); subplot(2,1,2); plot(abs(Y)); title('原始信号频谱');

程序结果如图所示:

15

山东财经大学学士学位论文

图5-4 原始信号波形及频谱

然后对该原始信号加噪声。利用MATLAB中的随机函数(randn)产生噪声加入到语音信号中,模仿语音信号被污染,并对其频谱分析。Randn函数有两种基本格式:Randn(n)和Randn(m,n),前者产生n*nf服从标准高斯分布的随机数矩阵,后者产生m*n的随机数矩阵。在这里,我们选用Randn(m,n)函数。语音信号添加噪声及其频谱分析的主要程序如下: [y,fs,nbits]=wavread('3a.wav'); sound(y); N=length(y);

Noise=0.01*randn(N,2); Si=y+Noise; sound(Si); subplot(2,1,1); plot(Si);

title('加噪后语音信号的时域波形'); S=fft(Si); subplot(2,1,2); plot(abs(S));

title('加噪后语音信号的频域波形'); 程序结果如下:

山东财经大学学士学位论文

图5-5 加噪后的语音信号的波形

5.4.3 利用汉明窗设计FIR低通滤波器 利用汉明窗设计的滤波器主要程序如下:

wp=0.3*pi; ws=0.4*pi; wc=1/2*(wp+ws); wdelta=ws-wp;

N=ceil(6.6*pi/wdelta); %取整 a=(N-1)/2 n=0:N-1 c=n+0.0000002

hd=sin(wc*(c-a))./(pi*(c-a)) ; %理想低通滤波器 x_label=linspace(-pi,pi,N); figure(1) subplot(211) plot(x_label,hd) xlabel('时域') ylabel('幅度')

title('理想低通滤波器时域波形')

17

山东财经大学学士学位论文

subplot(212)

plot(x_label,fftshift(abs((fft(hd))))) xlabel('频率(rad/s)') ylabel('频率响应幅度')

title('理想低通滤波器频域波形')

w=0.54-0.34*cos((3*pi*c)./(N-1)); %选择汉明窗 figure(2) subplot(211) plot(x_label,w) xlabel('时域') ylabel('幅度')

title('汉明窗时域波形') subplot(212)

plot(x_label,fftshift(abs((fft(w))))) xlabel('频率(rad/s)') ylabel('频率响应幅度') title('汉明窗频域波形') for i=1:N

h(i)=hd(i).*w(i) ; end figure(3) subplot(211) plot(x_label,h) xlabel('时域') ylabel('幅度')

title('窗函数时域波形')

波形如下图所示:

%生成窗函数