instdfft.m
上传用户:haiyisale
上传日期:2013-01-09
资源大小:3246k
文件大小:1k
源码类别:

波变换

开发平台:

Matlab

  1. function [x,t] = instdfft(xhat,lowb,uppb);
  2. %INSTDFFT Inverse non-standard 1-D fast Fourier transform.
  3. %   [X,T] = INSTDFFT(XHAT,LOWB,UPPB) returns the inverse
  4. %   nonstandard FFT of XHAT, on a power-of-2 regular
  5. %   grid (non necessarily integers) on the interval
  6. %   [LOWB,UPPB].
  7. %   Output arguments are X the recovered signal computed
  8. %   on the time interval T given by
  9. %   T = LOWB + [0:n-1]*(UPPB-LOWB)/n, where n is the
  10. %   length of XHAT. Outputs are vectors of length n.
  11. %
  12. %   The length of XHAT must be a power of 2.
  13. %
  14. %   See also FFT, IFFT, NSTDFFT.
  15. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
  16. %   Last Revision: 14-May-2003.
  17. %   Copyright 1995-2004 The MathWorks, Inc.
  18. % $Revision: 1.11.4.2 $
  19. % Check arguments.
  20. n = length(xhat);
  21. if errargt(mfilename,log(n)/log(2),'int'), error('*'), end
  22. if errargt(mfilename,uppb-lowb,'re0'), error('*'), end
  23. % Time grid resolution.
  24. delta = (uppb-lowb)/n;
  25. % Frequency grid.
  26. omega = [-n:2:n-2]/(2*n*delta);
  27. % Transform back xhat to standard fft form.
  28. xhat = fftshift(xhat.*exp(2*pi*i*omega*lowb)/delta);
  29. % Compute standard ifft.
  30. x = ifft(xhat);
  31. % Remove small imaginary parts.
  32. sim = find(imag(x) < sqrt(eps));
  33. if ~isempty(sim), x(sim) = real(x(sim)); end
  34. % Time grid.
  35. t = lowb + [0:n-1]*delta;