语音数字信号处理.doc_第1页
语音数字信号处理.doc_第2页
语音数字信号处理.doc_第3页
语音数字信号处理.doc_第4页
语音数字信号处理.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

淮阴工学院数字信号处理课程设计报告题目: 语音信号分析与处理 系 (院): 计算机工程学院 专 业: 班 级: 学 号: 姓 名: 指导教师: 学年学期: 2013 2014 学年 第 1 学期 2013年12月 日设计任务书课题名称语音信号处理系统设计设计目的1. 巩固所学的数字信号处理理论知识,理解信号的采集、处理、传输、显示和存储过程;2. 综合运用专业及基础知识,解决实际工程技术问题的能力;3. 学习资料的收集与整理,学会撰写课程设计报告。实验环境1. 微型电子计算机(PC);2. 安装Windows 2000以上操作系统,MATLAB等开发工具。任务要求1. 录制一段个人自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;给定滤波器的性能指标, 采用窗函数法和双线性变换设计滤波器, 并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱, 并对滤波前后的信号进行对比,分析信号的变化;回放语音信号;最后设计一个信号处理系统界面。2. 利用课余时间去图书馆或上网查阅课题相关资料,深入理解课题含义及设计要求,注意材料收集与整理;3. 在第14周末之前完成预设计,并请指导教师审查,通过后方可进行下一步工作;4. 结束后,及时提交设计报告(含纸质稿、电子稿),要求格式规范、内容完整、结论正确,正文字数不少于3000字(不含代码)。工作进度计划序号起止日期工 作 内 容12013.12.92013.12.9在预设计的基础上,进一步查阅资料,完善设计方案。22013.12.102009.12.11设计总体方案,构建、绘制流程框图,编写代码,上机调试。32013.12.122009.12.13测试程序,完善功能,撰写设计报告。42013.12.13参加答辩,根据教师反馈意见,修改、完善设计报告。指导教师(签章): 年 月 日 摘要语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的学科,是目前发展最为迅速的信息科学研究领域的核心技术之一。通过语音传递信息是人类最重要、最有效、最常用和最方便的交换信息形式。同时,语言也是人与机器之间进行通信的重要工具,它是一种理想的人机通信方式,因而可为信息处理系统建立良好的人机交互环境,进一步推动计算机和其他智能机器的应用,提高社会的信息化程度。20世纪60年代中期形成的一系列数字信号处理的理论和算法,如数字滤波器、快速傅立叶变换(FFT)等是语音信号数字处理的理论和技术基础。随着信息科学技术的飞速发展,语音信号处理取得了重大的进展:进入70年代之后,提出了用于语音信号的信息压缩和特征提取的线性预测技术(LPC),并已成为语音信号处理最强有力的工具,广泛应用于语音信号的分析、合成及各个应用领域,以及用于输入语音与参考样本之间时间匹配的动态规划方法;80年代初一种新的基于聚类分析的高效数据压缩技术矢量量化(VQ)应用于语音信号处理中;而用隐马尔可夫模型(HMM)描述语音信号过程的产生是80年代语音信号处理技术的重大发展,目前HMM已构成了现代语音识别研究的重要基石。近年来人工神经网络(ANN)的研究取得了迅速发展,语音信号处理的各项课题是促进其发展的重要动力之一,同时,它的许多成果也体现在有关语音信号处理的各项技术之中。关键词:语音信号;滤波;处理;分析;MATLAB数字信号处理课程设计报告目录1 课题综述11.1 课题来源11.2 课题的意义11.3 预期的目标11.4 面对的问题11.5 需解决的关键技术22 系统分析22.1 涉及的基础知识22.1.1 语音信号相关调用函数介绍22.1.2 IIR滤波器的设计22.1.3 FIR滤波器的设计32.2 解决问题的基本思路32.3 总体方案32.4 功能模块框图43 系统设计53.1 语音信号的录制53.2 实现语音信号的功能53.3 噪声的添加63.4 滤波器的设计64 代码编写74.1 录音74.2 打开文件、播放、暂停、继续74.3 音量调整与语速调整84.4 单一噪声、随机噪声94.4 时域波形114.5 频谱114.6 幅度114.7 语谱124.8 IIR滤波器124.9 FIR滤波器155 程序调试175.1 调试过程与步骤175.2 发现的问题及相应的解决方法186 运行与测试186.1 原始波形186.2 单一加噪196.3 IIR滤波器196.4 FIR滤波器20结 论21致 谢22参 考 文 献231 引言1.1 课题来源语音信号处理包括语音通信、语音合成、语音识别和说话人识别等方面。只有通过语音信号的数字处理,语音信号的好坏、语音识别率的高低,都取决于语音信号处理的好坏。因此,语音信号处理是一项非常有意义的研究课程。1.2 课题的意义语音,作为一种典型的非平稳随机信号,是人来交流最自然、最有效、最方便的手段,在人类文明和社会进步中起着重要的作用。现在随着时代的发展,人类已开始进入了信息化时代,用现代手段研究语音信号,使人们能更加有效地产生、传输、存储、获取和应用语音信息,这对于促进社会的发展具有十分重要的意义。随着电子通信业的出现和计算机技术的发展,人们开始可以从数字信号处理的角度来了解语音。随着计算机技术和信息技术的发展,语音已经成为人机交互的必要手段,而语言信号的采集和处理是人机交互的前提和基础。在MATLAB环境中,可以通过数据分析和处理功能十分强大的工程实用软件,它的信号处理与分析工具箱为语音分析提供了十分丰富的功能函数,可利用这些功能函数快捷而方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。1.3 预期的目标用MATLAB实现语音的播放、暂停、继续、快进、快退、音量与语速的调整,加噪及使用滤波器去噪等功能,同时画出时域、频域波形图及语谱图。1.4 面对的问题由于我们对MATLAB软件的学习还不够,对它的功能及函数使用方法不太明白,所以在做之前必须通过查阅资料及学习才能有进一步的了解,除此之外,老师只给出了本次课程设计的部分程序代码,首先需要解决的就是要实现功能的代码问题,要保证自己编写加载的代码能够和教材中的代码相融合。由于对GUI界面使用太少,因此不熟悉各控件的属性,在各控件之间的函数调用比较困难。1.5 需解决的关键技术由上面提出的问题可知,首先我们要对MATLAB设计界面做适当的了解,自己编写的代码和教材的代码有效、合理的衔接起来,其次正确选择编写过程中要使用的适当的函数,然后分清制作不同类型的滤波器需要的方法。最后是针对去噪影响技术的分析与实现。2 系统分析2.1 涉及的基础知识2.1.1 语音信号相关调用函数介绍(1)wavread函数调用格式:y=wavread(file),读取file所规定的wav文件,返回采样值放在y中。y,fs,nbits=wavread(file),采样值放在向y中,表示采样频率(),nbits表示采样位数。(2)函数sound的调用函数sound可以对声音进行回放。其调用格式为:Sound(x,fs,bits)(3)randn函数调用rand产生的是0,1上的均匀分布的随机序列 ,randn产生均值为0,方差为1的高斯随机序列,也就是白噪声序列;也就是说,可以直接使用上面两个函数对原始信号添加噪声,调用格式:y=x+rand(length(x),1)或者y=x+randn(length(x),1)2.1.2 IIR滤波器的设计IIR滤波器常用的一类设计方法是借助于模拟滤波器的设计方法进行的。通过模拟滤波器得到传输函数Ha(s)后,再将Ha(s)按某种方法转换成数字滤波器的系统函数H(z)。转换方法有脉冲响应不变法和双线性变换法。(1)脉冲响应不变法所谓脉冲响应不变法就是使数字滤波器的单位脉冲响应序列h(n)等于模拟滤波器的单位冲激响应和(t)的采样值,即:,其中,T为采样周期。在MATLAB中,可用函数impinvar实现从模拟滤波器到数字滤波器的脉冲响应不变映射,调用格式为:Bz,Az=impinvar(B,A,Fs)Bz,Az=impinvar(B,A)其中,B、A分别为模拟滤波器的分子和分母多项式系数向量;Fs为采样频率(Hz),缺省值Fs=1Hz;Bz、Az分别为数字滤波器分子和分母多项式系数向量。(2)双线性变换法 平面和z平面的单值双线性映射关系由于s平面和z平面的单值双线性映射关系为s=,其中T为采样周期。因此,若已知模拟滤波器的传递函数,将上式代入即可得到数字滤波器的系统函数H(z)。在双线性变换中,模拟角频率和数字角频率的变换关系为:可见,和w之间的变换关系为非线性的。2.1.3 FIR滤波器的设计IIR数字滤波器的缺点是相位非线性引起频率的色散。而FIR滤波器在保证幅度特性满足技术要求的同时,很容易做到有严格的线性相位特性。 设h(n)长度为N,其系统函数H(z)为: H(z)是具有较好的稳定性。稳定和线性相位特性是FIR滤波器最突出的优点。 设计FIR数字滤波器最简单的方法是窗函数法。 2.2 解决问题的基本思路由于涉及很多控件及滤波器也有多种,而要求实现的功能也有多种,如果把各项功能单一列出来会使本次设计变得复杂,因此我们需要把各控件及功能联系起来形成一个整体,需要设计几个程序调用的函数,这时要会使用全局变量的调用,并编写条件语句来满足选择的实现条件,这样就可以简单清晰的将课题的每个部分都实现。2.3 总体方案在一个相对安静的环境下,录下自己的声音信号,然后对声音进行采样,画出其时域波形、频谱图和语谱图,利用程序编写一个噪声信号加载在原声音信号里面,将这个加噪信号通过相应的滤波器,把通过滤波后的信号进行抽样再和原是信号进行比较。首先,我们要针对所要达到的应用效果创建简单清晰的图形用户界面;其次,在各控件中编写对应的回调函数及所要实现的功能的相关代码;最后,将应用子函数与主函数连接实现本次设计所需实现的功能。图 2.3.1 流程图2.4 功能模块框图图2.4.1 功能模块图2.4.2 波形选择图2.4.3 滤波器选择图2.4.4 加噪3 系统设计3.1 语音信号的录制通过MATLAB中编写代码,利用电脑的麦克风进行语音信号的录制!3.2 实现语音信号的功能播放,暂停,继续,音量的增减,语速的快慢,快进与快放等功能:图3.2.1 实现功能3.3 噪声的添加通过在原打开的音频文件上,直接写入随即函数噪声,简单函数噪声。或者通过选择其他噪声之后与原始信号叠加产生混音信号。图3.3.1 加噪原理3.4 滤波器的设计 滤波器的设计有IIR和FIR,在IIR里可以通过脉冲响应不变法和双线性法来设计,在FIR里可以通过窗体的选择来进行滤波。在实现滤波的过程中,我们会用到低通、高通、带通和带阻滤波器。由于选择的方式不同,滤波的效果也是不相同的。IIR或者FIR高通滤波器低通滤波器带通滤波器图3.4.1 滤波器实现流程4 代码编写4.1 录音fs = 44100; prompt=输入录音时间(s); %弹出式对话框,用来输入录音时间sample= ;x=inputdlg(prompt,录音时间,1,sample);duration=str2num(x1);b=Recording.;msgbox(b,提示)y=wavrecord(duration*fs,fs); %duration*fs 是总的采样点数c=Finished recording.;msgbox(c,提示)wavwrite(y,fs, record.wav);4.2 打开文件、播放、暂停、继续打开文件clear all;global y;global FS;H=*.wav;filename,pathname=uigetfile(H,请选择语音);y,FS,nbits=wavread(filename);播放global player;global y;global FS;global fs;global fc;global val;val=get(handles.slider1,value);fs=get(handles.slider2,value);fc=get(handles.slider3,value);if fs=0 fs=fs+1;endif val=0 val=val+1;endif fc=0 fc=fc+1;endfc=1/fc;player=audioplayer(y*val,FS*fc*fs); play(player);暂停global player;pause(player);继续global player;pause(player);清除所有声音Clear all4.3 音量调整与语速调整音量调节global y;global FS;global player;val=get(handles.slider1,value)V=round(val);set(handles.edit1,string,V);player=audioplayer(val*y,FS);play(player);加速global y;global FS;global player;fs=get(handles.slider2,value);f=round(fs);set(handles.edit2,String,f);player=audioplayer(y*val,FS);减速global y;global FS;global player;fc=get(handles.slider3,value);f=round(fc);set(handles.edit3,string,f);player=audioplayer(y*val,FS);4.4 单一噪声、随机噪声单一噪声global y; global FS; global player; global noise1; player=audioplayer(y,FS); play(player); N=length(y); t=0:0.1*pi/(N-1):0.1*pi; noise=sin(2*pi*1000*t); figure,subplot(3,1,1), plot(y);title( 原始信号时域图 ); subplot(3,1,2); plot(noise);title( 噪声时域图 ); subplot(3,1,3); plot(noise);title( 语音信号加噪后时域图 ); figure,subplot(3,1,1), plot(abs(fft(y);title( 原始信号频谱图 ); subplot(3,1,2); plot(abs(fft(noise);title( 噪声频谱图 ); subplot(3,1,3); plot(abs(fft(y+noise);title( 语音信号加噪后频谱 ); noise1=noise; pause(3.8); player=audioplayer(y+noise1,FS); play(player);随机噪声global y; global FS; global player; global noise2; player=audioplayer(y,FS); play(player); N=length(y); t=0:0.1*pi/(N-1):0.1*pi; noise=randn(size(t); %产生随机噪声 figure,subplot(3,1,1), plot(y);title( 原始信号时域图 ); subplot(3,1,2); plot(noise);title( 噪声时域图 ); subplot(3,1,3); plot(y+noise);title( 语音信号加噪后时域图 ); figure,subplot(3,1,1), plot(abs(fft(y);title( 原始信号频谱图 ); subplot(3,1,2); plot(abs(fft(noise);title( 噪声频谱图 ); subplot(3,1,3); plot(abs(fft(y+noise);title( 语音信号加噪后频谱 ); noise2=noise; pause(3.8); player=audioplayer(y+noise2,FS); play(player);4.4 时域波形global y;N=length(y); t=0:0.1*pi/(N-1):0.1*pi;plot(y);title(原始语音时域图);4.5 频谱global y;global FS;N=256; Y = fft(y,N); Ayy = (abs(Y); Ayy=Ayy/(N/2); Ayy(1)=Ayy(1)/2; F=(1:N-1)*FS/N; plot(F(1:N/2),Ayy(1:N/2); title(原始语音频域图);4.6 幅度global y;N=length(y); magX=abs(y);plot(magX);title(原始语音幅度图);4.7 语谱global y;global FS;R = 256; window = hamming(R); T = 512; L = 35; B,f,t = specgram(y,T,FS,window,R - L);imagesc(t,f,log10(abs(B); title(原始语音语谱图);colormap(jet);xlabel(时间);ylabel(频率);4.8 IIR滤波器val=get(handles.popupmenu1,value) global y; global FS; global player; global noise1; global noise2; player=audioplayer(y,FS); play(player); N=256; t=0:1/FS:N/FS; figure,subplot(2,2,1); plot(y);title(滤波前的信号); Y = fft(y,N); % FFT 变换 Ayy = (abs(Y); % 取模 Ayy=Ayy/(N/2); % 换算成实际幅度:An=A/(N/2) Ayy(1)=Ayy(1)/2; % 换算第 1 个点模值:A0=A/N F=(1:N-1)*FS/N; % 换算成实际频率值:F=(n-1)*Fs/N subplot(2,2,2); plot(F(1:N/2),Ayy(1:N/2); %显示换算后结果,仅显示左半部分 title(滤波前信号的频谱); switch(val) case 1 Fp=2800; Fs=3000; Rp=1; Rs=25; Wp=(Fp/FS)*2*pi; Ws=(Fs/FS)*2*pi; OmegaP=Wp*FS; OmegaS=Ws*FS; n,Wc=buttord(OmegaP,OmegaS,Rp,Rs,s); b,a=butter(n,Wc,s); Bz,Az=impinvar(b,a,FS); case 2 Fp=3000; % 通带截止频率 Fs=2800; % 阻带截止频率 Rp=1; Rs=40; Wp=(Fp/FS)*2*pi; Ws=(Fs/FS)*2*pi; OmegaP=2*FS*tan(Wp/2); OmegaS=2*FS*tan(Ws/2); n,Wc=buttord(OmegaP,OmegaS,Rp,Rs,s); b,a=butter(n,Wc,high,s); Bz,Az=bilinear(b,a,FS); case 3 Fp=2500,3000; Fs=2300,3200; Rp=1; Rs=25; Wp=(Fp/FS)*2*pi; Ws=(Fs/FS)*2*pi; OmegaP=Wp*FS; OmegaS=Ws*FS; n,Wc=buttord(OmegaP,OmegaS,Rp,Rs,s); b,a=butter(n,Wc,s); Bz,Az=impinvar(b,a,FS); end ys=filter(Bz,Az,y); % 进行滤波 subplot(2,2,3); plot(ys); % 滤波后信号的时域波形 title(滤波后的信号); Y = fft(ys,N); Ayy = (abs(Y); Ayy=Ayy/(N/2); Ayy(1)=Ayy(1)/2; F=(1:N-1)*FS/N; subplot(2,2,4); plot(F(1:N/2),Ayy(1:N/2); % 滤波后信号的频谱 title(滤波后信号的频谱); pause(2); sound(ys,FS);4.9 FIR滤波器val=get(handles.popupmenu2,value) global y; global FS; global player; global noise1; global noise2; % y=y+noise1; % y=y+noise2; player=audioplayer(y,FS); play(player); N=256; t=0:1/FS:N/FS; figure,subplot(2,2,1); plot(y);title(滤波前的信号); Y = fft(y,N); % FFT 变换 Ayy = (abs(Y); % 取模 Ayy=Ayy/(N/2); % 换算成实际幅度:An=A/(N/2) Ayy(1)=Ayy(1)/2; % 换算第 1 个点模值:A0=A/N F=(1:N-1)*FS/N; % 换算成实际频率值:F=(n-1)*Fs/N subplot(2,2,2); plot(F(1:N/2),Ayy(1:N/2); %显示换算后结果,仅显示左半部分 title(滤波前信号的频谱); switch(val) case 1 Fp=2800; Fs=3000; wp=(Fp/FS)*2*pi; ws=(Fs/FS)*2*pi; B=ws-wp; M=ceil(8*pi/B); wc=(wp+B/2)/pi; hn=fir1(M-1,wc); case 2 Fp=3000; % 通带截止频率 Fs=2800; % 阻带截止频率 rs=40; wp=2*pi*Fp/FS; ws=2*pi*Fs/FS; B=wp-ws; % 计算过渡带的宽度 %alph=0.5842*(rs-21)0.4+0.07886*(rs-21); %N0=ceil(rs-8)/2.285/B); % 计算阶数N N0=ceil(4*pi/B)-1; N=N0+mod(N0+1,2); wc=(ws+B/2)/pi; % 设置理想带通截止频率(归一化) hn=fir1(N-1,wc,high,hanning(N); % 得到h(n) case 3 Fup=3200; Flp=2300; Fus=3000; Fls=2500; wlp=(Flp/FS)*2*pi; wls=(Fls/FS)*2*pi; wup=(Fup/FS)*2*pi; wus=(Fus/FS)*2*pi; B=wls-wlp; M=ceil(6.6*pi/B); wc=(wlp+wls)/2/pi,(wup+wus)/2/pi; hn=fir1(M-1,wc,hamming(M); end ys=fftfilt(hn,y); subplot(2,2,3); plot(ys); % 滤波后信号的时域波形 title(滤波后的信号); Y = fft(ys,N); Ayy = (abs(Y); Ayy=Ayy/(N/2); Ayy(1)=Ayy(1)/2; F=(1:N-1)*FS/N; subplot(2,2,4); plot(F(1:N/2),Ayy(1:N/2); % 滤波后信号的频谱 title(滤波后信号的频谱); pause(2); sound(ys,FS);5 程序调试5.1 调试过程与步骤1.单击“录音”按钮,弹出对话框,在里面可以输入录音的时长。单位为秒。2.单击“打开文件”,可以对语音文件进行选择,然后点“播放”,可以听到所录制的声音;3.进行音量调整、语速;4.进行加噪。选择简单单一噪声或随机噪声并在画出加噪后的时域、频域及语谱图;5.进行滤波处理。可任意选择脉冲响应不变法、双线性法或者窗函数与低通、高通、带通或者带阻进行任意搭配,滤波后的信号的时域、频域和语谱图会显示在弹出框中。5.2 发现的问题及相应的解决方法1.在音量调节的时候,每次都只能重新再播放一次。2.加噪处理时,两个信号的函数不能直接相加。这是由于MATLAB是对矩阵进行计算,两个矩阵进行相加时,它们的行向量和列向量个数要分别相同。这样才可以进行相加运算。如果不相同时,要通过声道转换,使之相同后再进行计算。3.滤波处理时,采用部分滤波器滤波后,不能显示频域波形图。可以通过对滤波器的参数指标进行修改。6 运行与测试6.1 原始波形图6.1 原始信号频域图、时域图、幅度图和语谱图6.2 单一加噪图6.2 单一加噪后的原始图、时域图6.3 IIR滤波器图6.3 IIR带通滤波6.4 FIR滤波器图6.2 FIR低通滤波器结 论本次课程设计,涉及MATLAB的图形界面(GUI)的设计以及数字信号处理滤波器的相关理论知识。在使用MATLAB的过程中,我通过通过查阅资料,网上搜索来了解按钮、单选按钮、下来列表、滚动条等在设计的界面上所使用的工具。了解它们的工作方式,及如何获取文本框中的内容,如何组成一个单选按钮组,下来列表里如何知道所选的是哪一个,单击按钮时响应的事件。首先,在音频文件录制的过程中,我发现之前有的设计大多是使用直接在程序内部定制好录制时间,这会让使用者不知道点完按钮之后程序到底执行没有,我使用了msgbox函数,通过互动界面,直接让用户输入制定的时间!在读取音频文件播放时,我利用“读取声音”来打开文件进行读取,这样可以有多个文件进行选择。之后,对声音进行加减,在这里我发现我无法对正在播放的声音进行增减声音而不从头开始。我上网搜索了许多也仍未能解决这个问题。再次,通过获取滚动调参数来改变采样频率使播放的文件,形成加速减速播放,这是通过对原始信号的幅值进行改动所产生的。数字信号处理,包括加入噪声,滤除噪声恢复原信号,并使滤除噪声后的信号与原始信号相对比,看通过那个的滤波效果好。当加入噪声时,由于我们录制的音频文件有可能是一声道,也有可能是立体声,这就导致我们在加入噪声时,噪声是一声道还是立体声的问题。矩阵的相加时,必须保证行向量与列向量的个数分别相同。如果不同可以通过声道的改变来获取。通过单步调制来清楚的知道你的信号的矩阵问题,如size(y)等。在进行滤波时,用到了IIR和FIR,在IIR滤波器,由于我们的声音信号的不同,在进行滤波时,由于选取的参数不同,导致滤波恢复后的信号的声音特别的小,滤波效果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论