在做这个算法的时候我的程序是这样的,但是结果是不对,大家帮忙看看吧,是那里的问题,谢谢了
clear all;
close all;
sp=wavread('a');
N=512;T=fix(length(sp)/N);%分帧
s=zeros(1,N);
h=hanning(N);
sum=0;j=sqrt(-1);
for p=1:T
s=sp((p-1)*N+1:p*N);
for k=1:N
for i=1:N
sum=sum+h(i)*s(i)*exp(-j*2*pi*k*i/N);
end
sum=abs(sum);
x(k)=20*log10(sum);
end
result(:,p)=x';
end
1,在程序中主要的错是sum=0放错了位置,应把该语句放在二层for之间:
for k=1:N
sum=0;
for i=1:N
而在公式中Σ以后的算式实际上就是计算DFT(h*s的DFT),因此计算速度特慢。
2,程序中的DFT运算可用FFT去替代:
for p=1:T
s=sp((p-1)*N+1:p*N);
x=fft(h.*s);
x=20*log10(abs(x));
result(:,p)=x;
end
这样运算速度可快多了,得到是结果是一样的。