www.pudn.com > voiceprocessingtoolbox.rar > fftApproximate02.m


% This example demos the effect of FFT approximation 
 
[y, fs]=wavread('welcome.wav'); 
x=y(2047:2047+237-1); 
 
figure 
frameSize=length(x); 
 
runNum=3; 
for i=1:runNum, 
	pointNum=ceil(frameSize/(8*runNum)*i);	% Actually 2*pointNum-1 coefs are taken 
	X = fft(x); 
	magX = abs(X); 
 
	remainIndex=[1:pointNum, frameSize-pointNum+2:frameSize]; 
	X2=0*X; 
	X2(remainIndex)=X(remainIndex); 
	x2=ifft(X2); 
	x2=real(x2); 
 
	subplot(3,2,2*i-1); 
	plot(x, '.-'); 
	hold on 
	plot(x2, 'r'); 
	hold off 
	title(sprintf('x[n] and %d-points approximation', 2*pointNum-1)); 
	set(gca, 'xlim', [-inf inf]); 
 
	subplot(3,2,2*i); 
	shiftedMagX=fftshift(magX); 
	plot(shiftedMagX, '.-'); 
	title('DFS of x[n]') 
	hold on 
	temp=ifftshift(1:frameSize); 
	ind=temp(remainIndex); 
	plot(ind, shiftedMagX(ind), 'or'); grid on 
	hold off 
	set(gca, 'xlim', [-inf inf]); 
end