《《数字信号处理》课程设计基于MATLAB的语音信号设计》由会员分享,可在线阅读,更多相关《《数字信号处理》课程设计基于MATLAB的语音信号设计(12页珍藏版)》请在金锄头文库上搜索。
1、李永棠 基于MATLAB的语言信号设计成 绩指导教师:日 期:数字信号处理课程设计 题 目:基于MATLAB的语音信号设计姓 名: 院 系: 电子信息工程系 专 业: 通信工程 班 级: 092 学 号: 指导教师: 2012年 6 月2李永棠 基于MATLAB的语音信号设计基于MATLAB的语音信号设计(电子信息工程学系 指导教师:)1. 课程设计目的1.了解语音信号的产生、采集,能绘制语音信号的频率响应曲线及频谱图;2.学会用MATLAB对语音信号进行分析和处理;3.掌握用滤波器去除语音信号噪声的方法,观察去噪前后的语音信号。2. 课程设计基本要求 1. 学会 MATLAB 的使用,掌握
2、MATLAB 的程序设计方法。 2. 掌握在 Windows 环境下语音信号采集的方法。 3. 掌握数字信号处理的基本概念、基本理论和基本方法。 4. 掌握 MATLAB 设计 FIR 和IIR数字滤波器的方法。 5. 学会用 MATLAB 对信号进行分析和处理。3. 课程设计原理数字滤波器根据其冲激响应函数的时域特性,可分为2种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。FIR和IIR的滤波原理都是进行卷积,就是对数入信号进行某种计算。a.利用模拟滤波器设计IIR数字滤波器方法(1)根据所给出的数字滤波器性能指标计算出相应的模拟滤波器的设计指标。 (2)根据得出的滤波
3、器性能指标设计出相应的模拟滤波器的系统函数H(S)。(3)根据得出的模拟滤波器的系统函数H(S),经某种变换得到对该模拟滤波器相应的。b.FIR滤波器的窗函数设计法FIR滤波器的设计方法有许多种,如窗函数设计法、频率采样设计法和最优化设计法等。窗函数设计法的基本原理是用一定宽度窗函数截取无限脉冲响应序列获得有限长的脉冲响应序列,主要设计步骤为:(1)通过傅里叶逆变换获得理想滤波器的单位脉冲响应hd(n)。(2)由性能指标确定窗函数W(n)和窗口长度N。(3)求得实际滤波器的单位脉冲响应h(n), h(n)即为所设计FIR滤波器系数向量b(n)。c.在matlab中本次设计涉及到的几个重要函数(
4、1)采样:y,fs,nbit=wavread,返回采样值放在向量y中,fs为采样频率(Hz),nbit为采样位数。 (2)快速傅里叶变换:Y=fft(y,N),其中x为有限长序列,N为序列y的长度,Y为序列y的DFT。 (3)数字滤波器的频率响应:h,w=freqz(b,a,n),返回数字滤波器的n点复频率响应,b和a是滤波器系数的分子和分母向量;h是复频率响应,w是频率点,n默认为512。(模拟滤波器的频率响应用函数freqs)。4.课程设计内容基本要求:(1)录制一段自己的语音信号,并对录制的信号进行采样;(2)画出采样后语音信号的时域波形和频谱图;(3)给定滤波器的性能指标,采用窗函数法
5、或双线性变换设计FIR滤波器或设计IIR滤波器,并画出滤波器的频率响应;(4)然后用自己设计的滤波器对采集的语音信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;(5)回放语音信号。扩展部分:(1)设计GUI界面进行对该语音处理系统的界面化管理。(2)实现matlab界面中的直接录音功能5.详细设计过程与调试分析5.1 语音信号的采集 录制原始语音:我们利用Windows的录音机,录制了一段自己的声音(“同志们,我们一起吃饭吧”,单声道),时间在3s左右。接着保存为WAV格式(存在matlab软件的work文件夹下,命名为“chifan”)。5.2 原始
6、语音信号的分析利用函数wavread对语音信号进行采样,并读取语音的相关信息,并通过函数sound听到采样后自己所录的一段声音,并画出它的时域和频域的图形。12程序如下:fileName=chifan.wav;y1, Fs, nbits=wavread(fileName);fprintf(语音 %s 的信息:n, fileName);fprintf(语言长度 = %g 秒n, length(y1)/Fs);fprintf(取样频率 = %g 取样点/秒n, Fs);fprintf(解析度 = %g 位元/取样点n, nbits);sound(y1,Fs);M=length(y1);time=0
7、:1/Fs:(M-1)/Fs; % 时间轴的向量yf1=fft(y1);figure;subplot(2,2,1);plot(time,y1);axis(0,4,-1.5,1.5);title(原信号的时域图);xlabel(时间);ylabel(幅度);subplot(2,2,2);plot(0:Fs/(M):Fs*(M-1)/M,abs(yf1);axis(0,25000,0,1200);title(原始语音信号频谱);xlabel(频率);ylabel(幅度)运行结果: 图1 原始信号分析5.3 对语音信号进行加噪处理利用函数awgn给语音信号加上高斯白噪声,调用sin函数来单音正弦信号
8、。通过函数sound来听到加完噪声后的声音,并画出它的时域和频域的图形。程序如下:fileName=chifan.wav;y1, Fs, nbits=wavread(fileName);fprintf(语音 %s 的信息:n, fileName);fprintf(语言长度 = %g 秒n, length(y1)/Fs);fprintf(取样频率 = %g 取样点/秒n, Fs);fprintf(解析度 = %g 位元/取样点n, nbits);M=length(y1);time=0:1/Fs:(M-1)/Fs;% 时间轴的向量g=awgn(y1,20); %给语音信号加上高斯白噪声sound(
9、g,Fs); %回放加噪信号G=fft(g); %对加噪后的语音信号进行DFT变换N=0.5*sin(2*pi*7000*time);%噪声为7kHz的正弦信号y2=y1+N;wavplay(y2,Fs,async);%播放加噪声后的语音信号yf2=fft(y2);figure;subplot(2,2,1);plot(time,g);axis(0,4,-1.5,1.5);title(加高斯噪声后语音信号时域图);xlabel(时间);ylabel(幅度);subplot(2,2,2);plot(0:Fs/(M):Fs*(M-1)/M,abs(G);axis(0,25000,0,1200);ti
10、tle(加高斯噪声后语音信号频谱图);xlabel(频率);ylabel(幅度);subplot(2,2,3);plot(time,y2);axis(0,4,-1.5,1.5);title(加正弦信号的时域图);xlabel(时间);ylabel(幅度);subplot(2,2,4);plot(0:Fs/(M):Fs*(M-1)/M,abs(yf2);axis(0,25000,0,1200);title(加正弦信号的频谱图);xlabel(频率);ylabel(幅度)运行结果: 图2 原始信号加噪信号的时域和频谱图 5.4 设计数字滤波器和画出其频谱响应5.4.1设计个巴特沃斯低通滤波器设定通
11、带截止频率(fp=1000)、阻带截止频率(fs=3000)、通带波纹系数(rp=0.5)、阻带波纹系数(rs=40)、抽样频率(fc=22050)。程序如下:%巴特沃斯低通滤波器fp=1000;fs=3000;rp=0.5;rs=40;fc=22050;wp=2*fp/fc;ws=2*fs/fc; %将模拟域转化成数字域。N,Wc=buttord(wp,ws,rp,rs); %估算巴特沃思滤波器的阶数N和3dB截止频率Wc。B,A=butter(N,Wc); %求传输函数的分子和分母多项式的系数。figure;freqz(B,A,256,fc); %求滤波器的频率响应。title(巴特沃斯低
12、通滤波器的幅频和相频特性图);运行结果: 图3 巴特沃斯滤波器的性能5.4.2用kaiser窗设计个FIR低通滤波器 通带截止频率(fp=1000)、阻带截止频率(fs=2000)、通带波纹系数(Ap=1)、阻带波纹系数(As=100)、抽样频率(fc=22050)。程序如下:%用kaiser窗设计的低通滤波器fp=1000;fc=1200;As=100;Ap=1;fs=22050;wc=2*fc/fs;wp=2*fp/fs; %wc为通带截止频率N=ceil(As-7.95)/(14.36*(wc-wp)/2)+1;%计算kaiser窗所需阶数Nalph=0.1102*(As-8.7); %
13、计算kaiser窗的控制参数alphWin=Kaiser(N+1,alph); hn=fir1(N,wc,Win); %调用kaiser计算低通滤波器的系数向量hnfigure;freqz(hn,1,512,fs); %计算数字滤波器的频率响应title(低通滤波器的幅频和相频特性图);运行结果: 图3 FIR低通滤波器性能5.5用滤波器对信号进行滤波滤波处理5.5.1用巴特沃斯滤波器对加噪语音进行滤波处理 对语音信号进行滤波处理,测试设计好的滤波器是否对我们的语音信号进行了处理。这里用的是IIR滤波器,所以利用函数filter对信号进行滤波。,即x= filter(b,a,y),x即是滤波后的语音信号,我们将滤波前后的时域波形进行对比,看是否有处理好,并且我们对其进行快速傅里叶变换,即X=fft(signal),目的是对比滤波前后的频域频谱,进一步具体分析我们设计的滤波器是否达到我们的设计要求。程序如下:%用巴特沃斯低通滤波器进行滤波fileName=chifan.wav;y1, Fs, nbits=wavread(fileName);fprintf(语音