class STFTSpectrogram::Spectrogram
Represents time-frequency spectrogram
Attributes
windows[R]
Public Class Methods
new(audio, window_size, window_overlap)
click to toggle source
# File lib/stft/spectrogram.rb, line 9 def initialize(audio, window_size, window_overlap) if window_size <= window_overlap raise ArgumentError, 'Window size cannot be <= window overlap!' end @windows = [] @transformed = false audio.window_size = window_size audio.window_overlap = window_overlap split_to_windows(audio) audio.reset end
Public Instance Methods
filter(low, high)
click to toggle source
Sets low and high frequency filters
# File lib/stft/spectrogram.rb, line 47 def filter(low, high) @windows.each do |w| w.low = low w.high = high end end
freqs()
click to toggle source
Returns an array with all frequencies
# File lib/stft/spectrogram.rb, line 41 def freqs return [] unless transformed? @windows[0].freqs end
max_freq()
click to toggle source
Gets the highest frequency
# File lib/stft/spectrogram.rb, line 35 def max_freq return 0 unless transformed? @windows[0].max_freq end
transform!()
click to toggle source
Performs FFT
on all timed data windows
# File lib/stft/spectrogram.rb, line 29 def transform! @windows.each(&:do_fft!) @transformed = true end
transformed?()
click to toggle source
Returns true if FFT
was already performed
# File lib/stft/spectrogram.rb, line 55 def transformed? @transformed end
Private Instance Methods
split_to_windows(audio)
click to toggle source
# File lib/stft/spectrogram.rb, line 22 def split_to_windows(audio) until audio.end? @windows.push(STFTSlice.new(audio.next_window, audio.current_time)) end end