Class: Digiproc::BandstopFilter
- Inherits:
-
DigitalFilter
- Object
- DigitalFilter
- Digiproc::BandstopFilter
- Defined in:
- lib/filters/bandstop_filter.rb
Overview
Creates a bandstop filter via the Windowing Method
Constant Summary
Constants inherited from DigitalFilter
Instance Attribute Summary collapse
-
#equation ⇒ Object
Returns the value of attribute equation.
Attributes inherited from DigitalFilter
#fft, #size, #weights, #window
Instance Method Summary collapse
-
#initialize(size:, window: RectangularWindow, wo: nil, bw: nil, wlp_upper: nil, whp_lower: nil, correct: true) ⇒ BandstopFilter
constructor
Inputs size:: [Integer] number of datapoints window should be window:: [Digiproc::WindowStrategy] desired window strategy wo:: [Float] center frequency in radians bw:: [Float] bandwidth in radians wlp_upper:: [Float] Upper frequency limit (radians) of the lowpass passband whp_lower:: [Float] Lower frequency limit (radians) of the highpass passband correct:: [Boolean] perform frequency corrections to make frequency points more accurate.
Methods inherited from DigitalFilter
#calculate_ideal, #set_fft_size, #to_ds
Constructor Details
#initialize(size:, window: RectangularWindow, wo: nil, bw: nil, wlp_upper: nil, whp_lower: nil, correct: true) ⇒ BandstopFilter
Inputs
- size
- Integer
-
number of datapoints window should be
- window
- Digiproc::WindowStrategy
-
desired window strategy
- wo
- Float
-
center frequency in radians
- bw
- Float
-
bandwidth in radians
- wlp_upper
- Float
-
Upper frequency limit (radians) of the lowpass passband
- whp_lower
- Float
-
Lower frequency limit (radians) of the highpass passband
- correct
- Boolean
-
perform frequency corrections to make frequency points more accurate. Defaults to true
Must have either ‘wo` and `bw` or `wlp_upper` and `whp_lower` For wo and bw, include the “don’t care” areas in the bandstop area
Digiproc::BandpassFilter.new(size: 1000, wo: Math::PI / 4, bw: Math::PI / 10)
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/filters/bandstop_filter.rb', line 22 def initialize(size:, window: RectangularWindow, wo: nil, bw: nil, wlp_upper: nil , whp_lower: nil, correct: true ) super(size: size, window: window) if !!wo && !!bw bw += (@window.transition_width * 2 * PI) wlp_upper = wo - bw / 2.0 whp_lower = wo + bw / 2.0 else raise ArgumentError.new("You must provide either bandwidth and center freq or frequency bands") if wlp_upper.nil? or whp_lower.nil? wlp_upper += @window.transition_width * PI if correct whp_lower -= @window.transition_width * PI if correct end @equation = ->(n){ n == 0 ? (wlp_upper / PI) + (( PI - whp_lower )/ PI ) : ((Math.sin(wlp_upper * n) - Math.sin(whp_lower * n)) / (PI * n)) } ideal_filter = calculate_ideal @weights = self.window.values.times ideal_filter @fft = FFT.new(data: self.weights) @fft.calculate end |
Instance Attribute Details
#equation ⇒ Object
Returns the value of attribute equation.
6 7 8 |
# File 'lib/filters/bandstop_filter.rb', line 6 def equation @equation end |