语音信号处理实验报告.docx

上传人:b****8 文档编号:12318603 上传时间:2023-06-05 格式:DOCX 页数:29 大小:137.94KB
下载 相关 举报
语音信号处理实验报告.docx_第1页
第1页 / 共29页
语音信号处理实验报告.docx_第2页
第2页 / 共29页
语音信号处理实验报告.docx_第3页
第3页 / 共29页
语音信号处理实验报告.docx_第4页
第4页 / 共29页
语音信号处理实验报告.docx_第5页
第5页 / 共29页
语音信号处理实验报告.docx_第6页
第6页 / 共29页
语音信号处理实验报告.docx_第7页
第7页 / 共29页
语音信号处理实验报告.docx_第8页
第8页 / 共29页
语音信号处理实验报告.docx_第9页
第9页 / 共29页
语音信号处理实验报告.docx_第10页
第10页 / 共29页
语音信号处理实验报告.docx_第11页
第11页 / 共29页
语音信号处理实验报告.docx_第12页
第12页 / 共29页
语音信号处理实验报告.docx_第13页
第13页 / 共29页
语音信号处理实验报告.docx_第14页
第14页 / 共29页
语音信号处理实验报告.docx_第15页
第15页 / 共29页
语音信号处理实验报告.docx_第16页
第16页 / 共29页
语音信号处理实验报告.docx_第17页
第17页 / 共29页
语音信号处理实验报告.docx_第18页
第18页 / 共29页
语音信号处理实验报告.docx_第19页
第19页 / 共29页
语音信号处理实验报告.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

语音信号处理实验报告.docx

《语音信号处理实验报告.docx》由会员分享,可在线阅读,更多相关《语音信号处理实验报告.docx(29页珍藏版)》请在冰点文库上搜索。

语音信号处理实验报告.docx

语音信号处理实验报告

 

语音信号处理实验

 

班级:

学号:

姓名:

实验一基于MATLAB的语音信号时域特征分析(2学时)

1)短时能量

(1)加矩形窗

a=wavread('mike.wav');

a=a(:

1);

subplot(6,1,1),plot(a);

N=32;

fori=2:

6

h=linspace(1,1,2.^(i-2)*N);%形成一个矩形窗,长度为2.^(i-2)*N

En=conv(h,a.*a);%求短时能量函数En

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');

end

end

(2)加汉明窗

a=wavread('mike.wav');

a=a(:

1);

subplot(6,1,1),plot(a);

N=32;

fori=2:

6

h=hanning(2.^(i-2)*N);%形成一个汉明窗,长度为2.^(i-2)*N

En=conv(h,a.*a);%求短时能量函数En

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');

end

end

2)短时平均过零率

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);%求卷积得其短时能量函数En

subplot(3,1,2),plot(En);

fori=1:

n-1

ifa(i)>=0

b(i)=1;

else

b(i)=-1;

end

ifa(i+1)>=0

b(i+1)=1;

else

b(i+1)=-1;

end

w(i)=abs(b(i+1)-b(i));%求出每相邻两点符号的差值的绝对值

end

k=1;

j=0;

while(k+N-1)

Zm(k)=0;

fori=0:

N-1;

Zm(k)=Zm(k)+w(k+i);

end

j=j+1;

k=k+N/2;%每次移动半个窗

end

forw=1:

j

Q(w)=Zm(160*(w-1)+1)/(2*N);%短时平均过零率

end

subplot(3,1,3),plot(Q),grid;

3)自相关函数

N=240

y=wavread('mike.wav');

y=y(:

1);

x=y(13271:

13510);

x=x.*rectwin(240);

R=zeros(1,240);

fork=1:

240

forn=1:

240-k

R(k)=R(k)+x(n)*x(n+k);

end

end

j=1:

240;

plot(j,R);

grid;

 

实验二基于MATLAB分析语音信号频域特征

1)短时谱

clear

a=wavread('mike.wav');

a=a(:

1);

subplot(2,1,1),

plot(a);title('originalsignal');

grid

N=256;

h=hamming(N);

form=1:

N

b(m)=a(m)*h(m)

end

y=20*log(abs(fft(b)))

subplot(2,1,2)

plot(y);title('短时谱');

grid

2)语谱图

[x,fs,nbits]=wavread('mike.wav')

x=x(:

1);

specgram(x,512,fs,100);

xlabel('时间(s)');

ylabel('频率(Hz)');

title('语谱图');

3)倒谱和复倒谱

(1)加矩形窗时的倒谱和复倒谱

clear

a=wavread('mike.wav',[4000,4350]);

a=a(:

1);

N=300;

h=linspace(1,1,N);

form=1:

N

b(m)=a(m)*h(m);

end

c=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('加矩形窗时的复倒谱')

(2)加汉明窗时的倒谱和复倒谱

clear

a=wavread('mike.wav',[4000,4350]);

a=a(;,1);

N=300;

h=hamming(N);

form=1:

N

b(m)=a(m)*h(m);

end

c=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('加汉明窗时的复倒谱')

实验三基于MATLAB的LPC分析

MusicSource=wavread('mike.wav');

MusicSource=MusicSource(:

1);

Music_source=MusicSource';

N=256;%windowlength,N=100--1000;

Hamm=hamming(N);%createHammingwindow

frame=input('请键入想要处理的帧位置=');

%originiscurrentframe

origin=Music_source(((frame-1)*(N/2)+1):

((frame-1)*(N/2)+N));

Frame=origin.*Hamm';

%

%ShortTimeFourierTransform

%

[s1,f1,t1]=specgram(MusicSource,N,N/2,N);

[Xs1,Ys1]=size(s1);

fori=1:

Xs1

FTframe1(i)=s1(i,frame);

end

N1=input('请键入预测器阶数=');%N1ispredictor'sorder

[coef,gain]=lpc(Frame,N1);%LPCanalysisusingLevinson-Durbinrecursion

est_Frame=filter([0-coef(2:

end)],1,Frame);%estimateframe(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('短时谱')

%

%GainsolutionusingG^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;%inversefilterA(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'));

%notmovehigherfrequnce

pitch1=log(abs(temp));

pLength=length(pitch1);

result1=ifft(pitch1,N);

%movehigherfrequnce

pitch1((pLength-32):

pLength)=0;

result2=ifft(pitch1,N);

%directdorealcepstrumwitherr

pitch=fftshift(rceps(err));

origin_pitch=fftshift(rceps(Frame));

subplot(211),plot(origin_pitch);grid;title('原始语音帧倒谱(直接调用函数)');

subplot(212),plot(pitch);grid;title('预测误差倒谱(直接调用函数)');

pause

subplot(211),plot(1:

length(result1),fftshift(real(result1)));grid;title('预测误差倒谱(根据定义编写,没有去除高频分量)');

subplot(212),plot(1:

length(result2),fftshift(real(result2)));grid;title('预测误差倒谱(根据定义编写,去除高频分量)');

 

实验四基于VQ的特定人孤立词语音识别研究

1、mfcc.m

functionccc=mfcc(x)

bank=melbankm(24,256,8000,0,0.5,'m');

bank=full(bank);

bank=bank/max(bank(:

));

fork=1:

12

n=0:

23;

dctcoef(k,:

)=cos((2*n+1)*k*pi/(2*24));

end

w=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);

fori=1:

size(xx,1)

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';

end

dtm=zeros(size(m));

fori=3:

size(m,1)-2

dtm(i,:

)=-2*m(i-2,:

)-m(i-1,:

)+m(i+1,:

)+2*m(i+2,:

);

end

dtm=dtm/3;

ccc=[mdtm];

ccc=ccc(3:

size(m,1)-2,:

);

2、vad.m

function[x1,x2]=vad(x)

x=double(x);

x=x/max(abs(x));

FrameLen=240;

FrameInc=80;

amp1=10;

amp2=2;

zcr1=10;

zcr2=5;

maxsilence=8;%6*10ms=30ms

minlen=15;%15*10ms=150ms

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;

forn=1:

length(zcr)

goto=0;

switchstatus

case{0,1}

ifamp(n)>amp1

x1=max(n-count-1,1);

status=2;

silence=0;

count=count+1;

elseifamp(n)>amp2|...

zcr(n)>zcr2

status=1;

count=count+1;

else

status=0;

count=0;

end

case2,

ifamp(n)>amp2|...

zcr(n)>zcr2

count=count+1;

else

silence=silence+1;

ifsilence

count=count+1;

elseifcount

status=0;

silence=0;

count=0;

else

status=3;

end

end

case3,

break;

end

end

count=count-silence/2;

x2=x1+count-1;

3、codebook.m

%clear;

functionxchushi=codebook(m)

[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;

while(k<=1000)

sum=ones(1,16);

forp=1:

a

fori=1:

16

d(i)=odistan(m(p,:

),chushi(i,:

));

end

dmin=min(d);

sumd(k)=sumd(k)+dmin;

fori=1:

16

ifd(i)==dmin

xchushi(i,:

)=xchushi(i,:

)+m(p,:

);

sum(i)=sum(i)+1;

end

end

end

fori=1:

16

xchushi(i,:

)=xchushi(i,:

)/sum(i);

end

ifk>1

dela=abs(sumd(k)-sumd(k-1))/sumd(k);

end

k=k+1;

chushi=xchushi;

end

return

4、testvq.m

clear;

disp('这是一个简易语音识别系统,请保证已经将您的语音保存在相应文件夹中')

disp('正在训练您的语音模版指令,请稍后...')

fori=1:

10

fname=sprintf('D:

\\matlab\\work\\dtw1\\海儿的声音\\%da.wav',i-1);

x=wavread(fname);

[x1x2]=vad(x);

m=mfcc(x);

m=m(x1:

x2-5,:

);

ref(i).code=codebook(m);

end

disp('语音指令训练成功,恭喜!

¡')

disp('正在测试您的测试语音指令,请稍后...')

fori=1:

10

fname=sprintf('D:

\\matlab\\work\\dtw1\\海儿的声音\\%db.wav',i-1);

x=wavread(fname);

[x1x2]=vad(x);

mn=mfcc(x);

mn=mn(x1:

x2-5,:

);

%mn=mn(x1:

x2,:

test(i).mfcc=mn;

end

sumsumdmax=0;

sumsumdmin=0;

disp('对训练过的语音进行测试')

forw=1:

10

sumd=zeros(1,10);

[a,b]=size(test(w).mfcc);

fori=1:

10

forp=1:

a

forj=1:

16

d(j)=odistan(test(w).mfcc(p,:

),ref(i).code(j,:

));

end

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('正在匹配您的语音指令,请稍后...')

fori=1:

10

if(sumd(i)==sumdmin1)

switch(i)

case1

fprintf('您输入的语音指令为:

%s;识别结果为%s\n','前','前');

case2

fprintf('您输入的语音指令为:

%s;识别结果为%s\n','后','后');

case3

fprintf('您输入的语音指令为:

%s;识别结果为%s\n','左','左');

case4

fprintf('您输入的语音指令为ª:

%s;识别结果为%s\n','右','右');

case5

fprintf('您输入的语音指令为:

%s;识别结果为%s\n','东','东');

case6

fprintf('您输入的语音指令为:

%s;识别结果为%s\n','南','南');

case7

fprintf('您输入的语音指令为:

%s;识别结果为%s\n','西','西');

case8

fprintf('您输入的语音指令为:

%s;识别结果为%s\n','北','北');

case9

fprintf('您输入的语音指令为ª:

%s;识别结果为%s\n','上','上');

case10

fprintf('您输入的语音指令为ª:

%s;识别结果为%s\n','下','下');

otherwise

fprintf('error');

end

end

end

end

delamin=sumsumdmin/10;

delamax=sumsumdmax/10;

disp('对没有训练过的语音进行测试')

disp('正在测试你的语音,请稍后...')

fori=1:

10

fname=sprintf('D:

\\matlab\\work\\dtw1\\º£¶ùµÄÉùÒô\\%db.wav',i-1);

x=wavread(fname);

[x1x2]=va

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 销售营销

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2