WAV文件的分段傅立叶分析
由于在实际的应用中,DSP处理的数据长度不可能很大,一般只有1000点左右,因此,当要处理的数据较长时,应采用分段傅立叶变换。
1)用1024点对ding.wav文件进行分段傅立叶变换,再重构与合成
2)用1024点对ding.wav文件进行分段傅立叶变换,再利用傅立叶反变换进行合成
请高手进行帮忙:理解各参数的意义;
完成WAV文件的另一个声道的分段傅立叶分析
[w,fs,bits]=wavread('ding.wav');
v=w(:,1);
k=length(v);
N=1024;
n=ceil(k/N);
z=zeros(n,N);
for i=1:n-1;
z(i,:)=(fft(v((N*(i-1)+1):N*i),N))';
end
z(n,:)=(fft(v(N*(n-1)+1:k),N))';
[x,y]=meshgrid(1:n,1:200);
figure(1),plot3(x,y,abs(z(:,1:200)'));
[m,i]=max(abs(z(:,1:200)'));
[m2,i2]=max(abs(z(:,100:200)'));
i2=i2+100;
t=[1:N]*fs;
for j=1:n;
u(N*j-N+1:N*j)=m(j)*sin(i(j)/N*fs*t)+m2(j)*sin(i2(j)/N*fs*t);
end
u1=u* max(v) / max(m);
figure(2),plot(u1(1:2:k));
for L=2:n;
u(N*L-N+1:N*L)=Linspace(m(L-1),m(L),N).*sin(i(L)/N*fs*t)+...
Linspace(m2(L-1),m2(j),N).*sin(i2(L)/N*fs*t);
end
u2=u* max(v) / max(m);
figure(3),plot(u2(1:2:k));
for s=1:n;
u(N*s-N+1:N*s)=fliplr(real(ifft(z(s,:),N)));
end
figure(4), plot(u);
sound(u1,fs,bits);
pause
sound(u2,fs,bits);
pause
sound(u,fs,bits);
pause
sound(w,fs,bits);
感觉程序有误,请高手解救,和上面是同一个内容的.
[ 本帖最后由 eight 于 2007-11-20 17:24 编辑 ] |