Sha256: 6d84f9b58ce3fb0ba4be0c4b05e3ac6ee8d863f7d6142f27361a70ac01c73665

Contents?: true

Size: 1.4 KB

Versions: 7

Compression:

Stored size: 1.4 KB

Contents

## 
# Blackman Window
# Used to improve digital filters by using a non-retangular frequency domain window 
class Digiproc::BlackmanWindow < Digiproc::WindowStrategy

    ##
    # == Input Args
    # size (Optional):: Numeric (default: nil), how many datapoings the window should have
    # norm_trans_freq:: Numeric (default: nil), the desired transition frequency
    # If you know what size of the the window that you need, you can input size without norm_trans_freq
    # If you kow the desired transition frequency, the necessary size will be calculated for you based off of 
    # the window type so it is not necessary to enter the size
    def initialize(size: nil , norm_trans_freq: nil)
        super(size: norm_trans_freq.nil? ? size : find_size(norm_trans_freq))
        #size = @size + 2
        #@equation = lambda { |n| 0.42 - 0.5 * Math.cos(2 * PI * (n + 1) / (size - 1)) + 0.08 * Math.cos(4*PI*(n + 1) / (size - 1)) }
        @equation = lambda { |n| 0.42 - 0.5 * Math.cos(2 * PI * (n) / (size - 1)) + 0.08 * Math.cos(4*PI*(n) / (size - 1)) }
        calculate
        @values = @values.take(@size)
    end

    # Given a freqency, return the required size of a BlackmanWindow
    def find_size(freq)
        size = 5.5 / freq
        make_odd(size.ceil)
    end

    # Return the transition width (in rad/s) based off of the size
    def transition_width
        5.5 / @size
    end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
digiproc-0.2.5 lib/strategies/window/blackman_window.rb
digiproc-0.2.4 lib/strategies/window/blackman_window.rb
digiproc-0.2.3 lib/strategies/window/blackman_window.rb
digiproc-0.2.2 lib/strategies/window/blackman_window.rb
digiproc-0.2.1 lib/strategies/window/blackman_window.rb
digiproc-0.2.0 lib/strategies/window/blackman_window.rb
digiproc-0.1.0 lib/strategies/window/blackman_window.rb