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