⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.m

📁 wav声音文件的通过多脉冲激励编码器
💻 M
字号:

[x,fs,nbits] = wavread('4.wav'); % 读取语音文件
xlength=length(x);%计算声音文件样本数
poles_num=16

[fr,frmsize,frmcnt]= frame(x);
errorpre=zeros(1,frmsize);
%save all parameter
codeA=zeros(10,frmcnt);
codeN=zeros(10,frmcnt);
btotal=zeros(1,frmcnt);
pitchtotal=zeros(1,frmcnt);
vtotal=zeros(frmcnt,frmsize);
linatotal=zeros(poles_num,frmcnt);
  splast=zeros(1,frmsize/2-1);
  spwoutpre=zeros(1,frmsize/2-1);
  splast1=zeros(1,frmsize/2-1);
  spwoutpre1=zeros(1,frmsize/2-1);
%caculate all frames
for i=1:frmcnt
[win,win_length]=window(fr(i,:));
lina=covariance(poles_num,win_length,win);
ha=hAInverse(lina,poles_num,frmsize);
inA=amplitude(fr(i,:),frmsize,ha,0);
inlocation=location(inA,fr(i,:),frmsize);
loa=inlocation;
A1=zeros(1,10);
N1=zeros(1,10);
for k=1:10
    A1(k)=amplitude(fr(i,:),frmsize,ha,loa);
    N1(k)=location(A1(k),fr(i,:),frmsize);
    loa=N1(k);
    
end
    codeA(:,i)=A1';
    codeN(:,i)=N1';

pitch_marks = find_pmark(fr(i,:))
STErrorFrame=STErrorPredict(lina,poles_num,win_length,fr(i,:),frmsize);
[v,bvalue]=LTermPrediction(errorpre,STErrorFrame,fr(i,:),frmsize,pitch_marks);%save all parameter and input to VQ
btotal(1,i)=bvalue;
pitchtotal(1,i)=pitch_marks;
vtotal(i,:)=v;
linatotal(:,i)=lina;


errorpre=STErrorFrame;
%combine each frame to a intergral signal

end
   % VQ process
   % define the code number 
   pitchCodeNum=8;%boundary [1,276] ,use[0,256]
   bvalueCodeNum=15;%[-1.2097,0.9884],use[-1.5000,1.5000]
   vCodeNum=12;%[-0.1132,0.1029],use[-0.1500,0.1500]
   linaCodeNum=16;%[-3.0848,2.8283],use[-3.2000,3.2000]
   nkCodeNum=9;%[1,320],[1,320]
   AkCodeNum=6;%[-0.0032,0.0026],[-0.0032,0.0032]
   % define the coding boundary
   pitchCodeBoundary=[20,276];
   bvalueCodeBoundary=[-1.5000,1.5000];
   vCodeBoundary=[-0.1500,0.1500];
   linaCodeBoundary=[-3.2000,3.2000];
   nkCodeBoundary=[1,320];
   AkCodeBoundary=[-0.0033,0.0033];
   
   [maxA,minA]=updownbound(codeA,10,frmcnt);
   [maxN,minN]=updownbound(codeN,10,frmcnt);
   

    AcodeBook=VQcode(AkCodeNum,AkCodeBoundary,codeA,10,frmcnt,'AcodeBook.txt');
    NcodeBook=VQcode(nkCodeNum,nkCodeBoundary,codeN,10,frmcnt,'NcodeBook.txt');
   pitchcodeBook=VQcode(pitchCodeNum,pitchCodeBoundary,pitchtotal,1,frmcnt,'pitchcodeBook.txt');
   bcodeBook=VQcode(bvalueCodeNum,bvalueCodeBoundary,btotal,1,frmcnt,'bcodeBook.txt');
   vcodeBook=VQcode(vCodeNum,vCodeBoundary,vtotal,frmcnt,frmsize,'vcodeBook.txt');
   linacodeBook=VQcode(linaCodeNum,linaCodeBoundary,linatotal,poles_num,frmcnt,'linacodeBook.txt');
   % VQ decode
   pitchVQdecode=VQdecode(pitchCodeNum,pitchCodeBoundary,1,frmcnt,'pitchcodeBook.txt')
   bVQdecode=VQdecode(bvalueCodeNum,bvalueCodeBoundary,1,frmcnt,'bcodeBook.txt')
   vVQdecode=VQdecode(vCodeNum,vCodeBoundary,frmcnt,frmsize,'vcodeBook.txt')
   linadecode=VQdecode(linaCodeNum,linaCodeBoundary,poles_num,frmcnt,'linacodeBook.txt')
   AdecodeBook=VQdecode(AkCodeNum,AkCodeBoundary,10,frmcnt,'AcodeBook.txt')
   NdecodeBook=VQdecode(nkCodeNum,nkCodeBoundary,10,frmcnt,'NcodeBook.txt')
   for i=1:frmcnt
       
         Ade1=AdecodeBook(:,i);
         Nde1=NdecodeBook(:,i);
         linade=linadecode(:,i);
         s=zeros(1,320);
         out=zeros(1,320);
         ha1=hAInverse(linade,poles_num,frmsize);
          newout=zeros(1,320);
for j=1:320
  for k=1:10
   
       s(j)=s(j)+Ade1(k)*DeltaSdef(j-Nde1(k));
   
   end
   
end
 

out=conv(ha1,s);
newout=out(1:320);


[splast1,spwoutpre1,spwout1]=combine(newout,160,320,i,splast1,spwoutpre1); 
   
   
   
       
   sp=LTermDecode(frmsize,pitchVQdecode(1,i),vVQdecode(i,:),bVQdecode(1,i),poles_num,linadecode(:,i));
     
   [splast,spwoutpre,spwout]=combine(sp,win_length,frmsize,i,splast,spwoutpre);
       
   
   
   end
   splast=[splast,spwout];
   
   wavwrite(splast,16000,'test4.wav');
%[bBoundary,pitchBoundary,vBoundary,linaBoundary]=findBoundary(btotal,pitchTotal,vtotal,linatotal,frmcnt,frmsize,poles_num)

%wavwrite(x,16000,'C:\Documents and Settings\zcl\桌面\project\TDPSOLA的matlab代码\original.wav');
  
     
     splast1=[splast1,spwout1];
     wavwrite(splast1,fs,'new4.wav');
     figure(1);
     plot(splast1);






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -