语音信号实验一
- 格式:doc
- 大小:118.50 KB
- 文档页数:5
通信工程学院12级1班罗恒2012101032实验一语音信号的低通滤波和短时分析综合实验一、实验要求1、根据已有语音信号,设计一个低通滤波器,带宽为采样频率的四分之一,求输出信号;2、辨别原始语音信号与滤波器输出信号有何区别,说明原因;3、改变滤波器带宽,重复滤波实验,辨别语音信号的变化,说明原因;4、利用矩形窗和汉明窗对语音信号进行短时傅立叶分析,绘制语谱图并估计基音周期,分析两种窗函数对基音估计的影响;5、改变窗口长度,重复上一步,说明窗口长度对基音估计的影响。
二、实验目的1.在理论学习的基础上,进一步地理解和掌握语音信号低通滤波的意义,低通滤波分析的基本方法。
2.进一步理解和掌握语音信号不同的窗函数傅里叶变化对基音估计的影响。
三、实验设备1.PC机;2。
MATLAB软件环境;四、实验内容1。
上机前用Matlab语言完成程序编写工作.2。
程序应具有加窗(分帧)、绘制曲线等功能。
3.上机实验时先调试程序,通过后进行信号处理。
4.对录入的语音数据进行处理,并显示运行结果。
5。
改变滤波带宽,辨别与原始信号的区别。
6。
依据曲线对该语音段进行所需要的分析,并且作出结论。
7.改变窗的宽度(帧长),重复上面的分析内容。
五、实验原理及方法利用双线性变换设计IIR滤波器(巴特沃斯数字低通滤波器的设计),首先要设计出满足指标要求的模拟滤波器的传递函数Ha(s),然后由Ha(s)通过双线性变换可得所要设计的IIR滤波器的系统函数H(z)。
如果给定的指标为数字滤波器的指标,则首先要转换成模拟滤波器的技术指标,这里主要是边界频率Wp和Ws的转换,对ap和as指标不作变化。
边界频率的转换关系为∩=2/T tan(w/2).接着,按照模拟低通滤波器的技术指标根据相应设计公式求出滤波器的阶数N和3dB截止频率∩c ;根据阶数N查巴特沃斯归一化低通滤波器参数表,得到归一化传输函数Ha(p);最后,将p=s/ ∩c 代入Ha(p)去归一,得到实际的模拟滤波器传输函数Ha(s)。
语⾳信号处理实验讲义语⾳信号处理实验讲义编写⼈:蔡萍时间:2011-12实验⼀语⾳信号⽣成模型分析⼀、实验⽬的1、了解语⾳信号的⽣成机理,了解由声门产⽣的激励函数、由声道产⽣的调制函数和由嘴唇产⽣的辐射函数。
2、编程实现声门激励波函数波形及频谱,与理论值进⾏⽐较。
3、编程实现已知语⾳信号的语谱图,区分浊⾳信号和清⾳信号在语谱图上的差别。
⼆、实验原理语⾳⽣成系统包含三部分:由声门产⽣的激励函数()G z 、由声道产⽣的调制函数()V z 和由嘴唇产⽣的辐射函数()R z 。
语⾳⽣成系统的传递函数由这三个函数级联⽽成,即()()()()H z G z V z R z =1、激励模型发浊⾳时,由于声门不断开启和关闭,产⽣间隙的脉冲。
经仪器测试它类似于斜三⾓波的脉冲。
也就是说,这时的激励波是⼀个以基⾳周期为周期的斜三⾓脉冲串。
单个斜三⾓波的频谱表现出⼀个低通滤波器的特性。
可以把它表⽰成z 变换的全极点形式121()(1)cTG z ez --=-?这⾥c 是⼀个常数,T 是脉冲持续时间。
周期的三⾓波脉冲还得跟单位脉冲串的z 变换相乘:1121()()()1(1)v cT A U z E z G z z e z ---=?=--这就是整个激励模型,v A 是⼀个幅值因⼦。
2、声道模型当声波通过声道时,受到声腔共振的影响,在某些频率附近形成谐振。
反映在信号频谱图上,在谐振频率处其谱线包络产⽣峰值,把它称为共振峰。
⼀个⼆阶谐振器的传输函数可以写成12()1ii i i A V z B z C z--=-- 实践表明,⽤前3个共振峰代表⼀个元⾳⾜够了。
对于较复杂的辅⾳或⿐⾳共振峰要到5个以上。
多个()i V z 叠加可以得到声道的共振峰模型12111()()11Rrr MMir i N ki i i ik k b zA V z V zB zC z a z -=---======---∑∑∑∑3、辐射模型从声道模型输出的是速度波,⽽语⾳信号是声压波。
实验一显示语音信号的语谱图一、实验目的综合信号频谱分析和滤波器功能,对语音信号的频谱进行分析,并对信号含进行高通、低通滤波,实现信号特定处理功能。
加深信号处理理论在语音信号中的应用;理解语谱图与时频分辨率的关系。
二、实验原理语谱图分析语音又称语谱分析,语谱图中显示了大量的与语音的语句特性有关的信息,它综合了频谱图和时域波形的优点,明显的显示出语音频谱随时间的变化情况。
语谱图实际上是一种动态的频谱。
窄带语谱图有良好的频率分辨率及较差的时间分辨率;而宽带语谱图具有良好的时间分辨率及较差的频率分辨率。
三、实验内容实验数据为工作空间ex3M2.mat中数组we_be10k是单词“we”和“be”的语音波形(采样率为10000点/秒)。
1、听一下we_be10k(可用sound)2、使用函数specgram_ex3p19.显示语谱图和语音波形。
对比调用参数窗长20ms(200点)、帧间隔1ms(10点)和参数窗长5ms(50点)、帧间隔1ms(10点);再对比窗长>20ms或小于5ms,以及帧间隔>1ms时的语谱图说明宽带语谱图、窄带语谱图与时频分辨率的关系及如何得到时频折中。
3、生成高通和低通滤波器,观察其频谱;对语音信号we_be进行滤波,听一下对比其效果。
四、实验结果实验程序语谱图和语音波形低通滤波器频谱高通滤波器频谱结论:1、因频率分辨率随窗口宽度的增加而提高,但同时时间分辨率降低;如果窗口取短,频率分辨率下降,但时间分辨率提高。
由以上图可知:窄带语谱图有良好的频率分辨率及较差的时间分辨率,而宽带语谱图具有良好的时间分辨率及较差的频率分辨率。
窄带语谱图中的时间坐标方向表示的基因及其各次谐波;而宽带语谱图给出语音的共振峰平率及清辅音的能量汇集区。
2、因加窗的目的是要限制分析的时间以使其中的波形特性没有显著变化,因此想要得到时频折中,选用的窗函数应尽量满足a、频率分辨率高b、卷积后其他的频率成分产生的频谱泄露少。
语音信号处理试验实验一:语音信号时域分析实验目的:(1)录制两段语音信号,内容是“语音信号处理”,分男女声。
(2)对语音信号进行采样,观察采样后语音信号的时域波形。
实验步骤:1、使用window自带录音工具录制声音片段使用windows自带录音机录制语音文件,进行数字信号的采集。
启动录音机。
录制一段录音,录音停止后,文件存储器的后缀默认为.Wav。
将录制好文件保存,记录保存路径。
男生女生各录一段保存为test1.wav和test2.wav。
图1基于PC机语音信号采集过程。
2、读取语音信号在MATLAB软件平台下,利用wavread函数对语音信号进行采样,记住采样频率和采样点数。
通过使用wavread函数,理解采样、采样频率、采样位数等概念!Wavread函数调用格式:y=wavread(file),读取file所规定的wav文件,返回采样值放在向量y中。
[y,fs,nbits]=wavread(file),采样值放在向量y中,fs表示采样频率(hz),nbits表示采样位数。
y=wavread(file,N),读取前N点的采样值放在向量y中。
y=wavread(file,[N1,N2]),读取从N1到N2点的采样值放在向量y中。
3、编程获取语音信号的抽样频率和采样位数。
语音信号为test1.wav和test2.wav,内容为“语音信号处理”,两端语音保存到工作空间work文件夹下。
在M文件中分别输入以下程序,可以分两次输入便于观察。
[y1,fs1,nbits1]=wavread('test1.wav')[y2,fs2,nbits2]=wavread('test2.wav')结果如下图所示根据结果可知:两端语音信号的采样频率为44100HZ,采样位数为16。
4、语音信号的时域分析语音信号的时域分析就是分析和提取语音信号的时域参数。
进行语音分析时,最先接触到并且夜市最直观的是它的时域波形。
语音信号处理实验指导书实验一 语音信号采集与简单处理一、 实验目的、要求 (1)掌握语音信号采集的方法(2)掌握一种语音信号基音周期提取方法 (3)掌握短时过零率计算方法 (4)了解Matlab 的编程方法 二、 实验原理 基本概念: (a )短时过零率:短时内,信号跨越横轴的情况,对于连续信号,观察语音时域波形通过横轴的情况;对于离散信号,相邻的采样值具有不同的代数符号,也就是样点改变符号的次数。
对于语音信号,是宽带非平稳信号,应考察其短时平均过零率。
其中sgn[.]为符号函数⎪⎩⎪⎨⎧<=>=0 x(n)-1sgn(x(n))0 x(n)1sgn(x(n))短时平均过零的作用 1.区分清/浊音:浊音平均过零率低,集中在低频端; 清音平均过零率高,集中在高频端。
2.从背景噪声中找出是否有语音,以及语音的起点。
(b )基音周期基音是发浊音时声带震动所引起的周期性,而基音周期是指声带震动频率的倒数。
基音周期是语音信号的重要的参数之一,它描述语音激励源的一个重要特征,基音周期信息在多个领域有着广泛的应用,如语音识别、说话人识别、语音分析与综合以及低码率语音编码,发音系统疾病诊断、听觉残障者的语音指导等。
因为汉语是一种有调语言,基音的变化模式称为声调,它携带着非常重要的具有辨意作用的信息,有区别意义的功能,所以,基音的提取和估计对汉语更是一个十分重要的问题。
∑--=-=1)]1(sgn[)](sgn[21N m n n n m x m x Z由于人的声道的易变性及其声道持征的因人而异,而基音周期的范围又很宽,而同—个人在不同情态下发音的基音周期也不同,加之基音周期还受到单词发音音调的影响,因而基音周期的精确检测实际上是一件比较困难的事情。
基音提取的主要困难反映在:①声门激励信号并不是一个完全周期的序列,在语音的头、尾部并不具有声带振动那样的周期性,有些清音和浊音的过渡帧是很难准确地判断是周期性还是非周期性的。
实验一语音信号的频域特性1. 观察语音信号的时域波形特点,总结其规律。
答:1)清音段:能量低,过零率高,波形特点有点像随机的噪声。
这部分信号常与语音的辅音段对应。
2)浊音段:能量高,过零率地,波形具有周期特点。
所谓的短时平稳性质就是处于这个语音浊音段中。
3)过渡段:一般是指从辅音段向元音段信号变化之间的部分。
信号变化快,是语音信号处理中最复杂、困难的部分。
2.总结清音b/p/m/f/d/t/n/l/g/k/h/j/q/x//z/c/s/zh/ch/sh/r/共21个的短时幅值、短时过零率和自相关函数的规律,估算这21个清音的平均短时幅值和平均短时过零率;答:加矩形窗的21个清音的平均短时幅值和平均短时过零率为下表:清音音节平均短时幅值平均短时过零率b 2.126 1.000p 0.706 9.100m 2.427 5.000f 0.685 1.500d 0.817 9.667t 1.168 1.000n 1.150 4.176l 2.084 6.200g 0.150 24.333k 0.959 7.333h 0.629 21.857j 0.129 13.000q 0.184 36.909x 0.168 21.400z 0.173 6.200c 0.785 7.294s 0.158 17.000zh 0.203 31.500ch 0.237 27.535sh 0.182 28.692r 1.814 5.5333. 总结浊音a/o/e/i/u/v/ao/ai/ei/ou/an/en/in/ang/eng/ong/ing/共17个的短时幅值、短时过零率和自相关函数的规律,估算这17个浊音的平均短时幅值和平均短时过零率,从自相关函数上估算这17个浊音的基音周期;答:浊音能量高,短时幅值也比较高,短时过零率比较低,由于浊音有一定的准周期性,所以自相关函数有比较明显的峰值和周期性。
浊音音节平均短时幅值平均短时过零率基音周期a 3.662 0.643 57o 2.948 0.184 71e 2.531 0.148 59i 1.693 0.061 60u 1.300 0.032 61v 1.081 0.024 66ao 2.000 0.123 71ai 2.307 0.121 57ei 1.828 0.074 67ou 0.294 0.000 67an 1.500 0.061 58en 1.827 0.073 54in 2.257 0.118 56ang 0.591 0.009 65eng 1.473 0.053 56ong 1.712 0.059 64ing 0.494 0.014 714. /r/、/m/、/n/ 从这几个音素的自相关函数图形判断为“清音”还是“浊音”,若为浊音估算其基音周期;答:(1)/r/: 自相关函数具有周期性,基音周期为67(样本点数)(2)/m/: 自相关函数具有周期性,基音周期为67(样本点数)(3)/n/ : 自相关函数具有周期性,基音周期为59(样本点数)可以看出/r/、/m/、/n/这几个因素的自相关函数图形有准周期性,并且有比较明显的峰值,所以为浊音。
实验目的:理解和掌握基于能量和过零率的语音端点检测的方法和原理实验原理:语音端点检测就是指从包含语音的一段信号中确定出语音地起始点和结束点。
基于能量和过零率的语音端点检测方法采用两级判决法。
第一级:先根据语音短时能量选取较高门限T1,进行一次粗判,得AB点;然后由背景噪声的平均能量确定一个较低门限T2,并从A点往左、B点往右分别找到短时能量包络与门限T2相交点C与D。
第二级:以短时平均过零率为标准,从C往左、D往右找到短时平均过零率低于门限T3(由背景噪声的平均过零率所确定)的两点E、F,即为语音段的起止点。
实验内容:主程序:clear all;S=wavread('song.wav');%¶ÁÈëÉùÒôÎļþfigure(1);subplot(4,1,1);plot(S);title('Ô-ʼÓïºÅÐźÅ');N=wavread('noise.wav');%¶ÁÈë±³¾°ÔëÉùplot(N);s=fra(100,45,S);%fen zhenLs=length(s);s2=s.^2;soundenergy=sum(s2,2)%ÇóÒ»Ö¡µÄÄÜÁ¿;subplot(4,1,2);plot(soundenergy);title('Ô-ʼÓïÒô¶ÌʱÄÜÁ¿');averagesoundenergy=sum(soundenergy)/Ls;soundzcr=zcro(s);%Çó¹ýÁãÂÊsubplot(4,1,3);plot(soundzcr);title('Ô-ʼÓïÒô¹ýÁãÂÊ');averagesoundzcr=sum(soundzcr)/Ls;n=fra(100,45,N);Ln=length(n);n2=n.^2;noiseenergy=sum(n2,2);averagenoiseenergy=sum(soundenergy)/Ln;noisezcr=zcro(n);averagenoisezcr=sum(noisezcr)/Ln;A=1;B=1;for i=1:Lsif (soundenergy(i)>10*averagenoiseenergy) T1=i;break;endendfor i=Ls:-1:1if (soundenergy(i)>A*averagenoiseenergy) T2=i;break;endendfor i=1:T1if(soundzcr(i)>B*averagenoisezcr)E=i;break;endendfor i=Ls:-1:1if(soundzcr(i)>B*averagenoisezcr)F=i;break;endendE=45*E;F=45*F;duandianjianche=S(E:F,:);subplot(4,1,4);plot(duandianjianche);求过零率函数:function f=zcro(x)f=zeros(size(x,1),1);for i=1:size(x,1)z=x(i,:);for j=1:(length(z)-1);if z(j)*z(j+1)<0f(i)=f(i)+1;endendend分帧函数:function f=fra(len,inc,x)fh=fix(((size(x,1)-len)/inc)+1); f=zeros(fh,len);i=1;n=1;while i<=fhj=1;while j<=lenf(i,j)=x(n);j=j+1;n=n+1;endn=n-len+inc;i=i+1;end实验结果:结果为:实验总结:。
语⾳信号处理实验⼀实验⼀语⾳信号的采集及预处理⼀、实验⽬的在理论学习的基础上,进⼀步地理解和掌握语⾳信号预处理及短时加窗的意义及基于matlab的实现⽅法。
⼆、撰写实验报告要求要求随本次上机撰写完成实验报告,报告中要有实验⽬的、实验步骤、实验程序、实验中得出的图形结果及结论等。
另外,总结本次上机实验的收获。
三、实验内容及步骤1.语⾳信号的录⾳、读⼊、放⾳等:练习matlab中⼏个⾳频处理函数,利⽤函数wavread对语⾳信号进⾏采样,记住采样频率和采样点数,给出以下语⾳的波形图(2.wav),wavread的⽤法参见mablab帮助⽂件。
利⽤wavplay或soundview放⾳。
也可以利⽤wavrecord⾃⼰录制⼀段语⾳,并进⾏以上操作(需要话筒)。
[Y,FS,NBITS,OPTS]=wavread('9.wav')FS =10000NBITS =16OPTS =fmt: [1x1 struct]2.语⾳信号的分帧:选择20ms左右为⼀帧,帧移取1/2帧长,对语⾳信号进⾏分帧,可以利⽤voicebox⼯具箱中的函数enframe。
voicebox⼯具箱是基于GNU协议的⾃由软件,其中包含了很多语⾳信号相关的函数。
voicebox⼯具箱安装⽅法:把⼯具箱拷贝⼊.\MatLab\toolbox⽬录下;菜单file-set path-"Add folder" 导⼊voicebox;菜单file-Preference-General-"Updata Toolbox Path Cache分帧函数的调⽤:y=enframe(x,len,inc)x为输⼊语⾳信号,len指定了帧长,inc指定帧移,函数返回为n×len的⼀个矩阵,每⼀⾏都是⼀帧数据。
帧长=10000X0.02=200sx=wavread('9.wav')y=enframe(x,200,100)subplot(2,1,1),plot(x)subplot(2,1,2),plot(y)3 窗函数及其时频特性:本步要求利⽤window函数设计窗⼝长度为200(N=200)的矩形窗(rectwin)、汉明窗(hamming)及汉宁窗(hann)),利⽤wvtool函数观察其时域波形图及频谱特性,⽐较得出结论。
实验一、语音信号的时域特性和频域特性学院:信息与通信工程学院专业:通信工程班级:104学号:2010026410姓名:黄余芳指导教师:崔艳秋1.实验名称语音信号的时域特性和频域特性2.实验类型验证性实验3.实验目的观察并验证语音信号的时域特性和频域特性,理解并掌握典型的语音信号时域分析方法和频域分析方法,为深入学习数字语音信号处理的相关理论奠定基础。
4.实验设备安装有MATLAB的计算机5.实验内容1.输入并运行MATLAB代码。
2.观察语音信号的时域特性(1)发一个清音和一个浊音,由麦克风采集语音数据,参考实验内容1中的程序将这些数据分别存成两个“.wav”文件(例如[a]的语音存为“a.wav”,要求采样率为8000),存在本人的文件夹中。
(2)读取WA V文件,显示语音波形,观察清音和浊音波形的差异。
(3)读取WA V文件,计算并显示语音的短时能量(要求分帧加窗的帧长为256,帧移为128),观察并分析清音和浊音短时能量的差异。
(4)读取WA V文件,计算并显示语音的短时过零率(要求分帧加窗是的帧长为256,帧移为128),观察并分析清音和浊音短时过零率的差异。
3. 观察语音信号的频域特性(1)读取WA V文件,计算并显示一帧语音的原始信号、加窗信号、短时频谱(要求分帧加窗的窗函数为汉明窗、帧长为256,帧移为128),观察并分析清音和浊音短时频谱的差异。
(2)读取WA V文件,计算并显示不同窗函数情况下一帧语音的加窗信号、短时频谱(要求分帧加窗的窗函数分别为矩形窗和汉明窗、帧长为256,帧移为128),观察并分析不同的窗函数对短时谱分析的影响。
6.相关函数wavread、plot、fft7.MATLAB程序代码1. 输入并运行以下MATLAB代码。
(1) 短时能量clear;close all;Fs=11025;y=wavrecord(5*Fs,Fs,'double'); wavwrite(y,'f:\\a');soundview(y,Fs);x = wavread('f:\\a.wav');x = double(x);x = filter([1 -0.9375], 1, x); % 预加重FrameLen = 256;FrameInc = 128;s = enframe(x, FrameLen, FrameInc); energy = sum(abs(s), 2);figure;subplot(2,1,1);plot(x);title('语音信号时域波形');xlabel('样点数');ylabel('幅度');subplot(2,1,2);plot(energy);title('语音信号的短时能量');xlabel('帧数');ylabel('短时能量');legend('帧长FrameLen = 240');(2) 短时过零率clear;close all;x = wavread('f:\\a.wav');x = double(x);FrameLen = 256;FrameInc =128;tmp1 = enframe(x(1:end-1), FrameLen, FrameInc);tmp2 = enframe(x(2:end) , FrameLen, FrameInc);signs = (tmp1.*tmp2)<0;diffs = (tmp1 -tmp2)>0.02;zcr = sum(signs.*diffs, 2);figure;subplot(2,1,1);plot(x);title('语音信号时域波形');xlabel('样点数');ylabel('幅度');subplot(2,1,2);plot(zcr);xlabel('帧数');ylabel('短时过零率');title('语音信号的短时过零率');(3) 短时傅里叶变换clear;close all;x = wavread('f:\\a.wav');x = double(x);FrameLen =256;FrameInc =128;s = enframe(x, FrameLen, FrameInc);ss=s(50,:); %选取一帧语音信号(可以通过观察短时能量的分布来判断哪一帧是清音段还是浊音段)f=ss'.*hamming(length(ss));r=fft(f,512);r1=abs(r);r1=r1/max(r1);yuanlai=20*log10(r1);signal(1:256)=yuanlai(1:256);pinlv=(0:1:255)*11025/512;figure;subplot(3,1,1);plot(ss);axis([0,256,-1,1])title('截取的语音段');xlabel('样点数');ylabel('幅度');subplot(3,1,2);plot(f);axis([0,256,-1,1])title('窗选语音信号');xlabel('样点数');ylabel('幅度');subplot(3,1,3);plot(pinlv,signal);xlabel('频率/Hz');ylabel('对数幅度/dB');title ('加Hamming窗时语音频谱');(4) 显示清音短时过零率clear;close all;x = wavread('f:\\k.wav');x = double(x);FrameLen = 256;FrameInc =128;tmp1 = enframe(x(1:end-1), FrameLen, FrameInc); tmp2 = enframe(x(2:end) , FrameLen, FrameInc); signs = (tmp1.*tmp2)<0;diffs = (tmp1 -tmp2)>0.02;zcr = sum(signs.*diffs, 2);figure;subplot(2,1,1);plot(x);title('语音信号时域波形');xlabel('样点数');ylabel('幅度');subplot(2,1,2);plot(zcr);xlabel('帧数');ylabel('短时过零率');title('语音信号的短时过零率');2:语音信号的频域分析1.加汉明窗的浊音clear;close all;x = wavread('f:\\a.wav');x = double(x);FrameLen =256;FrameInc =128;s = enframe(x, FrameLen, FrameInc);ss=s(125,:); %选取一帧语音信号(可以通过观察短时能量的分布来判断哪一帧是清音段还是浊音段)f=ss'.*hamming(length(ss));r=fft(f,512);r1=abs(r);r1=r1/max(r1);yuanlai=20*log10(r1);signal(1:256)=yuanlai(1:256);pinlv=(0:1:255)*11025/512;figure;subplot(3,1,1);plot(ss);axis([0,256,-1,1])title('截取的语音段');xlabel('样点数');ylabel('幅度');subplot(3,1,2);plot(f);axis([0,256,-1,1])title('窗选语音信号');xlabel('样点数');ylabel('幅度');subplot(3,1,3);plot(pinlv,signal);xlabel('频率/Hz');ylabel('对数幅度/dB');title ('加Hamming窗时语音频谱2.加汉明窗的清音clear;close all;x = wavread('f:\\k.wav');x = double(x);FrameLen =256;FrameInc =128;s = enframe(x, FrameLen, FrameInc);ss=s(90,:); %选取一帧语音信号(可以通过观察短时能量的分布来判断哪一帧是清音段还是浊音段)f=ss'.*hamming(length(ss));r=fft(f,512);r1=abs(r);r1=r1/max(r1);yuanlai=20*log10(r1);signal(1:256)=yuanlai(1:256);pinlv=(0:1:255)*11025/512;figure;subplot(3,1,1);plot(ss);axis([0,256,-1,1])title('截取的语音段');xlabel('样点数');ylabel('幅度');subplot(3,1,2);plot(f);axis([0,256,-1,1])title('窗选语音信号');xlabel('样点数');ylabel('幅度');subplot(3,1,3);plot(pinlv,signal);xlabel('频率/Hz');ylabel('对数幅度/dB');title ('加Hamming窗时语音频谱3.加矩形窗的浊音clear;close all;x = wavread('f:\\a.wav');x = double(x);FrameLen =256;FrameInc =128;s = enframe(x, FrameLen, FrameInc);ss=s(125,:); %选取一帧语音信号(可以通过观察短时能量的分布来判断哪一帧是清音段还是浊音段)f=ss'.*rectwin(length(ss));r=fft(f,512);r1=abs(r);r1=r1/max(r1);yuanlai=20*log10(r1);signal(1:256)=yuanlai(1:256);pinlv=(0:1:255)*11025/512;figure;subplot(3,1,1);plot(ss);axis([0,256,-1,1])title('截取的语音段');xlabel('样点数');ylabel('幅度');subplot(3,1,2);plot(f);axis([0,256,-1,1])title('窗选语音信号');xlabel('样点数');ylabel('幅度');subplot(3,1,3);plot(pinlv,signal);xlabel('频率/Hz');ylabel('对数幅度/dB');title ('加矩形窗时语音频谱)8.实验结果及其分析浊音(1) 短时能量0.51 1.52 2.53 3.54x 104-1012语音信号时域波形样点数幅度050100语音信号的短时能量帧数短时能量(2) 短时过零率0.511.52 2.533.54x 104-1-0.500.51语音信号时域波形样点数幅度102030帧数短时过零率语音信号的短时过零率(3) 短时傅里叶变换01截取的语音段样点数幅度5010015020025001窗选语音信号样点数幅度-1000频率/Hz对数幅度/d B加Hamming 窗时语音频谱清音(1) 短时能量x 104012语音信号时域波形样点数幅度0204060语音信号的短时能量帧数短时能量(2) 短时过零率x 104-1-0.500.51语音信号时域波形样点数幅度5010015020025030035005101520帧数短时过零率语音信号的短时过零率(3) 短时傅里叶变换01截取的语音段样点数幅度01窗选语音信号样点数幅度5001000150020002500300035004000-1000频率/Hz对数幅度/d B加Hamming 窗时语音频谱(4) 显示清音短时过零率x 10401语音信号时域波形样点数幅度05101520帧数短时过零率语音信号的短时过零率加窗(1)加汉明窗的浊音50100150200250-101截取的语音段样点数幅度50100150200250-101窗选语音信号样点数幅度100020003000400050006000-100-500频率/Hz对数幅度/d B加Hamming 窗时语音频谱(2)加汉明窗的清音-101截取的语音段样点数幅度50100150200250-101窗选语音信号样点数幅度-100-500频率/Hz对数幅度/d B加Hamming 窗时语音频谱(3)加矩形窗的浊音50100150200250-101截取的语音段样点数幅度-101窗选语音信号样点数幅度-100-500频率/Hz对数幅度/d B加矩形窗时语音频谱分析:(1)对于浊音与清音,浊音的幅值比较明显,有一个的波动,能清楚的看清楚它的周期;而清音类似于白噪声,没有明显的幅值,很平缓。
语⾳信号处理实验报告语⾳信号处理实验报告【实验⼀】⼀、实验题⽬Short time analysis⼆、实验要求Write a MA TLAB program to analyze a speech and simultaneously, on a single page, plot the following measurements:1. the entire speech waveform2. the short-time energy, En3. the short-time magnitude, Mn4. the short-time zero-crossing, Zn5. the narrowband spectrogram6. the wideband spectrogramUse both the speech waveforms in the wznjdx_normal.wav. Choose appropriate window sizes, window shifts, and window for the analysis. Explain your choice of these parameters.三、实验程序clear[x,fs]=wavread('wznjdx_normal.wav');n=length(x);N=320;subplot(4,1,1);plot(x);h=linspace(1,1,N);En=conv(h,x.*x);subplot(4,1,2);plot(En);Mn=conv(h,abs(x));subplot(4,1,3);plot(Mn);for i=1:n-1if x(i)>=0 y(i)=1;else y(i)=-1;endif x(i+1)>=0 y(i+1)=1;else y(i+1)=-1;endw(i)=abs(y(i+1)-y(i));endk=1;j=0;while (k+N-1)Zm(k)=0;for i=0:N-1Zm(k)=Zm(k)+w(k+i);endj=j+1;k=k+N/2;endfor w=1:jQ(w)=Zm(160*(w-1)+1)/(2*N);endsubplot(4,1,4);plot(Q);grid;figure(2);subplot(2,1,1);spectrogram(x,h,256,200,0.0424*fs); subplot(2,1,2);spectrogram(x,h,256,200,0.0064*fs);四、实验结果语谱图:(Matlab 7.0 ⽤不了spectrogram)【实验⼆】⼀、实验题⽬Homomorphic analysis⼆、实验要求Write a MATLAB program to compute the real cepstrums of a section of voiced speech and unvoiced speech. Plot the signal, the log magnitude spectrum, the real cepstrum, and the lowpass liftered log magnitude spectrum.三、实验程序nfft=256;[x,fs] = wavread('wznjdx_normal.wav');fx=x;Xvm=log(abs(fft(fx,nfft)));xhv=real(ifft(Xvm,nfft));lifter=zeros(1,nfft);lifter(1:30)=1;lifter(nfft-28:nfft)=1;fnlen=0.02*fs; % 20mswin=hamming(fnlen);%加窗n=fnlen;%窗宽度赋给循环⾃变量nnoverlap=0.5*fnlen;while(n<=length(x)-1)fx=x(n-fnlen+1:n).*win;n=n+noverlap;endxhvp=xhv.*lifter';figure;subplot(4,1,1)plot(lifter);title('倒谱滤波器');subplot(4,1,2)plot(x);title('语⾳信号波形');subplot(4,1,3)plot(Xvm);title('Xvm');subplot(4,1,4)plot(xhv);title('xhv');四、实验结果【实验三】⼀、实验题⽬LP analysis⼆、实验要求Write a MATLAB program to convert from a frame of speech to a set of linear prediction coefficients. Plot the LPC spectrum superimposed on the corresponding STFT.三、实验程序clear;[x,fs]=wavread('wznjdx_normal.wav');fx=x(4000:4160-1);p=10;[a,e,k]=aryule(fx,p);G=sqrt(e*length(fx));f=log(abs(fft(fx)));h0=zeros(1,160);h=log(G)-log(abs(fft(a,160)));figure(1);subplot(211);plot(fx);subplot(212);plot(f);hold on;plot((0:160-1),h,'r');四、实验结果【实验四】⼀、实验题⽬Pitch estimation⼆、实验内容Write a program to implement the pitch estimation and the voiced/unvoiced decision using the LPC-based method.三、实验程序clear[x,fs]=wavread('wznjdx_normal.wav');n=length(x);Q = x';NFFT=512;N = 256;Hamm = hamming(N);frame = 30;M = Q(((frame -1) * (N / 2) + 1):((frame - 1) * (N / 2) + N)); Frame = M .* Hamm';% lowpass filter[b2,a2]=butter(2,900/4000);speech2=filter(b2,a2,Frame); % filter% residual[a,e] = lpc(speech2,20);errorlp=filter(a,1,speech2); % residual% Short-term autocorrelation.re = xcorr(errorlp);% Find max autocorrelation for lags in the interval minlag to maxlag. minlag = 17; % F0: 450Hzmaxlag =160; % F0: 50Hz[remax,idx] = max(re(fnlen+minlag:fnlen+maxlag));figuresubplot(3,1,1);plot(Frame);subplot(3,1,2);plot(speech2);subplot(3,1,3);plot(re);text(500,0,'idx');idx=idx-1+minlagremax四、实验结果【实验五】⼀、实验题⽬Speech synthesis⼆、实验内容Write a program to analyze a speech and synthesize it using the LPC-based method.三、实验程序主程序clear;[x,sr] = wavread('wznjdx_normal.wav');p=[1 -0.9];x=filter(p,1,x);N=256;inc=128;y=lpcsyn(x,N,inc);wavplay(y,sr);⼦程序lpcsynfunction y=lpcsyn(x,N,inc)%[x,sr] = wavread('wznjdx_normal.wav');%pre = [1 -0.97];%x = filter(pre,1,x);%N=256;%inc=128;fn=floor(length(x)/inc);y=zeros(1,50000);for (i=1:fn)x(1:N,i)=x((i-1)*inc+1:(i+1)*inc);[A(i,:),G(i),P(i),fnlen,fnshift] = lpcana(x(1:N,i),order); if (P(i)) % V oiced frame.e = zeros(N,1);e(1:P(i):N) = 1; % Impulse-train excitation.else % Unvoiced frame.e = randn(N,1); % White noise excitation.endyt=filter(G(i),A(i,:),e);j=(i-1)*inc+[1:N];y(j) = y(j)+yt';end;end⼦程序lpcanafunction [A,G,P,fnlen,fnshift] = lpcana(x,order) fnlen=256;fnshift=fnlen/2;n=length(x);[b2,a2]=butter(2,900/4000);speech2=filter(b2,a2,x);[A,e]=lpc(speech2,order);errorlp=filter(A,1,speech2);re=xcorr(errorlp);G=sqrt(e*length(speech2));minlag=17;maxlag=160;[remax,idx]=max(re(n+minlag:n+maxlag));P=idx-1+minlag;end四、实验结果【实验六】⼀、实验题⽬Speech enhancement⼆、实验内容Write a program to implement the basic spectral magnitude subtraction.三、实验程序clear[speech,fs,nbits]=wavread('wznjdx_normal.wav');%读⼊数据alpha=0.04;%噪声⽔平winsize=256;%窗长size=length(speech);%语⾳长度numofwin=floor(size/winsize);%帧数hamwin=zeros(1,size);%定义汉明窗长度enhanced=zeros(1,size);%定义增强语⾳的长度ham=hamming(winsize)';%%产⽣汉明窗x=speech'+alpha*randn(1,size);%信号加噪声noisy=alpha*randn(1,winsize);%噪声估计N=fft(noisy);nmag=abs(N);%噪声功率谱%分帧for q=1:2*numofwin-1frame=x(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2);%对带噪语⾳帧间重叠⼀半取值hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=...hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+ham;%加窗y=fft(frame.*ham);mag=abs(y);%带噪语⾳功率谱phase=angle(y);%带噪语⾳相位%幅度谱减for i=1:winsizeif mag(i)-nmag(i)>0clean(i)=mag(i)-nmag(i);else clean(i)=0;endend%频域中重新合成语⾳spectral=clean.*exp(j*phase);%反傅⾥叶变换并重叠相加enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=...enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+real(ifft(spectral));endfigure(1);subplot(3,1,1);plot(speech);xlabel('样点数');ylabel('幅度');title('原始语⾳波形'); subplot(3,1,2);plot(x);xlabel('样点数');ylabel('幅度');title('语⾳加噪波形'); subplot(3,1,3);plot(enhanced);xlabel('样点数');ylabel('幅度');title('增强语⾳波形');四、实验结果。
08电子C 班 苏清法 0815241036
实验一 数字信号处理综合实验
一、实验目的
目的:综合运用数字信号处理的理论知识进行信号的采样,重构,频谱分析和滤波器的设计,通过理论推导得出相应结论,再利用Matlab 作为编程工具进行计算机实现,从而加深对所学知识的理解,建立概念。
二、基本要求
1.掌握数字信号处理的基本概念、基本理论和基本方法; 2.学会MATLAB 的使用,掌握MA TLAB 的程序设计方法; 3.掌握用MA TLAB 设计简单实验验证采样定理的方法; 4.掌握在Windows 环境下语音信号采集的方法; 5.学会用MA TLAB 对信号进行频谱分析;
6.掌握MATLAB 设计FIR 和IIR 数字滤波器的方法;
三、实验内容
(1) Matlab 产生离散信号的方法,作图的方法,以及基本运算操作 (2) 对连续正弦信号以不同的采样频率作采样 (3) 对采样前后信号进行傅立叶变换,并画频谱图 (4) 分析采样前后频谱的有变化,验证采样定理。
掌握画频谱图的方法,深刻理解采样频率,信号频率,采样点数,频率分辨率等概念
四、主要实验仪器及材料
微型计算机、Matlab 。
五、实验步骤
1.设计一简单正弦信号,通过改变采样率观察采样前后的信号变化。
例如:假设有一振幅为1,频率为10Hz ,相位为0.3的模拟信号,即sin(2100.3)t π⨯⨯+,用0.01s 的采样间隔(采样频率为100Hz )来表示原始信号(注意:实际上模拟信号不能用离散值表示,此处为了在计算机上表示,用采样率非常高的离散信号表示模拟信号)。
分别以5Hz ,10Hz (每秒采样10次,即采样间隔为0.1s ),20Hz ,40Hz ,80Hz ,200Hz 对原始信号进行采样,画出采样前后的信号,并画出其频谱图,对比前后的变化,验证采样定理。
(1)可以用t=0:1/fs:9/f; 取9个周期,通过改变采样率,自动改变采样点数。
(2)也可以通过设置dt1(采样间隔),已知采样点数n1,t1=n1*dt1,
如图所示,采样率为40Hz 时的原始信号,采样过程和采样后的信号时域图和频谱图,可见,当采样率大于原始信号频率的两倍时,采样前后信号频率基本不发生变化,信号不失真。
程序如下:
结论:当采样频率大于原始信号频率的两倍时,采样前后信号基本不发生变化即信号不失真。
2.设计数字滤波器和画出频率响应
根据分析所得的原始信号的频谱和噪声信号频谱特点,给出有关滤波器的性能指标。
首先用窗函数法或者最优化法设计高通,低通,带通,带阻滤波器,在MA TLAB中,可以利用函数fir1,firls设计FIR滤波器;
然后在用双线性变换法或脉冲响应法设计上面几种滤波器,在MA TLAB中,可以利用函数butte、cheby1和ellip设计IIR滤波器;
最后,利用MA TLAB中的函数freqz画出各滤波器的频率响应。
具体方法参加附件3种滤波器设计的步骤和实例。
如,根据以上语音信号的特点给出有关IIR滤波器的性能指标:
1)低通滤波器性能指标,fp=4500,fc=6500,Rs=100,Rp=1。
(fp:通带截至频率;fc:阻带截至频率;Rs:通带波纹;Rp:阻带波纹)
2)带阻滤波器性能指标,fp1=4800 Hz,fp2=5200 Hz,fc1=4600 Hz,fc2=5400 Hz,Rs=30dB,Rp=1dB。
([fp1 fp2]:阻带截至频率;[fc1 fc2]:通带截至频率)程序如下:相应波形:
3.用滤波器对信号进行滤波
比较各种滤波器的性能,然后用性能好的各滤波器分别对采集的信号进行滤波。
比较滤波前后语音信号的波形及频谱,要求在一个窗口同时画出滤波前后的波形及频谱。
在MA TLAB中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter 对信号进行滤波。
程序如下:
波形如下:
实验总结:通过此次实验,学会了对一个信号波形的采样。
要恢复原信号波形必须满足采样定理即Fs>=2Fh 。
通过傅里叶变换可画出相应的频谱图。
此次实验也掌握了设计滤波器的一些知识,知道设计一个滤波器的关键在于相应参数的算法。
对理论知识有了一定的巩固和加强,特别是熟悉了对MATLAB的应用。