数字信号处理课程设计.docx
《数字信号处理课程设计.docx》由会员分享,可在线阅读,更多相关《数字信号处理课程设计.docx(15页珍藏版)》请在冰点文库上搜索。
![数字信号处理课程设计.docx](https://file1.bingdoc.com/fileroot1/2023-5/14/85752655-553e-444b-8f96-db0c52597bbb/85752655-553e-444b-8f96-db0c52597bbb1.gif)
数字信号处理课程设计
江汉大学物理与信息工程学院
数字信号处理课程设计报告
课题名称:
基于MATLAB有噪声语音信号处理
专业:
电子与信息工程
班级:
电信一班
学号:
XXXXXXXXXX
学生姓名:
XX
目录
摘要
正文
一、课程设计内容
二、设计原理
1、采样定理
2、FFT原理
3、FIR数字滤波器的设计
三、设计过程
1、语音信号的采集
2、语音信号的时域和频域分析
3、语音信号加噪与频谱分析
4、滤波器设计
①、低通
②、带通
③、高通
结论
参考文献
摘要
滤波器设计在数字信号处理中占有极其重要的地位,FIR数字滤波器和IIR滤波器是滤波器设计的重要组成部分。
利用MATLAB信号处理工具箱可以快速有效地设计各种数字滤波器。
课题基于MATLAB有噪音语音信号处理的设计与实现,综合运用数字信号处理的理论知识对加噪声语音信号进行时域、频域分析和滤波。
通过理论推导得出相应结论,再利用MATLAB作为编程工具进行计算机实现。
在设计实现的过程中,使用窗函数法来设计FIR数字滤波器,用巴特沃斯、切比雪夫和双线性变法设计IIR数字滤波器,并利用MATLAB作为辅助工具完成设计中的计算与图形的绘制。
通过对对所设计滤波器的仿真和频率特性分析,可知利用MATLAB信号处理工具箱可以有效快捷地设计FIR和IIR数字滤波器,过程简单方便,结果的各项性能指标均达到指定要求。
关键词数字滤波器MATLAB窗函数法
一、课程设计内容
录制一段语音信号,对其进行频谱分析;利用MATLAB中的随机函数产生噪声加入到语音信号中,模仿语音信号被污染,并对其进行频谱分析;设计FIR数字滤波器,并对被噪声污染的语音信号进行滤波,分析滤波后信号的时域和频域特征,回放语音信号;
二、设计原理
1、采样定理
在进行模拟/数字信号的转换过程中,当采样频率fs.max大于信号中,最高频率fmax的2倍时,即:
fs.max>=2fmax,则采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的5~10倍,采样定理又称奈奎斯特定理。
2、FFT的算法原理
快速傅氏变换(FFT)是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
它对傅氏变换的理论并没有新的发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。
设x(n)为N项的复数序列,由DFT变换,任一X(m)的计算都需要N次复数乘法和N-1次复数加法,而一次复数乘法等于四次实数乘法和两次实数加法,一次复数加法等于两次实数加法,即使把一次复数乘法和一次复数加法定义成一次“运算”(四次实数乘法和四次实数加法),那么求出N项复数序列的X(m),即N点DFT变换大约就需要N2次运算。
当N=1024点甚至更多的时候,需要N2=1048576次运算,在FFT中,利用WN的周期性和对称性,把一个N项序列(设N=2k,k为正整数),分为两个N/2项的子序列,每个N/2点DFT变换需要(N/2)2次运算,再用N次运算把两个N/2点的DFT变换组合成一个N点的DFT变换。
这样变换以后,总的运算次数就变成N+2(N/2)2=N+N2/2。
继续上面的例子,N=1024时,总的运算次数就变成了525312次,节省了大约50%的运算量。
而如果我们将这种“一分为二”的思想不断进行下去,直到分成两两一组的DFT运算单元,那么N点的DFT变换就只需要Nlog2N次的运算,N在1024点时,运算量仅有10240次,是先前的直接算法的1%,点数越多,运算量的节约就越大,这就是FFT的优越性。
3、FIR数字滤波器的设计
IIR滤波器和FIR滤波器的设计方法完全不同。
IIR滤波器设计方法有间接法和直接法,间接法是借助于模拟滤波器的设计方法进行的。
其设计步骤是:
先设计过渡模拟滤波器得到系统函数H(s),然后将H(s)按某种方法转换成数字滤波器的系统函数H(z)。
FIR滤波器通常采用间接法,常用的方法有窗函数法、频率采样发和切比雪夫等波纹逼近法。
对于线性相位滤波器,经常采用FIR滤波器。
设计FIR滤波器的步骤。
如下:
(1)根据对阻带衰减及过渡带的指标要求,选择串窗数类型(矩形窗、三角窗、汉宁窗、哈明窗、凯塞窗等),并估计窗口长度N。
先按照阻带衰减选择窗函数类型。
原则是在保证阻带衰减满足要求的情况下,尽量选择主瓣的窗函数。
(2)构造希望逼近的频率响应函数。
(3)计算h(n).。
(4)加窗得到设计结果。
三、设计过程:
1、语音信号的采集
利用PC机上的声卡和Win操作系统可以进行数字信号的采集。
将话筒输入计算机的语音输入插口上,启动录音机。
按下录音按钮,接着对话筒说话“新年快乐!
”,说完后停止录音。
用格式工厂软件解决音频文件格式的问题,最终转换为.wav文件(“新年快乐.wav”)。
将该文件保存入Matlab程序文件目录中。
如下图所示:
Win7录音机
音频文件“新年快乐.wav”的存放
2、语音信号的时域和频域分析
利用MATLAB中的“wavread”命令来读入(采集)语音信号,将它赋值给某一向量。
再对其进行采样,记住采样频率和采样点数。
函数调用格式如下:
[y,fs,nbits]=wavread(file)
功能说明:
采样值放在向量y中,fs表示采样频率(hz),nbits表示采样位数。
时域、频域分析程序:
[y,fs,nbits]=wavread('新年快乐.wav');%读取语音信号文件y:
向量,fs:
采样频率,nbits:
采样位数;
sound(y,fs,nbits);%回放语音信号
N=length(y);%记录语音信号的长度
Y=fft(y,N);%对N点语音信号序列进行傅里叶变换
subplot(2,1,1);
plot(y);
title('原始语音信号时域波形');
subplot(2,1,2);
plot(abs(Y));
title('原始语音信号频域波形');
程序结果如下图:
3、语音信号加噪与频谱分析
由于电脑录音效果比较好,很难得显著地看到滤波器滤波效果,所以通过MATLAB向语音信号添加高斯白噪声,在这里我们直接用randn函数产生高斯分布序列。
Randn函数有两种基本调用格式:
Randn(n)和Randn(m,n),前者产生n×n服从标准高斯分布的随机数矩阵,后者产生m×n的随机数矩阵。
在这里,我们选用Randn(m,n)函数。
语音信号添加噪声及其频谱分析的主要程序如下:
[y,fs,nbits]=wavread('新年快乐.wav');%读取语音信号文件
N=length(y);%记录语音信号的长度
Noise=0.01*randn(N,2);%生成噪音序列
Si=y+Noise;%加噪
sound(Si);
subplot(2,1,1);
plot(Si);
title('加噪语音信号的时域波形');
S=fft(Si);%对N点加噪后的语音信号序列进行傅里叶变换
subplot(2,1,2);
plot(abs(S));
title('加噪语音信号的频域波形');
程序结果如下图:
效果分析:
加噪后,声音变得更为嘈杂、浑厚,加噪后频谱干扰信号增多,幅值也加大了。
4、滤波器设计:
①FIR低通滤波器
程序源代码:
[y,fs,nbits]=wavread('新年快乐.wav');
Fp=900;
Fc=1100;
Fs=fs;
wp=2*pi*Fp/Fs;
ws=2*pi*Fc/Fs;
rp=1;
rs=50;
p=1-10.^(-rp/20);%通带阻带波纹
s=10.^(-rs/20);
fpts=[wpws];
mag=[10];
dev=[ps];
[n21,wn21,beta,ftype]=kaiserord(fpts,mag,dev);%kaiserord求阶数截止频率
b21=fir1(n21,wn21,Kaiser(n21+1,beta));%由fir1设计滤波器
[h,w]=freqz(b21,1);%得到频率响应
%plot(w/pi,abs(h));
%title('FIR低通滤波器');
n=length(y);%求出语音信号的长度
noise=0.01*randn(n,2);%随机函数产生噪声
s=y+noise;%语音信号加入噪声
S=fft(s);%傅里叶变换
z21=fftfilt(b21,s);
sound(z21);
m21=fft(z21);
subplot(2,2,1);
plot(abs(S),'g');
title('滤波前信号的频谱');
subplot(2,2,2);
plot(abs(m21),'r');title('滤波后信号的频谱');
subplot(2,2,3);
plot(s);title('滤波前信号的波形');
subplot(2,2,4);
plot(z21);title('滤波后的信号波形');
滤波器幅频特性曲线图:
高通滤波器滤波效果:
效果分析:
滤波前后波形的变化没有显著的变化,而频谱有比较明显的变化,中间有一部分幅值急剧减小。
语音信号重放,明显感觉噪音有所变化。
②buffer带通滤波器
程序源代码:
Fp1=1400;
Fp2=3400;
Fs1=1500;
Fs2=3600;
[y,fs,nbits]=wavread('新年快乐.wav');
Ft=fs;
wp1=tan(pi*Fp1/Ft);%带通到低通滤波器参数转换
wp2=tan(pi*Fp2/Ft);
ws1=tan(pi*Fs1/Ft);
ws2=tan(pi*Fs2/Ft);
w=wp1*wp2/ws2;
bw=wp2-wp1;
wp=1;
ws=(wp*wp2-w.^2)/(bw*w);
[n22,wn22]=buttord(wp,ws,1,50,'s');%求低通滤波器阶数和截止频率
[b22,a22]=butter(n22,wn22,'s');%求S域的频率响应的参数
[num2,den2]=lp2bp(b22,a22,sqrt(wp1*wp2),bw);%将S域低通参数转为带通的
[num22,den22]=bilinear(num2,den2,0.5);%双线性变换实现S域到Z域的转换
[h,w]=freqz(num22,den22);%根据参数求出频率响应
%plot(w*8000*0.5/pi,abs(h));
%axis([0400001.5]);
%legend('带通滤波器(butter)');
n=length(y);%求出语音信号的长度
noise=0.01*randn(n,2);%随机函数产生噪声
s=y+noise;%语音信号加入噪声
S=fft(s);%傅里叶变换
z22=fftfilt(b22,s);
sound(z22);
m22=fft(z22);%求滤波后的信号
subplot(2,2,1);
plot(abs(S),'g');
title('滤波前信号的频谱');
subplot(2,2,2);
plot(abs(m22),'r');
title('滤波后信号的频谱');
subplot(2,2,3);
plot(s);
title('滤波前信号的波形');
subplot(2,2,4);
plot(z22);
title('滤波后的信号波形');
滤波器幅频特性曲线图:
高通滤波器滤波效果:
效果分析:
滤波前后波形在时域和频域在幅值上都有比较明显的变化。
语音信号重放,明显感觉声音变得低沉、噪声减少了些。
③FIR高通滤波器
程序源代码:
[y,fs,nbits]=wavread('新年快乐.wav');
Fp=1500;
Fc=1400;
Fs=fs;
wp=2*pi*Fp/Fs;
ws=2*pi*Fc/Fs;
p=1-10.^(-rp/20);%通带阻带波纹
s=10.^(-rs/20);
fpts=[wswp];
mag=[01];
dev=[ps];
[n23,wn23,beta,ftype]=kaiserord(fpts,mag,dev);
b23=fir1(n23,wn23,'high',Kaiser(n23+1,beta));%由fir1设计滤波器
[h,w]=freqz(b23,1);%得到频率响应
%plot(w*12000*0.5/pi,abs(h));
%title('FIR高通滤波器');
%axis([3000600001.2]);
n=length(y);%求出语音信号的长度
noise=0.01*randn(n,2);%随机函数产生噪声
s=y+noise;%语音信号加入噪声
S=fft(s);%傅里叶变换
z23=fftfilt(b23,s);
sound(z23);
m23=fft(z23);%求滤波后的信号
subplot(2,2,1);
plot(abs(S),'g');
subplot(2,2,2);
plot(abs(m23),'r');
title('滤波后信号的频谱');
subplot(2,2,3);
plot(s);
title('滤波前信号的波形');
subplot(2,2,4);
plot(z23);
title('滤波后的信号波形');
滤波器幅频特性曲线图:
高通滤波器滤波效果:
效果分析:
滤波前后波形的在时域和频域都发生了显著的变化。
语音信号重放,无法听到“新年快乐”的原音。
结论
在专业课的学习过程中,我从理论的角度认识到了DSP(数字信号处理)对帮助人们获取有价值信息有十分巨大的意义。
通过实践“基于MATLAB有噪声语音信号处理”这一课题,使我对DSP有了更为深刻的认识,在这个课题中我借助Matlab软件用“窗函数”的方法分别设计了低通、带通、高通三种FIR滤波器,对自己录制的一段语音信号进行加噪(为了获得更为显著的效果)、然后用根据不同要求设计好的滤波器进行滤波除噪,不同的滤波器在设置不同的技术指标的时候得到的效果截然不同,为了尝试最好的滤波效果,我反复修改滤波器的通、阻带起始、截止频率来验证,觉得非常有意思。
之前在实验室参加SOPC竞赛,另一组的同学做的是关于“呼吸音检测”的竞赛课题,当时对如何从一段呼吸声音频信号中分离出各种频率成分来分析觉得不可思议,现在从原理上觉得是可行的,当然如何具体去实施还有如何识别有价值信号、如何设计滤波器诸多问题需要考虑。
总之,通过这次的课题设计,对如何从一段语音信号中获取有用的信号有了初步的实践体会和认识,对以后继续专业知识的学习积累了非常宝贵的经验。
参考文献
1、《数字信号处理》钱同惠主编机械工业出版社,2004
2、《数字信号处理》姚天任、江太辉编著武汉理工大学出版社,2000