语音信号处理试验报告Word文件下载.docx
《语音信号处理试验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《语音信号处理试验报告Word文件下载.docx(17页珍藏版)》请在冰点文库上搜索。
0N=3232.51.5020.514x1042
0N=64311.522.50.504x1042
0N=12831.5202.50.514x10105
0N=25631.522.500.514x102010
0N=512322.50.5011.54x10
2)短时平均过零率
a=wavread('
n=length(a);
N=320;
subplot(3,1,1),plot(a);
h=linspace(1,1,N);
%求卷积得其短时能量函数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)>
b(i+1)=1;
b(i+1)=-1;
w(i)=abs(b(i+1)-b(i));
%求出每相邻两点符号的差值的绝对值
k=1;
j=0;
while(k+N-1)<
n
Zm(k)=0;
fori=0:
N-1;
Zm(k)=Zm(k)+w(k+i);
j=j+1;
k=k+N/2;
%每次移动半个窗
forw=1:
j
Q(w)=Zm(160*(w-1)+1)/(2*N);
%短时平均过零率
subplot(3,1,3),plot(Q),grid;
1
0-100.511.522.534x1020
10000.511.522.534x100.50020406080100120140160180
3)自相关函数
N=240
y=wavread('
y=y(:
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);
j=1:
240;
plot(j,R);
grid;
2.5
21.510.50-0.5-1-1.5050100150200250
分析语音信号频域特征MATLAB基于实验二
1)短时谱
clear
subplot(2,1,1),
plot(a);
title('
originalsignal'
grid
N=256;
h=hamming(N);
form=1:
N
b(m)=a(m)*h(m)
y=20*log(abs(fft(b)))
subplot(2,1,2)
plot(y);
短时谱'
originalsignal1
0.50-0.5-100.511.522.534x10谱时短1
0.5000.20.40.60.811.21.41.61.82
2)语谱图
[x,fs,nbits]=wavread('
)
x=x(:
specgram(x,512,fs,100);
xlabel('
时间(s)'
ylabel('
频率(Hz)'
'
语谱图'
title(
语谱图
50004000)3000zH(率频2000100000.511.52(s)时间
3)倒谱和复倒谱
(1)加矩形窗时的倒谱和复倒谱
clear
[4000,4350]);
N=300;
b(m)=a(m)*h(m);
c=cceps(b);
c=fftshift(c);
d=rceps(b);
d=fftshift(d);
subplot(2,1,1)
plot(d);
加矩形窗时的倒谱'
加矩形窗时的复倒谱'
plot(c);
加矩形窗时的倒谱1
0-1-2050100150200250300加矩形窗时的复倒谱10
50-5-10050100150200250300
(2)加汉明窗时的倒谱和复倒谱
a=a(;
加汉明窗时的倒谱'
加汉明窗时的复倒谱'
加汉明窗时的倒谱1
0-1-2-3050100150200250300加汉明窗时的复倒谱10
实验三基于MATLAB的LPC分析
MusicSource=wavread('
MusicSource=MusicSource(:
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);
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'
原始语音帧vs.预测后语音帧'
subplot(2,1,2),plot(err);
误差'
pause
%subplot(2,1,2),plot(f'
20*log(abs(FTframe2)));
%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))),'
subplot(2,1,2),plot(f1'
(20*log(abs(G./A))));
LPC谱'
%plot(abs(ifft(FTframe1./(G./A))));
excited'
%plot(f1'
20*log(abs(FFT_est(1:
)).*A/G)));
%pause
%find_pitch
temp=FTframe1-FFT_est(1:
));
%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);
原始语音帧倒谱(直接调用函数)'
subplot(212),plot(pitch);
预测误差倒谱(直接调用函数)'
subplot(211),plot(1:
length(result1),fftshift(real(result1)));
预测误差倒谱(根据定义编写,没有去除高频分量)'
subplot(212),plot(1:
length(result2),fftshift(real(result2)));
预测误差倒谱(根据定义编);
)'
写,去除高频分量
原始语音帧vs.预测后语音帧0.4
0.20-0.2-0.4050100150200250300差误0.2
0.10-0.1-0.2300250100050150200
短时谱50
0-50-100010203040506070谱LPC100
806040010203040506070
原始语音帧倒谱(直接调用函数)0.5
0-0.5-1050100150200250300预测误差倒谱(直接调用函数)0.5
0-0.5-1050100150200250300
预测误差倒谱(根据定义编写,没有去除高频分量)0.2
0-0.2-0.4-0.6050100150200250300预测误差倒谱(根据定义编写,去除高频分量)0.1
0-0.1-0.2-0.3050100150200250300
实验四基于VQ的特定人孤立词语音识别研究
1、mfcc.m
ccc=mfcc(x)function);
m'
bank=melbankm(24,256,8000,0,0.5,bank=full(bank);
bank=bank/max(bank(:
k=1:
12forn=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);
i=1:
size(xx,1)fory=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'
dtm=zeros(size(m));
i=3:
size(m,1)-2fordtm(i,:
)=-2*m(i-2,:
)-m(i-1,:
)+m(i+1,:
)+2*m(i+2,:
enddtm=dtm/3;
ccc=[mdtm];
ccc=ccc(3:
size(m,1)-2,:
2、vad.m
[x1,x2]=vad(x)functionx=double(x);
x=x/max(abs(x));
FrameLen=240;
FrameInc=80;
amp1=10;
amp2=2;
zcr1=10;
zcr2=5;
%6*10ms=30msmaxsilence=8;
%15*10ms=150msminlen=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)forgoto=0;
statusswitch
{0,1}case
ifamp(n)>
amp1
x1=max(n-count-1,1);
status=2;
silence=0;
count=count+1;
...amp(n)>
amp2|elseifzcr(n)>
zcr2status=1;
elsestatus=0;
count=0;
2,case
amp(n)>
amp2|...ifzcr(n)>
zcr2count=count+1;
else
silence=silence+1;
ifsilence<
maxsilence
count=count+1;
count<
minlenelseif
status=0;
status=3;
3,case;
breakend
end
count=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);
[m15,m16]=szhixin(m8);
[m13,m14]=szhixin(m7);
[m11,m12]=szhixin(m6);
[m9,m10]=szhixin(m5);
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)whilesum=ones(1,16);
p=1:
afor
16ford(i)=odistan(m(p,:
),chushi(i,:
dmin=min(d);
sumd(k)=sumd(k)+dmin;
16for
d(i)==dminifxchushi(i,:
)=xchushi(i,:
)+m(p,:
sum(i)=sum(i)+1;
endend
xchushi(i,:
)/sum(i);
k>
1ifdela=abs(sumd(k)-sumd(k-1))/sumd(k);
endk=k+1;
chushi=xchushi;
endreturn
4、testvq.m
clear;
)这是一个简易语音识别系统,请保证已经将您的语音保存在相应文件夹中'
disp('
)正在训练您的语音模版指令,请稍后...'
10for,i-1);
\\ú
.wav'
海儿的声音fname=spr