00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _GR_FIRDES_H_
00024 #define _GR_FIRDES_H_
00025
00026 #include <vector>
00027 #include <cmath>
00028 #include <gr_complex.h>
00029
00035 class gr_firdes {
00036 public:
00037
00038 enum win_type {
00039 WIN_HAMMING = 0,
00040 WIN_HANN = 1,
00041 WIN_BLACKMAN = 2,
00042 WIN_RECTANGULAR = 3,
00043 WIN_KAISER = 4
00044 };
00045
00046
00047
00048
00063 static std::vector<float>
00064 low_pass (double gain,
00065 double sampling_freq,
00066 double cutoff_freq,
00067 double transition_width,
00068 win_type window = WIN_HAMMING,
00069 double beta = 6.76);
00070
00085 static std::vector<float>
00086 high_pass (double gain,
00087 double sampling_freq,
00088 double cutoff_freq,
00089 double transition_width,
00090 win_type window = WIN_HAMMING,
00091 double beta = 6.76);
00092
00108 static std::vector<float>
00109 band_pass (double gain,
00110 double sampling_freq,
00111 double low_cutoff_freq,
00112 double high_cutoff_freq,
00113 double transition_width,
00114 win_type window = WIN_HAMMING,
00115 double beta = 6.76);
00116
00117
00134 static std::vector<gr_complex>
00135 complex_band_pass (double gain,
00136 double sampling_freq,
00137 double low_cutoff_freq,
00138 double high_cutoff_freq,
00139 double transition_width,
00140 win_type window = WIN_HAMMING,
00141 double beta = 6.76);
00142
00143
00160 static std::vector<float>
00161 band_reject (double gain,
00162 double sampling_freq,
00163 double low_cutoff_freq,
00164 double high_cutoff_freq,
00165 double transition_width,
00166 win_type window = WIN_HAMMING,
00167 double beta = 6.76);
00168
00175 static std::vector<float>
00176 hilbert (unsigned int ntaps = 19,
00177 win_type windowtype = WIN_RECTANGULAR,
00178 double beta = 6.76);
00179
00189 static std::vector<float>
00190 root_raised_cosine (double gain,
00191 double sampling_freq,
00192 double symbol_rate,
00193 double alpha,
00194 int ntaps);
00195
00203 static std::vector<float>
00204 gaussian (double gain,
00205 double spb,
00206 double bt,
00207 int ntaps);
00208
00209
00210 static std::vector<float> window (win_type type, int ntaps, double beta);
00211
00212 private:
00213 static double bessi0(double x);
00214 static void sanity_check_1f (double sampling_freq, double f1,
00215 double transition_width);
00216 static void sanity_check_2f (double sampling_freq, double f1, double f2,
00217 double transition_width);
00218 static void sanity_check_2f_c (double sampling_freq, double f1, double f2,
00219 double transition_width);
00220
00221 static int compute_ntaps (double sampling_freq,
00222 double transition_width,
00223 win_type window_type, double beta);
00224 };
00225
00226 #endif