fastfft.m
上传用户:lfx970552
上传日期:2022-07-10
资源大小:1k
文件大小:2k
源码类别:

波变换

开发平台:

Others

  1. function [vFrequency, vAmplitude] = fastfft(vData, SampleRate, Plot)
  2. %FASTFFT   Create useful data from an FFT operation.
  3. %   Usage: [vFrequency, vAmplitude] = fastfft(vData, SampleRate, [Plot])
  4. %   
  5. %   (no plot will be shown if the last input == 0 or is not included)
  6. %
  7. %   This function inputs 'vData' as a vector (row or column),
  8. %   'SampleRate' as a number (samples/sec), 'Plot' as anything,
  9. %   and does the following:
  10. %
  11. %     1: Removes the DC offset of the data
  12. %     2: Puts the data through a hanning window
  13. %     3: Calculates the Fast Fourier Transform (FFT)
  14. %     4: Calculates the amplitude from the FFT
  15. %     5: Calculates the frequency scale
  16. %     6: Optionally creates a Bode plot
  17. %
  18. %   Created 7/22/03, Rick Auch, mekaneck@campbellsville.com
  19. %Make vData a row vector
  20. if size(vData,2)==1
  21.     vData = vData';
  22. end
  23. %Calculate number of data points in data
  24. n = length(vData);
  25. %Remove DC Offset
  26. vData = vData - mean(vData);
  27. %Put data through hanning window using hanning subfunction
  28. vData = hanning(vData);
  29. %Calculate FFT
  30. vData = fft(vData);
  31. %Calculate amplitude from FFT (multply by sqrt(8/3) because of effects of hanning window)
  32. vAmplitude = abs(vData)*sqrt(8/3);
  33. %Calculate frequency scale
  34. vFrequency = linspace(0,n-1,n)*(SampleRate/n);
  35. %Limit both output vectors due to Nyquist criterion
  36. DataLimit = ceil(n/2);
  37. vAmplitude = vAmplitude(1:DataLimit);
  38. vFrequency = vFrequency(1:DataLimit);
  39. if exist('Plot', 'var')==1 & Plot~=0
  40.     plot(vFrequency, vAmplitude);
  41.     title('Bode Plot');
  42.     xlabel('Frequency (Hz)');
  43.     ylabel('Amplitude');
  44. end
  45. %------------------------------------------------------------------------------------------
  46. %Hanning Subfunction
  47. function vOutput = hanning(vInput)
  48. % This function takes a vector input and outputs the same vector,
  49. % multiplied by the hanning window function
  50. %Determine the number of input data points
  51. n = length(vInput);
  52. %Initialize the vector
  53. vHanningFunc = linspace(0,n-1,n);
  54. %Calculate the hanning funtion
  55. vHanningFunc = .5*(1-cos(2*pi*vHanningFunc/(n-1)));
  56. %Output the result
  57. vOutput = vInput.*vHanningFunc;