语音信号处理实验报告 语音修正短时自相关
- 格式:docx
- 大小:81.26 KB
- 文档页数:7
语音信号处理实验报告实验二一、实验目的本次语音信号处理实验的目的是深入了解语音信号的特性,掌握语音信号处理的基本方法和技术,并通过实际操作和数据分析来验证和巩固所学的理论知识。
具体而言,本次实验旨在:1、熟悉语音信号的采集和预处理过程,包括录音设备的使用、音频格式的转换以及噪声去除等操作。
2、掌握语音信号的时域和频域分析方法,能够使用相关工具和算法计算语音信号的短时能量、短时过零率、频谱等特征参数。
3、研究语音信号的编码和解码技术,了解不同编码算法对语音质量和数据压缩率的影响。
4、通过实验,培养我们的动手能力、问题解决能力和团队协作精神,提高我们对语音信号处理领域的兴趣和探索欲望。
二、实验原理(一)语音信号的采集和预处理语音信号的采集通常使用麦克风等设备将声音转换为电信号,然后通过模数转换器(ADC)将模拟信号转换为数字信号。
在采集过程中,可能会引入噪声和干扰,因此需要进行预处理,如滤波、降噪等操作,以提高信号的质量。
(二)语音信号的时域分析时域分析是对语音信号在时间轴上的特征进行分析。
常用的时域参数包括短时能量、短时过零率等。
短时能量反映了语音信号在短时间内的能量分布情况,短时过零率则表示信号在单位时间内穿过零电平的次数,可用于区分清音和浊音。
(三)语音信号的频域分析频域分析是将语音信号从时域转换到频域进行分析。
通过快速傅里叶变换(FFT)可以得到语音信号的频谱,从而了解信号的频率成分和分布情况。
(四)语音信号的编码和解码语音编码的目的是在保证一定语音质量的前提下,尽可能降低编码比特率,以减少存储空间和传输带宽的需求。
常见的编码算法有脉冲编码调制(PCM)、自适应差分脉冲编码调制(ADPCM)等。
三、实验设备和软件1、计算机一台2、音频采集设备(如麦克风)3、音频处理软件(如 Audacity、Matlab 等)四、实验步骤(一)语音信号的采集使用麦克风和音频采集软件录制一段语音,保存为常见的音频格式(如 WAV)。
语音信号处理实验报告——语音信号分析实验一.实验目的及原理语音信号分析是语音信号处理的前提和基础,只有分析出可表示语音信号本质特征的参数,才有可能利用这些参数进行高效的语音通信、语音合成和语音识别等处理,并且语音合成的音质好坏和语音识别率的高低,都取决于对语音信号分析的准确性和精确性。
贯穿语音分析全过程的是“短时分析技术”。
因为从整体来看,语音信号的特性及表征其本质特征的参数均是随时间变化的,所以它是一个非平稳态过程,但是在一个短时间范围内(一般认为在10~30ms的时间内),其特性基本保持不变,即相对稳定,可将其看做一个准稳态过程,即语音信号具有短时平稳性。
所以要将语音信号分帧来分析其特征参数,帧长一般取为10ms~30ms。
二.实验过程1.2. 仿真结果(1) 时域分析男声及女声(蓝色为时域信号,红色为每一帧的能量,绿色为每一帧的过零率)x 104-0.6-0.4-0.200.20.40.60.81x 105-0.4-0.200.20.40.60.811.2某一帧的自相关函数-1-0.8-0.6-0.4-0.200.20.40.60.813. 频域分析①一帧信号的倒谱分析和FFT 及LPC 分析对应的倒谱系数:119.2,-7.6895,……对应的LPC 预测系数:1,-0.1,-0.02,-0.4,-0.27,……②男声和女声的倒谱分析③浊音和清音的倒谱分析原语音波形一帧语音波形一帧语音的倒谱④浊音和清音的FFT分析和LPC分析(红色为FFT图像,绿色为LPC图像)三.实验结果分析1.时域分析实验中采用的是汉明窗,窗的长度对能否由短时能量反应语音信号的变化起着决定性影响。
这里窗长合适,En能够反应语音信号幅度变化。
同时,从图像可以看出,En可以作为区分浊音和清音的特征参数。
短时过零率表示一帧语音中语音信号波形穿过横轴(零电平)的次数。
从图中可以看出,短时能量和过零率可以近似为互补的情况,短时能量大的地方过零率小,短时能量小的地方过零率较大。
语音信号处理课程实验报告专业班级通信学号姓名指导教师实验名称 用修正的短时自相关检测语音的基音周期 同组人 专业班级通信 学号 姓名 成绩 一、实验目的 1.熟悉前一个实验程序以及中心削波的意义 2.用Matlab 实现用修正的短时自相关检测语音的基音周期。
3.分析修正的短时自相关在基音周期检测中的应用。
4.能够对程序进行重新编制。
二、实验原理 如果x(n)是一个周期为P 的信号,则其自相关函数也是周期为P 的信号,且在信号周期的整数倍处,自相关函数取最大值。
语音的浊音信号具有准周期性,其自相关函数在基音周期的整数倍处取最大值。
计算两相邻最大峰值间的距离,就可以估计出基音周期。
观察浊音信号的自相关函数图,其中真正反映基音周期的只是其中少数几个峰,而其余大多数峰都是由于声道的共振特性引起的。
因此为了突出反映基音周期的信息,同时压缩其他无关信息,减小运算量,有必要对语音信号进行适当预处理后再进行自相关计算以获得基音周期。
第一种方法是先对语音信号进行低通滤波,再进行自相关计算。
因为语音信号包含十分丰富的谐波分量,基音频率的范围分布在50~500Hz 左右,即使女高音升c 调最高也不会超过1kHz ,所以采用1kHz 的低通滤波器先对语音信号进行滤波,保留基音频率;再用2kHz 采样频率进行采样;最后用2~20ms 的滞后时间计算短时自相关,帧长取10~20ms ,即可估计出基音周期。
第二种方法是先对语音信号进行中心削波处理,再进行自相关计算。
本实验采用第二种方法。
且中心削波函数如式(3-1)所示: ……………………………………装………………………………………订…………………………………………线………………………………………()()0()()L L L L L L x x x x f x x x x x x x x ->⎧⎪=-≤≤⎨⎪+<⎩一般削波电平L x 取本帧语音最大幅度的60%~70%。
语音信号处理课程实验报告专业班级通信学号姓名指导教师实验名称 语音修正的短时自相关的实现 同组人 专业班级通信 学号 姓名 成绩 一、实验目的 熟悉语音修正自相关的意义。
充分理解取取不同窗长时的语音的修正自相关的变化情况。
熟悉Matlab 编程语言在语音信号处理中的作用。
能够实现对程序的重新编制。
二、实验原理 对于语音来说,采用短时分析方法,语音短时自相关函数为 ()()()[]()()[]∑--=+'++'+=k N m n m k w k m n x m w m n x k R 10 但是,在计算短时自相关时,窗选语音段为有限长度N ,而求和上限为N-1-k ,因此当k 增加时可用于计算的数据就越来越少了,从而导致k 增加时自相关函数的幅度减小。
为了解决这个问题,提出了语音修正的短时自相关。
修正的短时自相关函数,其定义如下: ()()()()() 2-m 1k m n w k m x m n w m x k R n --+-=∑+∞∞= 若令m n m '+=,代入上式得到 ()())(-)()(-ˆ21-k m w k m n x m w m n x k R m n '+'+''+=∑+∞-∞=' ()()()()1122ˆ ˆw m w m w m w m =-⎧⎪⎨=-⎪⎩定义……………………………………装………………………………………订…………………………………………线………………………………………()()() ˆˆ)()(ˆ 2-m 1k m w k m n x m w m n x k Rn ++++=∑+∞∞=则有()()121, 0n N-1ˆ0, 1, 0n N-1ˆ 0, w m K w m ≤≤⎧=⎨⎩≤≤+⎧=⎨⎩其它其它式中,K 为k 的最大值,即0≤k ≤K 。
由式(2-5)可知,要使)(ˆ2k m w +为非零值,必须使K N k m +1-≤+,考虑到K k ≤,可得1-≤N m ,故式(2-4)可以写成:∑1-0 )()()(ˆN m n k m n x m n x k R =+++= 三、实验要求1.实验前自己用Cool Edit 音频编辑软件录制声音,并把它保存为.txt 文件.2.编程实现不同矩形窗长N =320,160,70的短时修正自相关。
实验一基于 MATLAB 的语音信号时域特征分析操作:报告:一. 实验目的语音信号是一种非平稳的时变信号,它携带着各种信息。
在语音编码、语音合成、语音识别和语音增强等语音处理中无一例外需要提取语音中包含的各种信息。
语音信号分析的目的就在与方便有效的提取并表示语音信号所携带的信息。
语音信号分析可以分为时域和变换域等处理方法,其中时域分析是最简单的方法,直接对语音信号的时域波形进行分析,提取的特征参数主要有语音的短时能量,短时平均过零率,短时自相关函数等。
本实验要求掌握时域特征分析原理,并利用已学知识,编写程序求解语音信号的短时过零率、短时能量、短时自相关特征,分析实验结果,并能掌握借助时域分析方法所求得的参数分析语音信号的基音周期及共振峰。
二. 实验内容1.窗口的选择通过对发声机理的认识,语音信号可以认为是短时平稳的。
在 5~50ms 的范围内,语音频谱特性和一些物理特性参数基本保持不变。
我们将每个短时的语音称为一个分析帧。
一般帧长取 10~30ms。
我们采用一个长度有限的窗函数来截取语音信号形成分析帧。
通常会采用矩形窗和汉明窗。
1.1 给出了这两种窗函数在帧长 N=50图时的时域波形。
这两种窗函数都有低通特性,通过分析这两种窗的频率响应幅度特性可以发现(如图1.2):矩形窗的主瓣宽度小(4*pi/N ),具有较高的频率分辨率,旁瓣峰值大(-13.3dB),会导致泄漏现象;汉明窗的主瓣宽 8*pi/N ,旁瓣峰值低(-42.7dB),可以有效的克服泄漏现象,具有更平滑的低通特性。
因此在语音频谱分析时常使用汉明窗,在计算短时能量和平均幅度时通常用矩形窗。
2. 短时能量由于语音信号的能量随时间变化,清音和浊音之间的能量差别相当显著。
因此对语音的短时能量进行分析,可以描述语音的这种特征变化情况。
定义短时能量为:在用短时能量反映语音信号的幅度变化时,不同的窗函数以及相应窗的长短均有影响。
hamming 窗的效果比矩形窗略好。
实验报告实验课程名称:语音信号处理实验姓名:班级: 20120811 学号:Array指导教师张磊实验教室 21B#293实验时间 2015年4月12日实验成绩实验一 语音信号的端点检测一、实验目的1、掌握短时能量的求解方法2、掌握短时平均过零率的求解方法3、掌握利用短时平均过零率和短时能量等特征,对输入的语音信号进行端点检测。
二、实验设备 HP 计算机、Matlab 软件 三、实验原理 1、短时能量语音信号的短时能量分析给出了反应这些幅度变化的一个合适的描述方法。
对于信号)}({n x ,短时能量的定义如下:∑∑∞-∞=∞-∞=*=-=-=m m n n h n x m n h m xm n w m x E )()()()()]()([2222、短时平均过零率短时平均过零率是指每帧内信号通过零值的次数。
对于连续语音信号,可以考察其时域波形通过时间轴的情况。
对于离散信号,实质上就是信号采样点符号变化的次数。
过零率在一定程度上可以反映出频率的信息。
短时平均过零率的公式为:∑∑-+=∞-∞=--=---=1)]1(sgn[)](sgn[21 )()]1(sgn[)](sgn[21N n nm w w m n m x m x m n w m x m x Z其中,sgn[.]是符号函数,即⎩⎨⎧<-≥=0)(10)(1)](sgn[n x n x n x3、端点检测原理能够实现这些判决的依据在于,不同性质语音的各种短时参数具有不同的概率密度函数,以及相邻的若干帧语音应具有一致的语音特性,它们不会在S 、U 、V 之间随机地跳来跳去。
要正确判断每个输入语音的起点和终点,利用短时平均幅度参数E 和短时平均过零率Z 可以做到这一点。
首先,根据浊音情况下的短时能量参数的概率密度函数)|(V E P 确定一个阈值参数H E ,H E 值一般定的较高。
当一帧输入信号的短时平均幅度参数超过H E 时,就可以判定该帧语音信号不是无声,而有相当大的可能是浊音。
---------------------考试---------------------------学资学习网---------------------押题------------------------------语音信号处理实验班级:学号:姓名:实验一基于MATLAB的语音信号时域特征分析(2学时)短时能量)1.(1)加矩形窗a=wavread('mike.wav');a=a(:,1);subplot(6,1,1),plot(a);N=32;for i=2:6h=linspace(1,1,2.^(i-2)*N);%形成一个矩形窗,长度为2.^(i-2)*NEn=conv(h,a.*a);% 求短时能量函数Ensubplot(6,1,i),plot(En);if(i==2) ,legend('N=32');elseif(i==3), legend('N=64');elseif(i==4) ,legend('N=128');elseif(i==5) ,legend('N=256');elseif(i==6) ,legend('N=512');endend10-100.511.522.534x 104 20 N=3232.51.5200.514x 10 50 N=6431.50.51022.54x 10 1050 N=12831.5202.50.514x 10 20100 N=256322.50.511.504x 10 40200 N=5123100.51.522.54x 10(2)加汉明窗a=wavread('mike.wav');a=a(:,1);subplot(6,1,1),plot(a);N=32;for i=2:6h=hanning(2.^(i-2)*N);%形成一个汉明窗,长度为2.^(i-2)*NEn求短时能量函数En=conv(h,a.*a);%subplot(6,1,i),plot(En);if(i==2), legend('N=32');elseif(i==3), legend('N=64');elseif(i==4) ,legend('N=128');elseif(i==5) ,legend('N=256');elseif(i==6) ,legend('N=512');endend10-100.511.522.534x 102 10 N=3232.51.5020.514x 10 420 N=64311.522.50.504x 10 420 N=12831.5202.50.514x 10 1050 N=25631.522.500.514x 10 20100 N=512322.50.5011.54x 102)短时平均过零率a=wavread('mike.wav');a=a(:,1);n=length(a);N=320;subplot(3,1,1),plot(a);h=linspace(1,1,N);En=conv(h,a.*a); %求卷积得其短时能量函数Ensubplot(3,1,2),plot(En);for i=1:n-1if a(i)>=0b(i)= 1;elseb(i) = -1;endif a(i+1)>=0b(i+1)=1;elseb(i+1)= -1;endw(i)=abs(b(i+1)-b(i)); %求出每相邻两点符号的差值的绝对值endk=1;j=0;while (k+N-1)<nZm(k)=0;for i=0:N-1;Zm(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(3,1,3),plot(Q),grid;10-100.511.522.534x 102010000.511.522.534x 100.500204060801001201401601803)自相关函数N=240y=wavread('mike.wav');y=y(:,1);x=y(13271:13510);x=x.*rectwin(240);R=zeros(1,240);for k=1:240for n=1:240-kR(k)=R(k)+x(n)*x(n+k);endendj=1:240;plot(j,R);grid;2.521.510.50-0.5-1-1.5050100150200250分析语音信号频域特征MATLAB基于实验二1)短时谱cleara=wavread('mike.wav');a=a(:,1);subplot(2,1,1),plot(a);title('original signal');gridN=256;h=hamming(N);for m=1:Nb(m)=a(m)*h(m)endy=20*log(abs(fft(b)))subplot(2,1,2)plot(y);title('短时谱');gridoriginal signal10.50-0.5-100.511.522.534x 10谱时短10.5000.20.40.60.811.21.41.61.822)语谱图[x,fs,nbits]=wavread('mike.wav')x=x(:,1);specgram(x,512,fs,100);xlabel('时间(s)');ylabel('频率(Hz)'););'语谱图'title(语谱图50004000)3000zH(率频2000100000.511.52(s)时间3)倒谱和复倒谱(1)加矩形窗时的倒谱和复倒谱cleara=wavread('mike.wav',[4000,4350]);a=a(:,1);N=300;h=linspace(1,1,N);for m=1:Nb(m)=a(m)*h(m);endc=cceps(b);c=fftshift(c);d=rceps(b);d=fftshift(d);subplot(2,1,1)plot(d);title('加矩形窗时的倒谱')subplot(2,1,2)) '加矩形窗时的复倒谱'plot(c);title(加矩形窗时的倒谱10-1-2050100150200250300加矩形窗时的复倒谱1050-5-10050100150200250300(2)加汉明窗时的倒谱和复倒谱cleara=wavread('mike.wav',[4000,4350]);a=a(;,1);N=300;h=hamming(N);for m=1:Nb(m)=a(m)*h(m);endc=cceps(b);c=fftshift(c);d=rceps(b);d=fftshift(d);subplot(2,1,1)plot(d);title('加汉明窗时的倒谱')subplot(2,1,2)) '加汉明窗时的复倒谱'plot(c);title(加汉明窗时的倒谱10-1-2-3050100150200250300加汉明窗时的复倒谱1050-5-10050100150200250300实验三基于MATLAB的LPC分析MusicSource = wavread('mike.wav');MusicSource=MusicSource(:,1);Music_source = MusicSource';N = 256; % window length,N = 100 -- 1000;Hamm = hamming(N); % create Hamming windowframe = input('请键入想要处理的帧位置= ');% origin is current frameorigin = Music_source(((frame - 1) * (N / 2) + 1):((frame - 1) * (N / 2) + N));Frame = origin .* Hamm';%%Short Time Fourier Transform%[s1,f1,t1] = specgram(MusicSource,N,N/2,N);[Xs1,Ys1] = size(s1);for i = 1:Xs1FTframe1(i) = s1(i,frame);endN1 = input('请键入预测器阶数= '); % N1 is predictor's order[coef,gain] = lpc(Frame,N1); % LPC analysis using Levinson-Durbin recursionest_Frame = filter([0 -coef(2:end)],1,Frame); % estimate frame(LP)FFT_est = fft(est_Frame);err = Frame - est_Frame; % error% FFT_err = fft(err);subplot(2,1,1),plot(1:N,Frame,1:N,est_Frame,'-r');grid;title('原始语音帧vs.预测后语音帧') subplot(2,1,2),plot(err);grid;title('误差');pause%subplot(2,1,2),plot(f',20*log(abs(FTframe2)));grid;title('短时谱')%% Gain solution using G^2 = Rn(0) - sum(ai*Rn(i)),i = 1,2,...,P%fLength(1 : 2 * N) = [origin,zeros(1,N)];Xm = fft(fLength,2 * N);X = Xm .* conj(Xm);Y = fft(X , 2 * N);Rk = Y(1 : N);PART = sum(coef(2 : N1 + 1) .* Rk(1 : N1));G = sqrt(sum(Frame.^2) - PART);A = (FTframe1 - FFT_est(1 : length(f1'))) ./ FTframe1 ; % inverse filter A(Z)subplot(2,1,1),plot(f1',20*log(abs(FTframe1)),f1',(20*log(abs(1 ./ A))),'-r');grid;title('短时谱'); subplot(2,1,2),plot(f1',(20*log(abs(G ./ A))));grid;title('LPC谱');pause%plot(abs(ifft(FTframe1 ./ (G ./ A))));grid;title('excited')%plot(f1',20*log(abs(FFT_est(1 : length(f1')) .* A / G )));grid;%pause%% find_pitch%temp = FTframe1 - FFT_est(1 : length(f1'));% not move higher frequncepitch1 = log(abs(temp));pLength = length(pitch1);result1 = ifft(pitch1,N);% move higher frequncepitch1((pLength - 32) : pLength) = 0;result2 = ifft(pitch1,N);% direct do real cepstrum with errpitch = fftshift(rceps(err));origin_pitch = fftshift(rceps(Frame));subplot(211),plot(origin_pitch);grid;title('原始语音帧倒谱(直接调用函数)');subplot(212),plot(pitch);grid;title('预测误差倒谱(直接调用函数)');pausesubplot(211),plot(1:length(result1),fftshift(real(result1)));grid;title('预测误差倒谱(根据定义编写,没有去除高频分量)');subplot(212),plot(1:length(result2),fftshift(real(result2)));grid;title('预测误差倒谱(根据定义编);)'写,去除高频分量原始语音帧vs.预测后语音帧0.40.20-0.2-0.4050100150200250300差误0.20.10-0.1-0.2300250100050150200短时谱500-50-100010203040506070谱LPC100806040010203040506070原始语音帧倒谱(直接调用函数)0.50-0.5-1050100150200250300预测误差倒谱(直接调用函数)0.50-0.5-1050100150200250300预测误差倒谱(根据定义编写,没有去除高频分量)0.20-0.2-0.4-0.6050100150200250300预测误差倒谱(根据定义编写,去除高频分量)0.10-0.1-0.2-0.3050100150200250300预测误差倒谱(根据定义编写,没有去除高频分量)0.20-0.2-0.4-0.6050100150200250300预测误差倒谱(根据定义编写,去除高频分量)0.10-0.1-0.2-0.3050100150200250300预测误差倒谱(根据定义编写,没有去除高频分量)0.20-0.2-0.4-0.6050100150200250300预测误差倒谱(根据定义编写,去除高频分量)0.10-0.1-0.2-0.3050100150200250300实验四基于VQ的特定人孤立词语音识别研究1、mfcc.mccc = mfcc(x)function);'m'bank=melbankm(24,256,8000,0,0.5,bank=full(bank); bank=bank/max(bank(:));k=1:12for n=0:23; dctcoef(k,:)=cos((2*n+1)*k*pi/(2*24));endw = 1 + 6 * sin(pi * [1:12] ./ 12);w = w/max(w);xx=double(x);xx=filter([1 -0.9375],1,xx);xx=enframe(xx,256,80); i=1:size(xx,1)for y = xx(i,:); s = y' .*hamming(256); t = abs(fft(s)); t = t.^2; c1=dctcoef * log(bank * t(1:129));c2 = c1.*w'; m(i,:)=c2';enddtm = zeros(size(m)); i=3:size(m,1)-2for dtm(i,:) = -2*m(i-2,:) - m(i-1,:) + m(i+1,:) + 2*m(i+2,:);end dtm = dtm / 3;ccc = [m dtm];ccc = ccc(3:size(m,1)-2,:);2、vad.m[x1,x2] = vad(x)function x = double(x);x = x / max(abs(x));FrameLen = 240;FrameInc = 80;amp1 = 10;amp2 = 2;zcr1 = 10;zcr2 = 5;% 6*10ms = 30ms maxsilence = 8;% 15*10ms = 150ms minlen = 15;status = 0;count = 0;silence = 0;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);amp = sum(abs(enframe(filter([1 -0.9375], 1, x), FrameLen, FrameInc)),2);amp1 = min(amp1, max(amp)/4);amp2 = min(amp2, max(amp)/8);x1 = 0;x2 = 0; n=1:length(zcr)for goto = 0; status switch{0,1} caseif amp(n) > amp1x1 = max(n-count-1,1); status = 2; silence = 0; count = count + 1;... amp(n) > amp2 | elseif zcr(n) > zcr2status = 1; count = count + 1;else status = 0; count = 0;end2, caseamp(n) > amp2 | ...if zcr(n) > zcr2 count = count + 1; elsesilence = silence+1; if silence < maxsilencecount = count + 1; count < minlen elseifstatus = 0; silence = 0; count = 0;elsestatus = 3;endend3, case; break endcount = count-silence/2;x2 = x1 + count -1;3、codebook.m%clear; xchushi= codebook(m)function[a,b]=size(m);[m1,m2]=szhixin(m); [m3,m4]=szhixin(m2);[m1,m2]=szhixin(m1);[m7,m8]=szhixin(m4);[m5,m6]=szhixin(m3);[m3,m4]=szhixin(m2);[m1,m2]=szhixin(m1);[m15,m16]=szhixin(m8);[m13,m14]=szhixin(m7);[m11,m12]=szhixin(m6);[m9,m10]=szhixin(m5);[m7,m8]=szhixin(m4);[m5,m6]=szhixin(m3);[m3,m4]=szhixin(m2);[m1,m2]=szhixin(m1);chushi(1,:)=zhixinf(m1);chushi(2,:)=zhixinf(m2);chushi(3,:)=zhixinf(m3);chushi(4,:)=zhixinf(m4); chushi(5,:)=zhixinf(m5);chushi(6,:)=zhixinf(m6);chushi(7,:)=zhixinf(m7); chushi(8,:)=zhixinf(m8);chushi(9,:)=zhixinf(m9);chushi(10,:)=zhixinf(m10); chushi(11,:)=zhixinf(m11);chushi(12,:)=zhixinf(m12);chushi(13,:)=zhixinf(m13);chushi(14,:)=zhixinf(m14);chushi(15,:)=zhixinf(m15);chushi(16,:)=zhixinf(m16);sumd=zeros(1,1000);k=1;dela=1;xchushi=chushi;(k<=1000)while sum=ones(1,16); p=1:a fori=1:16 for d(i)=odistan(m(p,:),chushi(i,:));enddmin=min(d); sumd(k)=sumd(k)+dmin;i=1:16ford(i)==dmin if xchushi(i,:)=xchushi(i,:)+m(p,:); sum(i)=sum(i)+1;end endendi=1:16forxchushi(i,:)=xchushi(i,:)/sum(i);endk>1if dela=abs(sumd(k)-sumd(k-1))/sumd(k);end k=k+1; chushi=xchushi; end return4、testvq.mclear;)这是一个简易语音识别系统,请保证已经将您的语音保存在相应文件夹中'disp(')正在训练您的语音模版指令,请稍后...'disp(' i=1:10for,i-1);\\ú.wav'海儿的声音 fname =sprintf('D:\\matlab\\work\\dtw1\\ x = wavread(fname); [x1 x2] = vad(x); m = mfcc(x); m = m(x1:x2-5,:);ref(i).code=codebook(m);end)?''语音指令训练成功,恭喜!disp()...''正在测试您的测试语音指令,请稍后disp( i=1:10for,i-1);海儿的声音\\?.wav'fname = sprintf('D:\\matlab\\work\\dtw1\\ x = wavread(fname);[x1 x2] = vad(x); mn = mfcc(x); mn = mn(x1:x2-5,:);%mn = mn(x1:x2,:) test(i).mfcc = mn;end sumsumdmax=0;sumsumdmin=0;)''对训练过的语音进行测试disp( w=1:10for sumd=zeros(1,10); [a,b]=size(test(w).mfcc);i=1:10forp=1:a for j=1:16 ford(j)=odistan(test(w).mfcc(p,:),ref(i).code(j,:));dmin=min(d);%×üê§?? sumd(i)=sumd(i)+dmin;end end sumdmin=min(sumd)/a;sumdmin1=min(sumd);sumdmax(w)=max(sumd)/a; sumsumdmin=sumdmin+sumsumdmax;sumsumdmax=sumdmax(w)+sumsumdmax;)正在匹配您的语音指令,请稍后...'disp(' i=1:10for (sumd(i)==sumdmin1) if (i) switch 1 case);前'', '您输入的语音指令为:%s; 识别结果为%s\n','前fprintf(' 2 case);', ''后:%s; 识别结果为%s\n','后 fprintf('您输入的语音指令为 3case);', '左识别结果为%s\n','左' fprintf('您输入的语音指令为:%s;4case);''右,'右', 您输入的语音指令为 fprintf('a:%s; 识别结果为%s\n' 5case);''东'东', fprintf('您输入的语音指令为:%s; 识别结果为%s\n', 6case);南'南', ' fprintf('您输入的语音指令为:%s; 识别结果为%s\n',' 7 case);', '西,:%s; 识别结果为%s\n''西' fprintf('您输入的语音指令为 8case);''北,'北', 您输入的语音指令为 fprintf(':%s; 识别结果为%s\n' 9case);上'', ', fprintf('您输入的语音指令为a:%s; 识别结果为%s\n''上 10case);下', '下'',您输入的语音指令为 fprintf('a:%s; 识别结果为%s\n'otherwise); 'error' fprintf(endendend end delamin=sumsumdmin/10;delamax=sumsumdmax/10;)''对没有训练过的语音进行测试disp()正在测试你的语音,请稍后...'disp(' i=1:10for,i-1);fname =sprintf('D:\\matlab\\work\\dtw1\\o£?ùμ?éùò?\\?.wav' x = wavread(fname);[x1 x2] = vad(x); mn = mfcc(x); mn = mn(x1:x2-5,:);%mn = mn(x1:x2,:)test(i).mfcc = mn;endw=1:10for sumd=zeros(1,10); [a,b]=size(test(w).mfcc); i=1:10forp=1:a for j=1:16ford(j)=odistan(test(w).mfcc(p,:),ref(i).code(j,:));enddmin=min(d);%×üê§?? sumd(i)=sumd(i)+dmin;end end sumdmin=min(sumd);z=0; i=1:10for (((sumd(i))/a)>delamax)|| if z=z+1;endend)...'disp('正在匹配您的语音指令,请稍后z<=3if i=1:10for (sumd(i)==sumdmin) if (i)switch1case);'前', '前',%s\n'识别结果为:%s; 您输入的语音指令为' fprintf(2 case);'后', ':%s; 识别结果为%s\n','后 fprintf('您输入的语音指令为3case);', '左识别结果为%s\n','左' fprintf('您输入的语音指令为:%s;4case);''右,'右', 识别结果为 fprintf('您输入的语音指令为a:%s; %s\n' 5case);''东'东', fprintf('您输入的语音指令为:%s; 识别结果为%s\n', 6 case);南'南', ' fprintf('您输入的语音指令为:%s; 识别结果为%s\n',' 7 case);', '西西:%s; 识别结果为%s\n','' fprintf('您输入的语音指令为 8case );''北,'北', 识别结果为 fprintf('您输入的语音指令为:%s; %s\n' 9case);上'', '上 fprintf('您输入的语音指令为a:%s; 识别结果为%s\n',' 10case);下'','下', 识别结果为 fprintf('您输入的语音指令为a:%s; %s\n'otherwise ); fprintf('error'endendend else)您输入的语音无效?£?\n'' fprintf(end end。
语音信号处理实验报告专业班级电子信息1203学生姓名钟英爽指导教师覃爱娜完成日期2015年4月28日电子信息工程系信息科学与工程学院实验一语音波形文件的分析和读取一、实验学时:2 学时二、实验的任务、性质与目的:本实验是选修《语音信号处理》课的电子信息类专业学生的基础实验。
通过实验(1)掌握语音信号的基本特性理论:随机性,时变特性,短时平稳性,相关性等;(2)掌握语音信号的录入方式和*.WAV音波文件的存储结构;(3)使学生初步掌握语音信号处理的一般实验方法。
三、实验原理和步骤:WAV 文件格式简介WAV 文件是多媒体中使用了声波文件的格式之一,它是以RIFF格式为标准。
每个WAV 文件的头四个字节就是“RIFF”。
WAV 文件由文件头和数据体两大部分组成,其中文件头又分为RIFF/WAV 文件标识段和声音数据格式说明段两部分。
常见的WAV 声音文件有两种,分别对应于单声道(11.025KHz 采样率、8Bit 的采样值)和双声道(44.1KHz 采样率、16Bit 的采样值)。
采样率是指声音信号在“模拟→数字”转换过程中,单位时间内采样的次数;采样值是指每一次采样周期内声音模拟信号的积分值。
对于单声道声音文件,采样数据为8 位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16 位的整数(int),高八位和低八位分别代表左右两个声道。
WAV 文件数据块包含以脉冲编码调制(PCM)格式表示的样本。
在单声道WAV 文件中,道0 代表左声道,声道1 代表右声道;在多声道WAV 文件中,样本是交替出现的。
WAV 文件的格式表1 wav文件格式说明表(1)选取WINDOWS 下MEDIA 中的任一WAV 文件,采用播放器进行播放,观察其播放波形,定性描述其特征;(2)录入并存储本人姓名语音文件(姓名.wav),根据WAV 文件的储格式,利用MATLAB 或C 语言,分析并读取文件头和数据信息;(3)将文件的通道数、采样频率、样本位数和第一个数据读取并示出来。
内蒙古工业大学信息工程学院实验报告课程名称:语音信号处理实验名称:语音信号采集与处理实验类型:验证性■综合性□设计性□实验室名称:信息学院机房班级:电子10-1班学号:201080203002 姓名:王红霞组别:同组人:成绩:实验日期: 2013年6月21日实验 语音信号采集与处理一、 实验目的、要求 (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宽,而同—个人在不同情态下发音的基音周期也不同,加之基音周期还受到单词发音音调的影响,因而基音周期的精确检测实际上是一件比较困难的事情。
语音信号处理课程实验报告
专业班级通信
学号
姓名
指导教师
实验名称 语音修正的短时自相关的实现 同组人 专业班级通信 学号 姓名 成绩 一、实验目的 熟悉语音修正自相关的意义。
充分理解取取不同窗长时的语音的修正自相关的变化情况。
熟悉Matlab 编程语言在语音信号处理中的作用。
能够实现对程序的重新编制。
二、实验原理 对于语音来说,采用短时分析方法,语音短时自相关函数为 ()()()[]()()[]∑--=+'++'+=k N m n m k w k m n x m w m n x k R 10 但是,在计算短时自相关时,窗选语音段为有限长度N ,而求和上限为N-1-k ,因此当k 增加时可用于计算的数据就越来越少了,从而导致k 增加时自相关函数的幅度减小。
为了解决这个问题,提出了语音修正的短时自相关。
修正的短时自相关函数,其定义如下: ()()()()() 2-m 1k m n w k m x m n w m x k R n --+-=∑+∞∞= 若令m n m '+=,代入上式得到 ()())(-)()(-ˆ21-k m w k m n x m w m n x k R m n '+'+''+=∑+∞-∞=' ()()()()1122ˆ ˆw m w m w m w m =-⎧⎪⎨=-⎪⎩定义
…
…
……
……
……
……
……
…
…装
……
……
……
……
…
……
……
……
订…
……
………………………………
…线
……
……
……
……
…
……
……
……
()()() ˆˆ)()(ˆ 2-m 1k m w k m n x m w m n x k R
n ++++=∑+∞∞=则有
()()121, 0n N-1ˆ0, 1, 0n N-1ˆ 0, w m K w m ≤≤⎧=⎨⎩≤≤+⎧=⎨⎩其它其它
式中,K 为k 的最大值,即0≤k ≤K 。
由式(2-5)可知,要使)(ˆ2k m w +为非零值,必须使K N k m +1-≤+,考虑到K k ≤,可得1-≤N m ,故式(2-4)可以写成:
∑1-0 )()()(ˆN m n k m n x m n x k R =+++= 三、实验要求
1.实验前自己用Cool Edit 音频编辑软件录制声音,并把它保存为.txt 文件.
2.编程实现不同矩形窗长N =320,160,70的短时修正自相关。
3.用Matlab 画出短时修正自相关的图形。
4.写出实验报告,分析实验结果。
四、实验条件 计算机 Matlab 软件
实验步骤
1.用Cool Edit 读入浊音语音,设置采样率为8kHz ,16位,单声道。
2.将读入的语音wav 文件保存为txt 文件。
3.读入Matlab 中,并且对照取不同矩形窗长N 的短时修正自相关函数,画出图形。
六、实验程序及数据:
fid=fopen('voice.txt','rt')
b=fscanf(fid,'%f');
b1=b(1:300);
N=150;
A=[];
for k=1:150;
sum=0;
for m=1:N;
sum=sum+b1(m)*b1(m+k-1); end
A(k)=sum;
end
for k=1:150
A1(k)=A(k)/A(1);
end
figure(1)
subplot(3,1,1)
plot(A1);
xlabel('延时k')
ylabel('R(k)')
legend('N=150')
axis([0,180,-0.5,1]);
b2=b(1:280);
N=80;
B=[];
for k=1:80;
sum=0;
for m=1:N;
sum=sum+b2(m)*b2(m+k-1); end
B(k)=sum;
end
for k=1:80
B1(k)=B(k)/B(1);
end
figure(1)
subplot(3,1,2)
plot(B1);
xlabel('延时k')
ylabel('R(k)')
legend('N=80')
axis([0,180,-0.5,1]);
b3=b(1:120);
N=60;
C=[];
for k=1:60;
sum=0;
for m=1:N;
sum=sum+b3(m)*b3(m+k-1); end
C(k)=sum;
end
for k=1:60
C1(k)=C(k)/C(1);
end
figure(1)
subplot(3,1,3)
plot(C1);
xlabel('延时k')
ylabel('R(k)') legend('N=70') axis([0,180,-0.5,1])。