数字信号处理数字信号处理课程设计题目:基于MATLAB的语音信号的采集与处理学院:皖西学院专业:通信工程班级:通信1001班学号:20100134612010013494姓名:刘敏纵大庆指导教师:何富贵数字信号处理摘要:本次课程设计题目为基于MATLAB的语音信号的采集与处理。首先我们利用计算机上的录音软件获得语音信号,然后利用MATLAB对语音信号进行分析和处理,采集语音信号后,利用MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号!数字信号处理目录1.背景…………………………………………………………………12.设计目的……………………………………………………………23.设计原理……………………………………………………………24.设计过程……………………………………………………………35.实验代码及结果………………………………………………………45.1语音信号的采集……………………………………………………45.2语音信号加噪与频谱分析…………………………………………………75.3巴特沃斯滤波器的设计…………………………………………………95.4比较滤波前后语音信号波形及频谱………………………………………106.收获与体会……………………………………………………………12参考文献…………………………………………………………………13数字信号处理第1页1.引言数字信号处理是利用计算机或专用处理设备,以数值计算的方法对信号进行采集、抽样、变换、综合、估值与识别等加工处理,借以达到提取信息和便于应用的目的。它在语音、雷达、图像、系统控制、通信、航空航天、生物医学等众多领域都获得了极其广泛的应用。具有灵活、精确、抗干扰强、度快等优点。数字滤波器,是数字信号处理中及其重要的一部分。随着信息时代和数字技术的发展,受到人们越来越多的重视。数字滤波器可以通过数值运算实现滤波,所以数字滤波器处理精度高、稳定、体积小、重量轻、灵活不存在阻抗匹配问题,可以实现模拟滤波器无法实现的特殊功能。数字滤波器种类很多,根据其实现的网络结构或者其冲激响应函数的时域特性,可分为两种,即有限冲激响应(FIR,FiniteImpulseResponse)滤波器和无限冲激响应(IIR,InfiniteImpulseResponse)滤波器。FIR滤波器结构上主要是非递归结构,没有输出到输入的反馈,系统函数H(z)在z=∞处收敛,极点全部在z=0处(因果系统),因而只能用较高的阶数达到高的选择性。FIR数字滤波器的幅频特性精度较之于IIR数字滤波器低,但是线性相位,就是不同频率分量的信号经过FIR滤波器后他们的时间差不变,这是很好的性质。FIR数字滤波器是有限单位脉冲响应有利于对数字信号的处理,便于编程,用于计算的时延也小,这对实时的信号处理很重要。FIR滤波器因具有系统稳定,易实现相位控制,允许设计多通带(或多阻带)滤波器等优点收到人们的青睐[1]。IIR滤波器采用递归型结构,即结构上带有反馈环路。IIR滤波器运算结构通常由延时、乘以系数和相加等基本运算组成,可以组合成直接型、正准型、级联型、并联型四种结构形式,都具有反馈回路。同时,IIR数字滤波器在设计上可以借助成熟的模拟滤波器的成果,如巴特沃斯滤波器等。数字信号处理第2页2.设计目的本次课程设计的课题为《基于MATLAB的语音信号采集与处理》,学会运用MATLAB的信号处理功能,采集语音信号,并对语音信号进行滤波及变换处理,观察其时域和频域特性,加深对信号处理理论的理解,并为今后熟。MATLAB在信号与系统中的应用主要包括符号运算和数值计算仿真分析。由于信号与系统课程的许多内容都是基于公式演算,而MATLAB借助符号数学工具箱提供的符号运算功能,能基本满足信号与系统课程的需求。例如解微分方程、傅里叶正反变换、拉普拉斯正反变换和z正反变换等。MATLAB在信号与系统中的另一主要应用是数值计算与仿真分析,主要包括函数波形绘制、函数运算、冲击响应与阶跃响应仿真分析、信号的时域分析、信号的频谱分析、系统的S域分析和零极点图绘制等内容。数值计算仿真分析可以帮助学生更深入地理解理论知识,并为将来使用MATLAB进行信号处理领域的各种分析和实际应用打下基础。3.设计原理利用MATLAB对语音信号进行分析和处理,采集语音信号后,利用MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。语音信号的“短时谱”对于非平稳信号,它是非周期的,频谱随时间连续变化,因此由傅里叶变换得到的频谱无法获知其在各个时刻的频谱特性。如果利用加窗的方法从语音流中取出其中一个短断,再进行傅里叶变换,就可以得到该语音的短时谱。MATLAB在信号与系统中的应用主要包括符号运算和数值计算仿真分析。由于信号与系统课程的许多内容都是基于公式演算,而MATLAB借助符号数学工具箱提供的符号运算功能,能基本满足信号与系统课程的需求。例如解微分方程、傅里叶正反变换、拉普拉斯正反变换和z正反变换等。MATLAB在信号与系统中的另一主要应用是数值计算与仿真分析,主要包括函数波形绘制、函数运算、冲击响应与阶跃响应仿真分析、信号的时域分析、信号的频谱分析、系统的S域分析和零极点图绘制等内容。数值计算仿真分析可以帮助学生更深入地理解理论知识,并为将来使用MATLAB进行信号处理领域的各种分析和实际应用打下基础[3]。滤波器的设计可以通过软件或设计专用的硬件两种方式来实现。随着MATLAB软件及信号处理工具箱的不断完善,MATLAB很快成为应用学科等领域不可或缺的基础软件。它可以快速数字信号处理第3页有效地实现数字滤波器的设计、分析和仿真,极大地减轻了工作量,有利于滤波器设计的最优化。利用MATLAB中的随机函数产生噪声加入到语音信号中,模仿语音信号被污染,并对其进行频谱分析;设计巴特沃斯滤波器,并对被噪声污染的语音信号进行滤波,对滤波前后信号进行时域分析。4.设计过程基于声卡进行数字信号的采集。将话筒插入计算机的语音输入插口上,启动录音机。按下录音按钮,对话筒说话,说完后停止录音。要保存文件时,利用了计算机上的A/D转换器,把模拟的声音信号变成了离散的量化了的数字信号,放音时,它又通过D/A转换器,把保存的数字数据恢复为原来的模拟的声音信号。在Matlab软件平台下可以利用函数wavread对语音信号进行采样,得到了声音数据变量x1,同时把x1的采样频率fs=22050Hz和数据位Nbits=16Bit放进了MATALB的工作空间。然后通过freqz函数绘制原始语音信号的频率响应图。接着对语音信号进行频谱分析,在Matlab中可以利用函数fft对信号进行快速傅里叶变换,得到信号的频谱图。语音信号加噪与频谱分析在Matlab中人为设计一个固定频率5500Hz的噪声干扰信号,噪声信号通常为随机序列,在本设计中用正弦序列代替,干扰信号构建命令函数为d=[Au*sin(2*pi*5500*t)],给出的干扰信号为一个正弦信号,针对上面的语音信号,采集了其中一段。再对噪音信号进行频谱变换得到其频谱图.最后通过函数将原信号与噪声信号叠加在一起构成加噪的语音信号,采集他的加噪信号,接着对其进行fourier变换,得到加噪信号的频谱图,最后设计一个高通滤波器,对加噪的信号进行滤波处理,得到的信号与原始信号进行比较!数字信号处理第4页5.实验代码及结果5.1语音信号的采集源程序为:fs=22050;%语音信号采样频率为22050x1=wavread('D:\MATLAB\bin\zx.wav');%读取语音信号的数据,赋给变量x1sound(x1,22050);%播放语音信号y1=fft(x1,1024);%对信号做1024点FFT变换f=fs*(0:511)/1024;%将0到511,步长为1的序列的值与fs相乘并除以1024的值,赋值给fPlot(x1);%做原始语音信号的时域图形图5-1:语音信号的采集数字信号处理第5页通过freqz函数绘制原始语音信号的频率响应图5-2。fs=22050;%语音信号采样频率为22050x1=wavread('D:\MATLAB\bin\zx.wav');%读取语音信号的数据,赋给变量x1sound(x1,22050);%播放语音信号y1=fft(x1,1024);%对信号做1024点FFT变换f=fs*(0:511)/1024;%将0到511,步长为1的序列的值与fs相乘并除以1024的值,赋值给fFreqz(x1);%绘制原始语音信号的频率响应图图5-2:原始语音信号的频率采样数字信号处理第6页然后对语音信号进行频谱分析,在Matlab中可以利用函数fft对信号行快速傅里叶变换,得到信号的频谱图5-3。fs=22050;%语音信号采样频率为22050x1=wavread('D:\MATLAB\bin\zx.wav');%读取语音信号的数据,赋给变量x1sound(x1,22050);%播放语音信号y1=fft(x1,1024);%对信号做1024点FFT变换f=fs*(0:511)/1024;%将0到511,步长为1的序列的值与fs相乘并除以1024的值,赋值给fsubplot(2,1,1);%创建两行一列绘图区间的第1个绘图区间plot(abs(y1(1:512)));%做原始语音信号的FFT频谱图title('原始语音信号FFT频谱');subplot(2,1,2);plot(f,abs(y1(1:512)));%abs是绝对值,plot是直角坐标下线性刻度曲线数字信号处理第7页title('原始语音信号频谱');图5-3:原始信号的FFT变换5.2语音信号加噪与频谱分析fs=22050;%语音信号采样频率为22050x1=wavread('D:\MATLAB\bin\zx.wav');%读取语音信号的数据,赋给变量x1f=fs*(0:511)/1024;%将0到511,步长为1的序列的值与fs相乘并除以1024的值,赋值给ft=0:1/fs:(length(x1)-1)/fs;%将0到x1的长度减1后的值除以fs的值,且步长为1/fs的值,的序列的值,赋予t数字信号处理第8页Au=0.005;%噪声幅值d=[Au*sin(2*pi*5500*t)]';%所加的噪声是正弦信号x2=x1+d;%将正弦信号噪声加在语音信号上sound(x2,22050);%播放语音信号y1=fft(x1,1024);%对信号y1做1024点FFT变换y2=fft(x2,1024);%对信号y2做1024点FFT变换figure(4);%创建图形窗1plot(t,x2);%做加噪后的信号时域title('加噪后的信号');图5-4:加噪声后的语音信号数字信号处理第9页5-3:巴特沃斯滤波器的设计:wp=0.25*pi;%通带截止频率ws=0.3*pi;%阻带截止频率Rp=1;%通带最大衰减(db)Rs=15;%阻带最大衰减(db)Fs=22050;Ts=1/Fs;wp1=2/Ts*tan(wp/2);%将模拟指标转换成数字指标ws1=2/Ts*tan(ws/2);%将模拟指标转换成数字指标[N,Wn]=buttord(wp1,ws1,Rp,Rs,'s');%选择滤波器的最小阶数(估算得到Butterworth低通滤波器的最小阶数N和3dB截止频率Wc)[Z,P,K]=buttap(N);%创建Butterworth低通滤波器原型[Bap,Aap]=zp2tf(Z,P,K);%将零极点增益转换为普遍分子,分母[b,a]=lp2lp(Bap,Aap,Wn);%将普遍的分子和分母转换为以Wn为截止频率[bz,az]=bilinear(b,a,Fs);%用双线性变换法实现模拟滤波器到数字滤波器的转换(模拟转换为数字)[H,W]=freqz(bz,az);%求频率响应figure(6)plot