|  | 
1/3倍频程程序
| function [fc,yc] = octspectrum(yy,fs,fl,fh) %yy信号;fs采样率;fl为分析频率下限,fh为分析频率上限
 f=[1.00 1.25 1.60 2.00 2.50 3.15 4.00 5.00 6.30 8.00];
 fc0=[f,10*f,10^2*f,10^3*f,10^4*f,10^5*f,10^6*f,10^7*f,10^8*f];
 oc6=2^(1/6);
 index = find(fc0 <= fh & fc0 >= fl);
 fc = fc0(index);
 nc=length(fc);
 n=length(yy);
 nfft=2^nextpow2(n);
 a=fft(yy,nfft);
 for j=1:nc,
 fl=fc(j)/oc6;
 fu=fc(j)*oc6;
 nl=round(fl*nfft/fs+1);
 nu=round(fu*nfft/fs+1);
 b=zeros(1,nfft);
 b(nl:nu)=a(nl:nu);
 b(nfft-nu+1:nfft-nl+1)=a(nfft-nu+1:nfft-nl+1);
 c=ifft(b,nfft);
 %%%计算对应每个中心频率段的有效值,与幅度谱相差3分贝
 yc(j)=sqrt(var(real(c(1:n))));
 end
 return
 | 
 |