您好,欢迎访问三七文档
《通信系统原理》课程设计报告书课题名称语音信号采集与处理姓名学号院、系、部专业通信工程指导教师年月日※※※※※※※※※※※※※※※※※※※※※※※※《通信系统原理》课程设计课题:语音信号采集与处理一、实践的目的和要求1.熟悉Matlab软件在通信系统中的应用:Matlab在通信系统中主要应用于通讯系统的设计与仿真。2.Matlab软件功能简介:Matlab在数学类科技应用软件中在数值计算方面首屈一指,它可以进行矩阵运算、绘制函数和数据实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。Matlab的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。3.本题目的意义:语音信号处理是一门比较实用的学科,语音是人类获取信息的重要来源和利用信息的重要手段,它的应用和发展与语言学,声音测量学、电子测量学以及数字信号处理等学科有着紧密的联系,它是人类最重要、最有效、最常用和最方便的交换信息的形式。二、实践原理:1、采样定理:在进行模拟与数字信号的转换过程中,当采样大于最高频率的2倍时,则采样之后的数字信号完整的保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的5~10倍。2、采样频率:采样频率是指计算机每秒钟采样多少个声音样本,是描述声音文件的音质、音频、衡量声卡、声音文件的质量标准。采样频率越高,即采样的时间间隔越短,则在单位时间内计算机得到的声音样本数据越多,对声音波形的表示也越准确。3、采样位数与采样频率:采样位数即采样值或取样值,用来衡量声音波动变化的参数,是指声卡在采集和播放声音文件时所使用数字声音信号的二进制位数。采样频率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然。采样位数和采样率对于音频接口来说是最为重要的两个指标。无论采样频率如何,理论上来说采样的位数决定了音频数据最大的力度范围。采样位数越多则捕捉到的信号越精确。4、利用MATLAB对语音信号进行分析和处理:采集语音信号后,利用MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。5、语音信号的滤波示意图:三.实践步骤1、语音信号的采集与分析(1)利用PC机上的声卡和WINDOWS操作系统可以进行数字信号的采集。将话筒插入计算机的语音输入插口上,启动录音机。按下录音按钮,对话筒说话“我想回家”,说完后停止录音,屏幕左侧将显示所录声音的长度。+滤波器Matlab频谱显示语音信号噪声扬声器(2)以文件名“2”保存入C盘中。可以看到,文件存储器的后缀默认为.wav。要保存文件时,利用了计算机上的A/D转换器,把模拟的声音信号变成了离散的量化了的数字信号,放音时,它又通过D/A转换器,把保存的数字数据恢复为原来的模拟的声音信号。(3)在Matlab软件平台下可以利用函数wavread对语音信号进行采样,得到了声音数据变量x1,x1=wavread('C:\2.wav');同时把x1的采样频率fs=22050Hz和数据位Nbits=16Bit放进了MATALB的工作空间。图figure1为原始语音信号的时域图形。(4)从图中可以看出在时域环境下,信号呈现出4个不规则的信号峰值。通过freqz(x1)函数绘制原始语音信号的频率响应图figure2。(5)然后对语音信号进行频谱分析,在Matlab中可以利用函数y1=fft(x1,1024);plot(abs(y1(1:512)))对信号行快速傅里叶变换,得到信号的频谱图figure3,从图中可以看出对各个频点上的随机信号在频域进行抽样,抽样频率为22050Hz。2、利用余弦函数构造一个高频噪声1.在Matlab中人为设计一固定频率5000Hz的噪声干扰信号。噪声信号通常为随机序列,在本设计中用余弦序列代替。干扰信号构建命令函数为d=[Au*cos(2*pi*5000*t)]';x1=wavread('C:\2.wav');x2=x1+d;2.给出的干扰信号为一个余弦信号,针对上面的语音信号,采集了其中一段。再对噪音信号进行频谱变换得到其频谱图,y2=fft(x2,1024);从图中可以看出干扰信号,在4000Hz和6000Hz频点处有一高峰,其中5000Hz正是本设计所要利用的。若带噪信号y(m)是纯净语音信号s(m)和平稳加性高斯白噪声n(m)构成的,即:y(m)=x(m)+n(m);则在频域中表示为Y(ω)=X(ω)+N(ω);其中Y(ω),X(ω),N(ω)分别是y(m),x(m),n(m)的傅里叶变换。X(ω)=Y(ω)-N(ω);只要从带噪信号中减去噪声信号即可估计出语音信号,再进行傅里叶反变换就可得到增强的语音。3、设计合适的滤波器,滤除高频噪声由模拟滤波器变换为数字滤波器时,采用的是双线性变换法,它保留的是从模拟到数字域的系统函数表示。用双线性变换法设计低通滤波器。在MATLAB中,可以利用函数butterworth设计低通滤波器。数字巴特沃兹低通滤波器函数:function[b,a]=digital_lowpass_butter(wp,ws,Rp,As,Fs)[N,wn]=buttord(wp/pi,ws/pi,Rp,As)[b,a]=butter(N,wn);时域低通滤波:x=wavread(‘2.wav’);x为读取原语音文件的数据,一维数组h=ones(1,220);h为低通滤波器的单位冲激响应y=conv(x,h);时域卷积,低通滤波wavwrite(y,22050,‘su2.wav’);将滤波后的数据保存为.wav文件用MATLAB中的函数freqz画出各滤波器的频率响应。用设计好的带阻滤波器对含噪语音信号进行滤波,在Matlab中IIR滤波器利用函数filter对信号进行滤波。在一个窗口同时画出滤波前后的波形及频谱。从图中可以看出,5000Hz看到的高峰消失了,语音信号与开始的一样,滤波器成功的滤除了干扰信号。利用MATLAB对语音信号进行分析和处理,采集语音信号后,利用MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。四、程序设计及仿真图1、用Matlab对原始语音信号进行分析,画出它的时域波形和频谱程序:fs=22050;[x,fs,Nbits]=wavread('C:\2.wav');[x,fs,Nbits]=wavread('C:\2.wav');t=0:1/22050:(length(x)-1)/22050;sound(x,fs);%对加载的语音信号进行回放figure(1)plot(x)%做原始语音信号的时域图形title('原始语音信号');xlabel('timen');ylabel('fuzhin');figure(2)freqz(x)%绘制原始语音信号的频率响应图title('频率响应图')n=length(x);%求出语音信号的长度y1=fft(x,n);%傅里叶变换y2=fftshift(y1);%对频谱图进行平移f=0:fs/n:fs*(n-1)/n;%得出频点figure(3)subplot(2,1,1);plot(abs(y2))%做原始语音信号的FFT频谱图title('原始语音信号FFT频谱')subplot(2,1,2);plot(f,abs(y2));%绘制原始语音信号的频谱图title('原始语音信号频谱')时域波形和频谱:2.给原始的语音信号加上一个高频余弦噪声,频率为(2Khz)。对加噪后的语音进行分析,并画出其信号时域和频谱图。程序:%加噪声k=1:1:n;%定义k值,噪声与原始语音长度一致c1=10*sin(2*pi*2000*k);%噪声信号的函数figure(4)plot(k,c1)title('噪声信号时域图');%绘制噪声信号的时域波形图figure(5)freqz(c1)%绘制噪声信号的频率响应图title('噪声信号频率响应图')s=length(c1);%噪声信号的长度xc=fft(c1,s);%对噪声信号进行频谱变换xcc=fftshift(xc);f=0:fs/s:fs*(s-1)/s;figure(6)%绘制噪声语音的FFT频谱图plot(f,abs(xcc))title('噪声信号的频谱图');%噪音与原始信号叠加z=x'+c1;y3=fft(z,s);%对叠加信号进行频谱变换y4=fftshift(y3);%对频谱图平移f=0:fs/s:fs*(s-1)/s;%得出频点figure(7)plot(f,abs(y4));%绘出加噪语音频谱图axis([080000400]);title('含噪语音信号的频谱');figure(8)subplot(2,1,1);plot(f,abs(y2))%做原始语音信号的FFT频谱图title('原始语音信号FFT频谱')subplot(2,1,2);plot(f,abs(y4))%做加噪语音信号的FFT频谱图title('加噪语音信号频谱')时域波形和频谱:与原始信号对比,区别:3.设计合适的滤波器,滤除高频噪声,绘出滤波后的信号频域和时域波形:程序:%用双线性变换法设计巴特沃思低通滤波器wp=0.25*pi;%通带截止频率ws=0.3*pi;%阻带截止频率Rp=1;%通带最大衰减Rs=15;%阻带最小衰减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');%选择滤波器的最小阶数[Z,P,K]=buttap(N);%创建butterworth模拟滤波器[Bap,Aap]=zp2tf(Z,P,K);[b,a]=lp2lp(Bap,Aap,Wn);[bz,az]=bilinear(b,a,Fs);%用双线性变换法实现模拟滤波器到数字滤波器的转换[H,W]=freqz(bz,az);%绘制频率响应曲线figure(9)plot(W*Fs/(2*pi),abs(H))gridxlabel('频率/Hz')ylabel('频率响应幅度')title('Butterworth')f1=filter(bz,az,z);figure(10)subplot(2,1,1)plot(t,z)%画出滤波前的时域图title('滤波前的时域波形');subplot(2,1,2)plot(t,f1);%画出滤波后的时域图title('滤波后的时域波形');sound(f1,22050);%播放滤波后的信号p=length(f1);F0=fft(f1,p);f=0:fs/p:fs*(s-1)/p;figure(11)y2=fft(z,1024);subplot(2,1,1);plot(f,abs(y4));%画出滤波前的频谱图title('滤波前的频谱')xlabel('Hz');ylabel('fuzhi');subplot(2,1,2)F1=plot(f,abs(F0));%画出滤波后的频谱图title('滤波后的频谱')xlabel('Hz');ylabel('fuzhi');x=wavread('C:\2.wav');%x为读取原语音文件的数据,一维数组h=ones(1,220);%h为低通滤波器的单位冲激响应y=conv(x,h);%时域卷积,低通滤波wavwrite(y,22050,'C:\su2.wav');%将滤波后的数据保存为.wav文件时域波形和频谱:与原噪音信号对比,区别:滤波后信号的幅值都偏小于原信号的幅值。五、心得体会:通过这一个星期的课程设计,
本文标题:语音信号采集与处理
链接地址:https://www.777doc.com/doc-7326150 .html