Class: WSK::FFT::FFTComputing
- Inherits:
-
Object
- Object
- WSK::FFT::FFTComputing
- Defined in:
- lib/WSK/FFT.rb
Instance Method Summary collapse
-
#completeFFT(iRawBuffer, iNbrSamples) ⇒ Object
Add FFT coefficients based on a buffer.
-
#getFFTProfile ⇒ Object
Get the resulting FFT profile.
-
#initialize(iUseTrigoCache, iHeader) ⇒ FFTComputing
constructor
Constructor The trigo cache is VERY useful when several FFT of the same length are computed.
-
#resetData ⇒ Object
Reset the cos and sin arrays.
Constructor Details
#initialize(iUseTrigoCache, iHeader) ⇒ FFTComputing
Constructor The trigo cache is VERY useful when several FFT of the same length are computed.
- Parameters
-
iUseTrigoCache (Boolean): Do we use the trigonometric cache ?
-
iHeader (WSK::Model::Header): Header of the data we will perform FFT on.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/WSK/FFT.rb', line 43 def initialize(iUseTrigoCache, iHeader) @UseTrigoCache, @Header = iUseTrigoCache, iHeader require 'WSK/FFTUtils/FFTUtils' @FFTUtils = FFTUtils::FFTUtils.new # Initialize FFT utils objects @W = @FFTUtils.createWi(FREQINDEX_FIRST, FREQINDEX_LAST, @Header.SampleRate) @NbrFreq = FREQINDEX_LAST - FREQINDEX_FIRST + 1 if (@UseTrigoCache) # Initialize the cache of trigonometric values if not done already if ((defined?(@@TrigoCacheSampleRate) == nil) or (@@TrigoCacheSampleRate != @Header.SampleRate)) @@TrigoCacheSampleRate = @Header.SampleRate @@TrigoCache = @FFTUtils.initTrigoCache(@W, @NbrFreq, @Header.SampleRate/FFTSAMPLE_FREQ) end end # Initialize the cos and sin arrays resetData end |
Instance Method Details
#completeFFT(iRawBuffer, iNbrSamples) ⇒ Object
Add FFT coefficients based on a buffer
- Parameters
-
iRawBuffer (String): The raw buffer
-
iNbrSamples (Integer): Number of samples to take from this buffer to compute the FFT
74 75 76 77 78 79 80 81 |
# File 'lib/WSK/FFT.rb', line 74 def completeFFT(iRawBuffer, iNbrSamples) if (@UseTrigoCache) @FFTUtils.completeSumCosSin(iRawBuffer, @NbrSamples, @Header.NbrBitsPerSample, iNbrSamples, @Header.NbrChannels, @NbrFreq, nil, @@TrigoCache, @SumCos, @SumSin) else @FFTUtils.completeSumCosSin(iRawBuffer, @NbrSamples, @Header.NbrBitsPerSample, iNbrSamples, @Header.NbrChannels, @NbrFreq, @W, nil, @SumCos, @SumSin) end @NbrSamples += iNbrSamples end |
#getFFTProfile ⇒ Object
Get the resulting FFT profile
- Return
-
[Integer,Integer,list<list<Integer>>]: Number of bits per sample, number of samples, list of FFT coefficients, per frequency, per channel
87 88 89 |
# File 'lib/WSK/FFT.rb', line 87 def getFFTProfile return [@Header.NbrBitsPerSample, @NbrSamples, @FFTUtils.computeFFT(@Header.NbrChannels, @NbrFreq, @SumCos, @SumSin)] end |
#resetData ⇒ Object
Reset the cos and sin arrays
63 64 65 66 67 |
# File 'lib/WSK/FFT.rb', line 63 def resetData @SumCos = @FFTUtils.initSumArray(@NbrFreq, @Header.NbrChannels) @SumSin = @FFTUtils.initSumArray(@NbrFreq, @Header.NbrChannels) @NbrSamples = 0 end |