数字信号处理课程设计.docx
《数字信号处理课程设计.docx》由会员分享,可在线阅读,更多相关《数字信号处理课程设计.docx(12页珍藏版)》请在冰豆网上搜索。
数字信号处理课程设计
数字信号处理
课程设计
题目:
基于matlab的语音信号滤波处理
指导老师:
学院:
XXXXXXX
班级:
XXXXXXX
班号:
XXXXXXX
姓名:
XXXX
学号:
XXXXXXXXXXXX
2013年12月6日
摘要
语音信号处理是一门新兴的学科,同时又是综合性的多学科领域和涉及面很广的交叉学科。
虽然从事这一领域研究的人员主要来自信号与信息处理及计算机应用等学科,但是它与语音学、语言学、声学、认知科学、生理学、心理学等许多学科也有非常密切的联系。
随着信息科学技术的飞速发展,语音信号处理取得了重大的进展。
本设计是基于Matlab语音信号的滤波处理,要求自己录制一段自己的语音后,在MATLAB软件中采集语音信号、回放语音信号并画出语音信号的时域波形和频谱图。
再在Matlab中分别设计不同形式的FIR数字滤波器。
之后对采集的语音信号经过不同的滤波器(低通、高通、带通)后,观察不同的波形,并进行时域和频谱的分析。
对比处理前后的时域图和频谱图,分析各种滤波器对于语音信号的影响。
最后分别收听进行滤波后的语音信号效果,做到了解在怎么样的情况下该用怎么样的滤波器。
通过Matlab的仿真,加深对语音信号处理的理解。
Matlab语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换成离散的数据文件,然后用其强大的矩阵运算能力处理数据。
目录
一.设计内容3
二.设计原理:
4
1语音信号的时域分析4
1.1信号提取:
4
1.2信号调整:
4
2语音信号的频域分析4
2.1信号变换:
5
2.2信号滤波:
5
3快速傅里叶变换5
4采用矩形窗设计滤波器:
5
三.设计过程6
1语音信号的采集6
2语音信号的滤波:
7
2.1低通滤波器的设计:
7
2.2带通滤波器的设计:
8
2.3高通滤波器的设计:
8
四.波形对比与分析:
9
1时域波形对比:
9
2频率响应对比:
10
3频谱对比:
11
五.回放结果的比较:
11
六.出现的问题及解决方案:
12
七.总结13
参考文献14
一.设计内容
首先利用Windows下的录音机,录制一段自己的语音,或者直接从互联网下载一段wav格式的音频文件。
然后在Matlab软件平台下,调用函数功能画出它的时域波形和频谱特性。
比较滤波前后的波形和特性。
最后,调用sound函数回放信号,感受滤波前后的声音变化。
二.设计原理:
语音信号时一种非平稳的时变信号,它带着各种信息。
在语音编码、语音合成、语音识别和语音增强等语音处理中无一例外需要提取语音中包含的各种信息。
语音信号分析的目的就在于方便有效的提取并表示语音信号所携带的信息。
语音信号处理可以分为时域和变换域等处理方法,其中时域分析是最简单的方法,直接对语音信号的时域波形进行分析,崎岖的特征参数主要有语音的短时能量,短时平均过零率,短时自相关函数等。
1语音信号的时域分析
1.1信号提取:
通过图形用户界面上的菜单功能按键采集电脑上的一段音频信号,完成音频信号的频率,幅度等信息的提取,并得到该语音信号的波形图。
1.2信号调整:
在设计的用户图形界面下对输入的音频信号进行各种变化,如变化幅度、改变频率等操作,以实现对语音信号的调整。
2语音信号的频域分析
信号的傅里叶表示在信号的分析和处理中起着重要的作用。
因为对于线性系统来说,可以很方便地确定其对正弦或复指数和的响应,所以傅里叶分析方法能完善地解决许多信号分析和处理问题。
另外,傅里叶表示使信号的某些特性变得更明显,因此,它能更深入地说明信号的各项红物理现象。
由于语音信号时随着时间变化的,通常认为,语音是一个受准周期脉冲或随机噪声源激励的线性系统的输出。
输出频谱是声道系统频率响应与激励源频谱的乘积。
身份到系统的频率响应及激励源都是随时间变化的,因此一般标准的傅里叶表示虽然适用于周期及平稳随机信号的表示,但不能直接用于语音信号。
由于语音信号可以认为在短时间内,近似不变,因而可以采用短时分析法。
2.1信号变换:
在用户图形界面西啊对采集的语音信号进行Fourier等变换,并画出变换前后的频谱图和倒谱图。
2.2信号滤波:
滤除语音信号中的噪音部分,可以采用抵用滤波、高通滤波、带通滤波,并比较各种滤波后的效果。
3快速傅里叶变换(FFT)
对信号进行傅里叶变换,得到频谱特性。
4采用矩形窗设计滤波器:
矩形窗的定义:
一个N点的矩形窗函数定义为如下
矩形窗的主瓣宽度小(4*pi/N),具有较高的频率分辨率,旁瓣峰值-13dB,过渡带宽为1.8*pi/N,阻带最小衰减-21dB。
三.设计过程
1语音信号的采集
在Matlab软件平台下,利用函数wavread对语音信号《李晗.wav》进行采样,并记住采样频率和采样点数。
运用函数[y,fs,bits]=wavread();可以得到:
采样频率fs=44100Hz比特率bits=32
持续时间Ts采样点数N=Ts*fs
本设计采用的是窗函数法来实现的低通、高通和带通滤波器的设计。
原始语音文件的频谱分析:
首先画出语音信号的时域波形,然后对语音信号进行频谱分析。
在Matlab中,可以利用函数fft对信号进行快速傅里叶变换。
绘制出原始语音信号的时域图、频率响应和频谱图。
Matlab程序实现:
[y,fs,bits]=wavread('D:
/李晗.wav');
figure
(1);
plot(y);%做原始语音信号的时域图形
title('时域波形(原始语音信号)');
xlabel('时间n');
ylabel('幅值y');
figure
(2);
freqz(y,1,512);
title('频率响应(原始语音信号)');
figure(3);
y1=fft(y);%做length(y)点的FFT
y1=fftshift(y1);%平移,是频率中心为0
derta_fs=fs/length(y);%设置频谱的间隔,分辨率
plot((-fs/2:
derta_fs:
fs/2-derta_fs),abs(y1));%画出原始语音信号的频谱图
title('频谱(原始语音信号)');
gridon;
其中y是声音文件返回的采样数据,fs是采样频率,bits是每秒采样的位数,y1是快速傅里叶变换(FFT)后得到的数据。
2语音信号的滤波:
设计滤波器对采集的信号进行滤波,比较滤波前后语音信号的波形及频谱。
要求自己确定滤波器的性能指标,用冲激响应不变法、双线性变换法或窗函数法设计3种滤波器:
低通、高通和带通滤波器。
运用矩形窗设计的低通滤波器程序:
fs是采样频率;fc1是滤波器截止频率;wc1是滤波器截止角频率;wp1是通带边界频率;ws1是阻带边界频率
2.1低通滤波器的设计:
性能指标:
低通滤波,截止频率4000,阻带衰减20dB,过渡带宽0.1π
Matlab程序实现:
%低通滤波:
截止频率4000,阻带衰减20dB,过渡带宽0.1π
fc1=4000;
N1=2*pi*0.9/(0.1*pi)
wc1=2*pi*fc1/fs;
ifrem(N1,2)==0
N1=N1+1;
end
Window=boxcar(N1+1);%长度为N1的矩形窗Window
b1=fir1(N1,wc1/pi,Window);
figure(4);
freqz(b1,1,512);
title('频率响应(低通滤波后)');
y_low=filter(b1,1,y);%对信号进行低通滤波
figure(5);
plot(y_low);
title('时域波形(低通滤波后)');
figure(6);
plot([-fs/2:
derta_fs:
fs/2-derta_fs],abs(fftshift(fft(y_low))));
title('频谱(低通滤波后)');
2.2带通滤波器的设计:
性能指标:
下截止频率4000,上截止频率8000,阻带衰减20dB,过渡带宽度0.1π
%带通滤波:
下截止频率4000,上截止频率8000,阻带衰减20dB,过渡带宽度0.1π
f1=4000;f2=8000;%带通滤波器的通带范围
w1=2*pi*f1/fs;
w3=w1+0.1*pi;
w2=2*pi*f2/fs;
w4=w2-0.1*pi;
w=[(w1+w3)/2,(w2+w4)/2];
B=0.1*pi;
N3=ceil(2*0.9*pi/B);
N3=N3+mod(N3,2);
Window=boxcar(N3+1);
b3=fir1(N3,w/pi,'stop',Window);%带通滤波器
figure(10);
freqz(b3,1,512);%数字滤波器频率响应
title('频率响应(带通滤波后)');
y_daitong=filter(b3,1,y);%对信号进行带通滤波
figure(11);
plot(y_daitong);
title('时域波形(带通滤波后)');
figure(12);
plot([-fs/2:
derta_fs:
fs/2-derta_fs],abs(fftshift(fft(y_daitong))));
title('频谱(带通滤波后)');
2.3高通滤波器的设计:
性能指标:
高通滤波,截止频率4000,阻带衰减40dB,过渡带宽0.1π
%高通滤波:
截止频率4000,阻带衰减40dB,过渡带宽0.1π
fc2=4000;
N2=2*pi*3.1/(0.1*pi)
wc2=2*pi*fc1/fs;
N2=N2+mod(N2,2);
Window=hanning(N2+1);
b2=fir1(N2,wc2/pi,'high',Window);
figure(7);
freqz(b2,1,512);%数字滤波器频率响应
title('频率响应(高通滤波后)');
y_high=filter(b2,1,y);%对信号进行高通滤波
figure(8);
plot(y_high);
title('时域波形(高通滤波后)');
figure(9);
plot([-fs/2:
derta_fs:
fs/2-derta_fs],abs(fftshift(fft(y_high))));
title('频谱(高通滤波后)')
四.波形对比与分析:
1时域波形对比:
图中蓝色的代表相对低频的部分,绿色代表相对高频的部分,低通滤波的图形看上去不是很明显,但是依旧可以看出来,绿色部分有所减少。
2频率响应对比:
3频谱对比:
从频谱图之间的对比可以看出,低通频谱图显示,明显有滤去了高频成分,带通滤去了中间频率部分,而高通最明显,滤去了低频部分。
五.回放结果的比较:
经过回放三个不同类型滤波器输出的语音信号,并与原语音信号对比得到了如下结论。
原始语音播放:
sound(y,fs);
低通滤波后播放:
sound(y_low,fs);
高通滤波后播放:
sound(y_high,fs);
带通滤波后播放:
sound(y_daitong,fs);
因为截取的是摇滚乐的一个片段,高频成分较多,所以低通滤波后播放的声音很柔和,没有原始语音那么刺耳。
而且尖锐的声音也听不到了。
而高通滤波后播放的乐曲,基本听不到人声,只能听到少许的尖锐的声音。
而带通滤波器听起来不是很明显,可能是因为摇滚乐的中频成分较少,而高频成分较多,无法体现出明显的变化,但是细致的听还是可以听出区别的。
六.出现的问题及解决方案:
在高通与带通滤波器的设计时老是报错,但同样的用法在低通滤波器中就可以实现
b2=fir1(N2,wc2/pi,'high',Window);
?
?
?
Errorusing==>fir1
Thewindowlengthmustbethesameasthefilterlength.
其要求在fir函数中所选用的窗长要和滤波器长度一致。
但在参考书上指出,滤波器阶数必须为窗长加1。
经上网查询后,原来高通、带阻滤波器的阶数应该控制为奇数,因为如果阶数为偶数,则在π点必有一零点,这对于高通带阻来说是不允许的,故取阶数为奇数,而你FIR1滤波器阶数为M+1阶,所以你的M必须为偶数,所以可以将程序中去窗长算法由原程序的:
N2=2*pi*0.9/(0.1*pi);
ifrem(N2,2)==0
N2=N2+1;
End
和:
N3=2*pi*0.9/(0.1*pi);
ifrem(N3,2)==0
N3=N3+1;
End
改为了:
N2=N2+mod(N2,2);
和:
B=0.1*pi;(B为过渡带宽)
N3=ceil(2*0.9*pi/B);
N3=N3+mod(N3,2);
在设计高通滤波器时先是使用的矩形窗,用矩形窗验证出来的结果中低频语音分量依旧很强,不能将其全部抑制在0,之后换窗,选着了最小衰减可以到达53dB的海明窗,再次试验,非常成功!
七.总结
以往都是通过课本来感性的认知语音信号,通过本次的课程设计,让我对语音信号有了一个较为实际的认识。
于此同时,让我再次把数字信号处理及数字滤波器的设计方法重新进行了复习和学习。
而对于Matlab,也再次让我感受到了其功能的强大。
最为重要的是,本次课程设计让我重新审视了学习的过程:
只去做实验是不行的,首先还是要思考,遇到了问题查书籍,XX搜索也只是一种手段,更加重要的是想,再理解,只有这样才能真正的做好实验。
参考文献
《数字信号处理》钱同慧机械工业出版社
《信号与线性系统分析》吴大正高等教育出版社
《MATLAB语言与应用》(第三版)薛定宇清华大学出版社