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

📄 genhyper.m

📁 我认为很不错的语音处理的matlab源代码
💻 M
📖 第 1 页 / 共 4 页
字号:
sumr(1+2)=one;numr(1+2)=one;denomr(1+2)=one;cnt=sigfig;temp=complex(0.0,0.0);oldtemp=temp;ixcnt=0;rexp=fix(ibit./2);x=rexp.*(sumr(l+1+2)-2);rr10=x.*log2;ir10=fix(rr10);rr10=rr10-ir10;x=rexp.*(sumi(l+1+2)-2);ri10=x.*log2;ii10=fix(ri10);ri10=ri10-ii10;dum1=(abs(sumr(1+2).*rmax.*rmax+sumr(2+2).*rmax+sumr(3+2)).*sign(sumr(-1+2)));dum2=(abs(sumi(1+2).*rmax.*rmax+sumi(2+2).*rmax+sumi(3+2)).*sign(sumi(-1+2)));dum1=dum1.*10.^rr10;dum2=dum2.*10.^ri10;cdum1=complex(dum1,dum2);x=rexp.*(denomr(l+1+2)-2);rr10=x.*log2;ir10=fix(rr10);rr10=rr10-ir10;x=rexp.*(denomi(l+1+2)-2);ri10=x.*log2;ii10=fix(ri10);ri10=ri10-ii10;dum1=(abs(denomr(1+2).*rmax.*rmax+denomr(2+2).*rmax+denomr(3+2)).*sign(denomr(-1+2)));dum2=(abs(denomi(1+2).*rmax.*rmax+denomi(2+2).*rmax+denomi(3+2)).*sign(denomi(-1+2)));dum1=dum1.*10.^rr10;dum2=dum2.*10.^ri10;cdum2=complex(dum1,dum2);temp=cdum1./cdum2;%%     130 IF (IP .GT. 0) THENgoon1=1;while (goon1==1); goon1=0; if (ip<0) ;  if (sumr(1+2)<half) ;   mx1=sumi(l+1+2);  elseif (sumi(1+2)<half);   mx1=sumr(l+1+2);  else;   mx1=max([sumr(l+1+2),sumi(l+1+2)]);  end;  if (numr(1+2)<half) ;   mx2=numi(l+1+2);  elseif (numi(1+2)<half);   mx2=numr(l+1+2);  else;   mx2=max([numr(l+1+2),numi(l+1+2)]);  end;  if (mx1-mx2>2.0) ;   if (creal>=0.0) ;    %        write (6,*) ' cdabs(temp1/cnt)=',cdabs(temp1/cnt)    %    if (abs(temp1./cnt)<=one) ;     [sumr,sumi,denomr,denomi,final,l,lnpfq,rmax,ibit]=arydiv(sumr,sumi,denomr,denomi,final,l,lnpfq,rmax,ibit);     hyper=final;     return;    end;   end;  end; else;  [sumr,sumi,denomr,denomi,temp,l,lnpfq,rmax,ibit]=arydiv(sumr,sumi,denomr,denomi,temp,l,lnpfq,rmax,ibit);  %  %      First, estimate the exponent of the maximum term in the pFq  %      series.  %  expon=0.0;  xl=real(ixcnt);  for i=1 : ip;   expon=expon+real(factor(a(i)+xl-one))-real(factor(a(i)-one));  end;  for i=1 : iq;   expon=expon-real(factor(b(i)+xl-one))+real(factor(b(i)-one));  end;  expon=expon+xl.*real(log(z))-real(factor(complex(xl,0.0)));  lmax=fix(log10(exp(one)).*expon);  if (abs(oldtemp-temp)<abs(temp.*accy)) ;   [sumr,sumi,denomr,denomi,final,l,lnpfq,rmax,ibit]=arydiv(sumr,sumi,denomr,denomi,final,l,lnpfq,rmax,ibit);   hyper=final;   return;  end;  oldtemp=temp; end; if (ixcnt~=icount) ;  ixcnt=ixcnt+1;  for i1=1 : iq;   %   %      TAKE THE CURRENT SUM AND MULTIPLY BY THE DENOMINATOR OF THE NEXT   %   %      TERM, FOR BOTH THE MOST SIGNIFICANT HALF (CR,CI) AND THE LEAST   %   %      SIGNIFICANT HALF (CR2,CI2).   %   %   [sumr,sumi,cr(i1),ci(i1),qr1,qi1,wk1,wk2,wk3,wk4,wk5,wk6,l,rmax]=cmpmul(sumr,sumi,cr(i1),ci(i1),qr1,qi1,wk1,wk2,wk3,wk4,wk5,wk6,l,rmax);   [sumr,sumi,cr2(i1),ci2(i1),qr2,qi2,wk1,wk2,wk3,wk4,wk5,wk6,l,rmax]=cmpmul(sumr,sumi,cr2(i1),ci2(i1),qr2,qi2,wk1,wk2,wk3,wk4,wk5,wk6,l,rmax);   qr2(l+1+2)=qr2(l+1+2)-1;   qi2(l+1+2)=qi2(l+1+2)-1;   %   %      STORE THIS TEMPORARILY IN THE SUM ARRAYS.   %   %   [qr1,qi1,qr2,qi2,sumr,sumi,wk1,l,rmax]=cmpadd(qr1,qi1,qr2,qi2,sumr,sumi,wk1,l,rmax);  end;  %  %  %     MULTIPLY BY THE FACTORIAL TERM.  %  foo1=sumr;  foo2=sumr;  [foo1,cnt,foo2,wk6,l,rmax]=armult(foo1,cnt,foo2,wk6,l,rmax);  sumr=foo2;  foo1=sumi;  foo2=sumi;  [foo1,cnt,foo2,wk6,l,rmax]=armult(foo1,cnt,foo2,wk6,l,rmax);  sumi=foo2;  %  %     MULTIPLY BY THE SCALING FACTOR, SIGFIG, TO KEEP THE SCALE CORRECT.  %  for i1=1 : ip-iq;   foo1=sumr;   foo2=sumr;   [foo1,sigfig,foo2,wk6,l,rmax]=armult(foo1,sigfig,foo2,wk6,l,rmax);   sumr=foo2;   foo1=sumi;   foo2=sumi;   [foo1,sigfig,foo2,wk6,l,rmax]=armult(foo1,sigfig,foo2,wk6,l,rmax);   sumi=foo2;  end;  for i1=1 : iq;   %   %      UPDATE THE DENOMINATOR.   %   %   [denomr,denomi,cr(i1),ci(i1),qr1,qi1,wk1,wk2,wk3,wk4,wk5,wk6,l,rmax]=cmpmul(denomr,denomi,cr(i1),ci(i1),qr1,qi1,wk1,wk2,wk3,wk4,wk5,wk6,l,rmax);   [denomr,denomi,cr2(i1),ci2(i1),qr2,qi2,wk1,wk2,wk3,wk4,wk5,wk6,l,rmax]=cmpmul(denomr,denomi,cr2(i1),ci2(i1),qr2,qi2,wk1,wk2,wk3,wk4,wk5,wk6,l,rmax);   qr2(l+1+2)=qr2(l+1+2)-1;   qi2(l+1+2)=qi2(l+1+2)-1;   [qr1,qi1,qr2,qi2,denomr,denomi,wk1,l,rmax]=cmpadd(qr1,qi1,qr2,qi2,denomr,denomi,wk1,l,rmax);  end;  %  %  %     MULTIPLY BY THE FACTORIAL TERM.  %  foo1=denomr;  foo2=denomr;  [foo1,cnt,foo2,wk6,l,rmax]=armult(foo1,cnt,foo2,wk6,l,rmax);  denomr=foo2;  foo1=denomi;  foo2=denomi;  [foo1,cnt,foo2,wk6,l,rmax]=armult(foo1,cnt,foo2,wk6,l,rmax);  denomi=foo2;  %  %     MULTIPLY BY THE SCALING FACTOR, SIGFIG, TO KEEP THE SCALE CORRECT.  %  for i1=1 : ip-iq;   foo1=denomr;   foo2=denomr;   [foo1,sigfig,foo2,wk6,l,rmax]=armult(foo1,sigfig,foo2,wk6,l,rmax);   denomr=foo2;   foo1=denomi;   foo2=denomi;   [foo1,sigfig,foo2,wk6,l,rmax]=armult(foo1,sigfig,foo2,wk6,l,rmax);   denomi=foo2;  end;  %  %     FORM THE NEXT NUMERATOR TERM BY MULTIPLYING THE CURRENT  %     NUMERATOR TERM (AN ARRAY) WITH THE A ARGUMENT (A SCALAR).  %  for i1=1 : ip;   [numr,numi,ar(i1),ai(i1),qr1,qi1,wk1,wk2,wk3,wk4,wk5,wk6,l,rmax]=cmpmul(numr,numi,ar(i1),ai(i1),qr1,qi1,wk1,wk2,wk3,wk4,wk5,wk6,l,rmax);   [numr,numi,ar2(i1),ai2(i1),qr2,qi2,wk1,wk2,wk3,wk4,wk5,wk6,l,rmax]=cmpmul(numr,numi,ar2(i1),ai2(i1),qr2,qi2,wk1,wk2,wk3,wk4,wk5,wk6,l,rmax);   qr2(l+1+2)=qr2(l+1+2)-1;   qi2(l+1+2)=qi2(l+1+2)-1;   [qr1,qi1,qr2,qi2,numr,numi,wk1,l,rmax]=cmpadd(qr1,qi1,qr2,qi2,numr,numi,wk1,l,rmax);  end;  %  %     FINISH THE NEW NUMERATOR TERM BY MULTIPLYING BY THE Z ARGUMENT.  %  [numr,numi,xr,xi,qr1,qi1,wk1,wk2,wk3,wk4,wk5,wk6,l,rmax]=cmpmul(numr,numi,xr,xi,qr1,qi1,wk1,wk2,wk3,wk4,wk5,wk6,l,rmax);  [numr,numi,xr2,xi2,qr2,qi2,wk1,wk2,wk3,wk4,wk5,wk6,l,rmax]=cmpmul(numr,numi,xr2,xi2,qr2,qi2,wk1,wk2,wk3,wk4,wk5,wk6,l,rmax);  qr2(l+1+2)=qr2(l+1+2)-1;  qi2(l+1+2)=qi2(l+1+2)-1;  [qr1,qi1,qr2,qi2,numr,numi,wk1,l,rmax]=cmpadd(qr1,qi1,qr2,qi2,numr,numi,wk1,l,rmax);  %  %     MULTIPLY BY THE SCALING FACTOR, SIGFIG, TO KEEP THE SCALE CORRECT.  %  for i1=1 : iq-ip;   foo1=numr;   foo2=numr;   [foo1,sigfig,foo2,wk6,l,rmax]=armult(foo1,sigfig,foo2,wk6,l,rmax);   numr=foo2;   foo1=numi;   foo2=numi;   [foo1,sigfig,foo2,wk6,l,rmax]=armult(foo1,sigfig,foo2,wk6,l,rmax);   numi=foo2;  end;  %  %     FINALLY, ADD THE NEW NUMERATOR TERM WITH THE CURRENT RUNNING  %     SUM OF THE NUMERATOR AND STORE THE NEW RUNNING SUM IN SUMR, SUMI.  %  foo1=sumr;  foo2=sumr;  bar1=sumi;  bar2=sumi;  [foo1,bar1,numr,numi,foo2,bar2,wk1,l,rmax]=cmpadd(foo1,bar1,numr,numi,foo2,bar2,wk1,l,rmax);  sumi=bar2;  sumr=foo2;  %  %     BECAUSE SIGFIG REPRESENTS "ONE" ON THE NEW SCALE, ADD SIGFIG  %     TO THE CURRENT COUNT AND, CONSEQUENTLY, TO THE IP ARGUMENTS  %     IN THE NUMERATOR AND THE IQ ARGUMENTS IN THE DENOMINATOR.  %  cnt=cnt+sigfig;  for i1=1 : ip;   ar(i1)=ar(i1)+sigfig;  end;  for i1=1 : iq;   cr(i1)=cr(i1)+sigfig;  end;  goon1=1; end;end;[sumr,sumi,denomr,denomi,final,l,lnpfq,rmax,ibit]=arydiv(sumr,sumi,denomr,denomi,final,l,lnpfq,rmax,ibit);%     write (6,*) 'Number of terms=',ixcnthyper=final;return;%%     ****************************************************************%     *                                                              *%     *                 SUBROUTINE ARADD                             *%     *                                                              *%     *                                                              *%     *  Description : Accepts two arrays of numbers and returns     *%     *    the sum of the array.  Each array is holding the value    *%     *    of one number in the series.  The parameter L is the      *%     *    size of the array representing the number and RMAX is     *%     *    the actual number of digits needed to give the numbers    *%     *    the desired accuracy.                                     *%     *                                                              *%     *  Subprograms called: none                                    *%     *                                                              *%     ****************************************************************%function [a,b,c,z,l,rmax]=aradd(a,b,c,z,l,rmax);%%global  zero   half   one   two   ten   eps;%%%ediff=0;i=0;j=0;%%for i=0 : l+1; z(i+2)=0.0;end;ediff=round(a(l+1+2)-b(l+1+2));if (abs(a(1+2))<half | ediff<=-l) ; for i=-1 : l+1;  c(i+2)=b(i+2); end; if (c(1+2)<half) ;  c(-1+2)=one;  c(l+1+2)=0.0; end; return;else; if (abs(b(1+2))<half | ediff>=l) ;  for i=-1 : l+1;   c(i+2)=a(i+2);  end;  if (c(1+2)<half) ;   c(-1+2)=one;   c(l+1+2)=0.0;  end;  return; else;  z(-1+2)=a(-1+2);  goon300=1;  goon190=1;  if (abs(a(-1+2)-b(-1+2))>=half) ;   goon300=0;   if (ediff>0) ;    z(l+1+2)=a(l+1+2);   elseif (ediff<0);    z(l+1+2)=b(l+1+2);    z(-1+2)=b(-1+2);    goon190=0;   else;    for i=1 : l;     if (a(i+2)>b(i+2)) ;      z(l+1+2)=a(l+1+2);      break;     end;     if (a(i+2)<b(i+2)) ;      z(l+1+2)=b(l+1+2);      z(-1+2)=b(-1+2);      goon190=0;     end;    end;   end;   %  elseif (ediff>0);   z(l+1+2)=a(l+1+2);   for i=l : -1: 1+ediff ;    z(i+2)=a(i+2)+b(i-ediff+2)+z(i+2);    if (z(i+2)>=rmax) ;     z(i+2)=z(i+2)-rmax;     z(i-1+2)=one;    end;   end;   for i=ediff : -1: 1 ;    z(i+2)=a(i+2)+z(i+2);    if (z(i+2)>=rmax) ;     z(i+2)=z(i+2)-rmax;     z(i-1+2)=one;    end;   end;   if (z(0+2)>half) ;    for i=l : -1: 1 ;     z(i+2)=z(i-1+2);    end;    z(l+1+2)=z(l+1+2)+1;    z(0+2)=0.0;   end;  elseif (ediff<0);   z(l+1+2)=b(l+1+2);   for i=l : -1: 1-ediff ;    z(i+2)=a(i+ediff+2)+b(i+2)+z(i+2);    if (z(i+2)>=rmax) ;     z(i+2)=z(i+2)-rmax;     z(i-1+2)=one;    end;   end;   for i=0-ediff : -1: 1 ;    z(i+2)=b(i+2)+z(i+2);    if (z(i+2)>=rmax) ;     z(i+2)=z(i+2)-rmax;     z(i-1+2)=one;    end;   end;   if (z(0+2)>half) ;    for i=l : -1: 1 ;     z(i+2)=z(i-1+2);    end;    z(l+1+2)=z(l+1+2)+one;    z(0+2)=0.0;   end;  else;   z(l+1+2)=a(l+1+2);   for i=l : -1: 1 ;    z(i+2)=a(i+2)+b(i+2)+z(i+2);    if (z(i+2)>=rmax) ;     z(i+2)=z(i+2)-rmax;     z(i-1+2)=one;    end;   end;   if (z(0+2)>half) ;    for i=l : -1: 1 ;     z(i+2)=z(i-1+2);    end;    z(l+1+2)=z(l+1+2)+one;    z(0+2)=0.0;   end;  end;  if (goon300==1) ;   i=i; %here is the line that had a +1 taken from it.   while (z(i+2)<half & i<l+1);    i=i+1;   end;   if (i==l+1) ;    z(-1+2)=one;    z(l+1+2)=0.0;    for i=-1 : l+1;     c(i+2)=z(i+2);    end;    if (c(1+2)<half) ;     c(-1+2)=one;     c(l+1+2)=0.0;    end;    return;   end;   for j=1 : l+1-i;    z(j+2)=z(j+i-1+2);   end;   for j=l+2-i : l;    z(j+2)=0.0;   end;   z(l+1+2)=z(l+1+2)-i+1;   for i=-1 : l+1;    c(i+2)=z(i+2);   end;   if (c(1+2)<half) ;    c(-1+2)=one;    c(l+1+2)=0.0;   end;   return;  end;  %  if (goon190==1) ;   if (ediff>0) ;    for i=l : -1: 1+ediff ;     z(i+2)=a(i+2)-b(i-ediff+2)+z(i+2);     if (z(i+2)<0.0) ;      z(i+2)=z(i+2)+rmax;      z(i-1+2)=-one;     end;    end;    for i=ediff : -1: 1 ;     z(i+2)=a(i+2)+z(i+2);     if (z(i+2)<0.0) ;      z(i+2)=z(i+2)+rmax;      z(i-1+2)=-one;     end;    end;   else;    for i=l : -1: 1 ;     z(i+2)=a(i+2)-b(i+2)+z(i+2);     if (z(i+2)<0.0) ;      z(i+2)=z(i+2)+rmax;      z(i-1+2)=-one;     end;    end;   end;   if (z(1+2)>half) ;    for i=-1 : l+1;     c(i+2)=z(i+2);    end;    if (c(1+2)<half) ;     c(-1+2)=one;     c(l+1+2)=0.0;    end;    return;   end;   i=1;   i=i+1;   while (z(i+2)<half & i<l+1);    i=i+1;   end;   if (i==l+1) ;    z(-1+2)=one;    z(l+1+2)=0.0;    for i=-1 : l+1;     c(i+2)=z(i+2);    end;    if (c(1+2)<half) ;     c(-1+2)=one;     c(l+1+2)=0.0;    end;    return;   end;   for j=1 : l+1-i;    z(j+2)=z(j+i-1+2);   end;   for j=l+2-i : l;    z(j+2)=0.0;   end;   z(l+1+2)=z(l+1+2)-i+1;   for i=-1 : l+1;    c(i+2)=z(i+2);   end;   if (c(1+2)<half) ;    c(-1+2)=one;    c(l+1+2)=0.0;   end;   return;  end; end; % if (ediff<0) ;  for i=l : -1: 1-ediff ;   z(i+2)=b(i+2)-a(i+ediff+2)+z(i+2);   if (z(i+2)<0.0) ;    z(i+2)=z(i+2)+rmax;    z(i-1+2)=-one;   end;  end;  for i=0-ediff : -1: 1 ;   z(i+2)=b(i+2)+z(i+2);   if (z(i+2)<0.0) ;    z(i+2)=z(i+2)+rmax;    z(i-1+2)=-one;   end;  end; else;  for i=l : -1: 1 ;   z(i+2)=b(i+2)-a(i+2)+z(i+2);   if (z(i+2)<0.0) ;    z(i+2)=z(i+2)+rmax;    z(i-1+2)=-one;   end;  end; end;end;%

⌨️ 快捷键说明

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