From 0516ac157ec5413634b5a58a0acc02a836cfe426 Mon Sep 17 00:00:00 2001 From: n4hy Date: Sat, 4 Oct 2008 19:01:01 +0000 Subject: [PATCH] completion of adding new filter design interfaces to gr_firdes.i. Still need to add tests to qa code git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@9713 221aa14e-8319-0410-a670-987f0aec2ac5 --- gnuradio-core/src/lib/general/gr_firdes.h | 22 +++- gnuradio-core/src/lib/general/gr_firdes.i | 123 +++++++++++++++++++++- 2 files changed, 138 insertions(+), 7 deletions(-) diff --git a/gnuradio-core/src/lib/general/gr_firdes.h b/gnuradio-core/src/lib/general/gr_firdes.h index 11752dda..49fba799 100644 --- a/gnuradio-core/src/lib/general/gr_firdes.h +++ b/gnuradio-core/src/lib/general/gr_firdes.h @@ -77,12 +77,15 @@ class gr_firdes { * \p transition_width: width of transition band (Hz). * \p attenuation_dB required stopband attenuation * The normalized width of the transition - * band is what sets the number of taps + * band and the required stop band + * attenuation is what sets the number of taps * required. Narrow --> more taps + * More attenuatin --> more taps * \p window_type: What kind of window to use. Determines * maximum attenuation and passband ripple. * \p beta: parameter for Kaiser window */ + static std::vector low_pass_2 (double gain, double sampling_freq, @@ -124,8 +127,10 @@ class gr_firdes { * \p transition_width: width of transition band (Hz). * \p attenuation_dB out of band attenuation * The normalized width of the transition - * band is what sets the number of taps + * band and the required stop band + * attenuation is what sets the number of taps * required. Narrow --> more taps + * More attenuation --> more taps * \p window_type: What kind of window to use. Determines * maximum attenuation and passband ripple. * \p beta: parameter for Kaiser window @@ -174,12 +179,15 @@ class gr_firdes { * \p transition_width: width of transition band (Hz). * \p attenuation_dB out of band attenuation * The normalized width of the transition - * band is what sets the number of taps + * band and the required stop band + * attenuation is what sets the number of taps * required. Narrow --> more taps + * More attenuation --> more taps * \p window_type: What kind of window to use. Determines * maximum attenuation and passband ripple. * \p beta: parameter for Kaiser window */ + static std::vector band_pass_2 (double gain, double sampling_freq, @@ -225,8 +233,10 @@ class gr_firdes { * \p transition_width: width of transition band (Hz). * \p attenuation_dB out of band attenuation * The normalized width of the transition - * band is what sets the number of taps + * band and the required stop band + * attenuation is what sets the number of taps * required. Narrow --> more taps + * More attenuation --> more taps * \p window_type: What kind of window to use. Determines * maximum attenuation and passband ripple. * \p beta: parameter for Kaiser window @@ -277,8 +287,10 @@ class gr_firdes { * \p transition_width: width of transition band (Hz). * \p attenuation_dB out of band attenuation * The normalized width of the transition - * band is what sets the number of taps + * band and the required stop band + * attenuation is what sets the number of taps * required. Narrow --> more taps + * More attenuation --> more taps * \p window_type: What kind of window to use. Determines * maximum attenuation and passband ripple. * \p beta: parameter for Kaiser window diff --git a/gnuradio-core/src/lib/general/gr_firdes.i b/gnuradio-core/src/lib/general/gr_firdes.i index 73becadb..6bf6cb06 100644 --- a/gnuradio-core/src/lib/general/gr_firdes.i +++ b/gnuradio-core/src/lib/general/gr_firdes.i @@ -51,9 +51,10 @@ class gr_firdes { * \p transition_width: width of transition band (Hz). * \p attenuation_dB out of band attenuation * The normalized width of the transition - * band is what sets the number of taps + * band and the required stop band + * attenuation is what sets the number of taps * required. Narrow --> more taps - * \p attenuation_dB The required stop band attenuation in dB + * More attenuation --> more taps * \p window_type: What kind of window to use. Determines * maximum attenuation and passband ripple. * \p beta: parameter for Kaiser window @@ -82,6 +83,7 @@ class gr_firdes { * maximum attenuation and passband ripple. * \p beta: parameter for Kaiser window */ + static std::vector high_pass (double gain, double sampling_freq, @@ -91,6 +93,34 @@ class gr_firdes { double beta = 6.76 // used only with Kaiser ) throw(std::out_of_range); + /*! + * \brief use "window method" to design a high-pass FIR filter + * + * \p gain: overall gain of filter (typically 1.0) + * \p sampling_freq: sampling freq (Hz) + * \p cutoff_freq: center of transition band (Hz) + * \p transition_width: width of transition band (Hz). + * \p attenuation_dB out of band attenuation + * The normalized width of the transition + * band and the required stop band + * attenuation is what sets the number of taps + * required. Narrow --> more taps + * More attenuation --> more taps + * \p window_type: What kind of window to use. Determines + * maximum attenuation and passband ripple. + * \p beta: parameter for Kaiser window + */ + + static std::vector + high_pass_2 (double gain, + double sampling_freq, + double cutoff_freq, // Hz center of transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // out of band attenuation dB + win_type window = WIN_HAMMING, + double beta = 6.76); // used only with Kaiser + + /*! * \brief use "window method" to design a band-pass FIR filter * @@ -106,6 +136,7 @@ class gr_firdes { * maximum attenuation and passband ripple. * \p beta: parameter for Kaiser window */ + static std::vector band_pass (double gain, double sampling_freq, @@ -117,6 +148,35 @@ class gr_firdes { ) throw(std::out_of_range); + /*! + * \brief use "window method" to design a band-pass FIR filter + * + * \p gain: overall gain of filter (typically 1.0) + * \p sampling_freq: sampling freq (Hz) + * \p low_cutoff_freq: center of transition band (Hz) + * \p high_cutoff_freq: center of transition band (Hz) + * \p transition_width: width of transition band (Hz). + * \p attenuation_dB out of band attenuation + * The normalized width of the transition + * band and the required stop band + * attenuation is what sets the number of taps + * required. Narrow --> more taps + * More attenuation --> more taps + * \p window_type: What kind of window to use. Determines + * maximum attenuation and passband ripple. + * \p beta: parameter for Kaiser window + */ + + static std::vector + band_pass_2 (double gain, + double sampling_freq, + double low_cutoff_freq, // Hz beginning transition band + double high_cutoff_freq, // Hz beginning transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // out of band attenuation dB + win_type window = WIN_HAMMING, + double beta = 6.76); // used only with Kaiser + /*! * \brief use "window method" to design a band-reject FIR filter * @@ -144,6 +204,35 @@ class gr_firdes { ) throw(std::out_of_range); + /*! + * \brief use "window method" to design a complex band-pass FIR filter + * + * \p gain: overall gain of filter (typically 1.0) + * \p sampling_freq: sampling freq (Hz) + * \p low_cutoff_freq: center of transition band (Hz) + * \p high_cutoff_freq: center of transition band (Hz) + * \p transition_width: width of transition band (Hz). + * \p attenuation_dB out of band attenuation + * The normalized width of the transition + * band and the required stop band + * attenuation is what sets the number of taps + * required. Narrow --> more taps + * More attenuation --> more taps + * \p window_type: What kind of window to use. Determines + * maximum attenuation and passband ripple. + * \p beta: parameter for Kaiser window + */ + + static std::vector + complex_band_pass_2 (double gain, + double sampling_freq, + double low_cutoff_freq, // Hz beginning transition band + double high_cutoff_freq, // Hz beginning transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // out of band attenuation dB + win_type window = WIN_HAMMING, + double beta = 6.76); // used only with Kaiser + /*! * \brief use "window method" to design a band-reject FIR filter * @@ -170,6 +259,36 @@ class gr_firdes { double beta = 6.76 ) throw(std::out_of_range); + + /*! + * \brief use "window method" to design a band-reject FIR filter + * + * \p gain: overall gain of filter (typically 1.0) + * \p sampling_freq: sampling freq (Hz) + * \p low_cutoff_freq: center of transition band (Hz) + * \p high_cutoff_freq: center of transition band (Hz) + * \p transition_width: width of transition band (Hz). + * \p attenuation_dB out of band attenuation + * The normalized width of the transition + * band and the required stop band + * attenuation is what sets the number of taps + * required. Narrow --> more taps + * More attenuation --> more taps + * \p window_type: What kind of window to use. Determines + * maximum attenuation and passband ripple. + * \p beta: parameter for Kaiser window + */ + + static std::vector + band_reject_2 (double gain, + double sampling_freq, + double low_cutoff_freq, // Hz beginning transition band + double high_cutoff_freq, // Hz beginning transition band + double transition_width, // Hz width of transition band + double attenuation_dB, // out of band attenuation dB + win_type window = WIN_HAMMING, + double beta = 6.76); // used only with Kaiser + /*!\brief design a Hilbert Transform Filter * * \p ntaps: Number of taps, must be odd -- 2.47.2