X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=gnuradio-core%2Fsrc%2Flib%2Fgeneral%2Fqa_gr_firdes.cc;h=771249b2c59362e338d592b055a6e1f35d7ef9d8;hb=c9ad0211dac1721ec3f834bb14e71ca50e801721;hp=be4b832ee14ccc151dc6e624977434bc59b779a1;hpb=86f5c92427b3f4bb30536d76cf63c3fca388fb2f;p=debian%2Fgnuradio diff --git a/gnuradio-core/src/lib/general/qa_gr_firdes.cc b/gnuradio-core/src/lib/general/qa_gr_firdes.cc index be4b832e..771249b2 100644 --- a/gnuradio-core/src/lib/general/qa_gr_firdes.cc +++ b/gnuradio-core/src/lib/general/qa_gr_firdes.cc @@ -6,7 +6,7 @@ * * GNU Radio is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) + * the Free Software Foundation; either version 3, or (at your option) * any later version. * * GNU Radio is distributed in the hope that it will be useful, @@ -33,6 +33,7 @@ using std::vector; +#if 0 static void print_taps (std::ostream &s, vector &v) { @@ -41,6 +42,7 @@ print_taps (std::ostream &s, vector &v) printf ("tap[%2d] = %16.7e\n", i, v[i]); } } +#endif static void check_symmetry (vector &v) @@ -275,6 +277,211 @@ const static float t3_exp[107] = { }; +const static float t4_exp[] = { // low pass + 0.001059958362, +0.0002263929928, +-0.001277606934, +-0.0009675776237, + 0.001592264394, + 0.00243603508, +-0.001451682881, +-0.004769335967, +5.281541594e-18, + 0.007567512803, + 0.003658855334, +-0.009761494584, + -0.01011830103, + 0.009636915289, + 0.0193619132, +-0.004935568199, + -0.03060629964, +-0.007267376408, + 0.04236677289, + 0.03197422624, + -0.05274848267, + -0.0850463286, + 0.05989059806, + 0.31065014, + 0.4370569289, + 0.31065014, + 0.05989059806, + -0.0850463286, + -0.05274848267, + 0.03197422624, + 0.04236677289, +-0.007267376408, + -0.03060629964, +-0.004935568199, + 0.0193619132, + 0.009636915289, + -0.01011830103, +-0.009761494584, + 0.003658855334, + 0.007567512803, +5.281541594e-18, +-0.004769335967, +-0.001451682881, + 0.00243603508, + 0.001592264394, +-0.0009675776237, +-0.001277606934, +0.0002263929928, + 0.001059958362, +}; + + +const static float t5_exp[] = { //high pass +-0.001062123571, +-0.0002268554381, + 0.001280216733, + 0.000969554123, +-0.001595516922, +-0.002441011136, + 0.001454648213, + 0.004779078532, +-5.292330097e-18, +-0.007582970895, + -0.00366632943, + 0.009781434201, + 0.01013896987, +-0.009656600654, + -0.01940146461, + 0.004945650231, + 0.03066881932, + 0.00728222169, + -0.04245331511, + -0.03203954175, + 0.05285623297, + 0.08522006124, + -0.06001294032, + -0.3112847209, + 0.5630782247, + -0.3112847209, + -0.06001294032, + 0.08522006124, + 0.05285623297, + -0.03203954175, + -0.04245331511, + 0.00728222169, + 0.03066881932, + 0.004945650231, + -0.01940146461, +-0.009656600654, + 0.01013896987, + 0.009781434201, + -0.00366632943, +-0.007582970895, +-5.292330097e-18, + 0.004779078532, + 0.001454648213, +-0.002441011136, +-0.001595516922, + 0.000969554123, + 0.001280216733, +-0.0002268554381, +-0.001062123571, +}; + +const static float t6_exp[] = { // bandpass +0.0002809273137, +-0.001047327649, +7.936541806e-05, +-0.0004270860809, +0.0007595835486, +0.0008966081077, +-0.0004236323002, +0.0002423936094, +-0.002212299034, +0.0004807534278, +0.0002620361629, + 0.001443728455, + 0.002229931997, +-0.002720607212, +5.731141573e-05, +-0.004297634587, + 0.001878833398, + 0.003217151389, + 0.001357055153, + 0.003965090029, +-0.008576190099, +-0.0003257228818, +-0.004805727862, + 0.004721920472, + 0.01007549558, +-0.002688719891, + 0.004467967432, + -0.01837076992, +5.119658377e-17, + 0.001125075156, + 0.008071650751, + 0.02113764361, + -0.01602453552, + 0.001618095324, + -0.03004053794, + 0.003163811285, + 0.0219683405, + 0.007950295694, + 0.03682873398, + -0.05142467469, + -0.00794606097, + -0.03965795785, + 0.01544955093, + 0.09681399167, + -0.01610304788, + 0.08297294378, + -0.2811714709, + -0.1094062924, + 0.5275565982, + -0.1094062924, + -0.2811714709, + 0.08297294378, + -0.01610304788, + 0.09681399167, + 0.01544955093, + -0.03965795785, + -0.00794606097, + -0.05142467469, + 0.03682873398, + 0.007950295694, + 0.0219683405, + 0.003163811285, + -0.03004053794, + 0.001618095324, + -0.01602453552, + 0.02113764361, + 0.008071650751, + 0.001125075156, +5.119658377e-17, + -0.01837076992, + 0.004467967432, +-0.002688719891, + 0.01007549558, + 0.004721920472, +-0.004805727862, +-0.0003257228818, +-0.008576190099, + 0.003965090029, + 0.001357055153, + 0.003217151389, + 0.001878833398, +-0.004297634587, +5.731141573e-05, +-0.002720607212, + 0.002229931997, + 0.001443728455, +0.0002620361629, +0.0004807534278, +-0.002212299034, +0.0002423936094, +-0.0004236323002, +0.0008966081077, +0.0007595835486, +-0.0004270860809, +7.936541806e-05, +-0.001047327649, +0.0002809273137, +}; + void qa_gr_firdes::t1 () { @@ -340,5 +547,72 @@ qa_gr_firdes::t3 () void qa_gr_firdes::t4 () +{ + vector taps = + gr_firdes::low_pass_2 ( 1.0, + 8000, + 1750, + 500, + 66, + gr_firdes::WIN_HAMMING); + + // std::cout << "ntaps: " << taps.size () << std::endl; + // print_taps (std::cout, taps); + + CPPUNIT_ASSERT_EQUAL (NELEM (t4_exp), taps.size ()); + for (unsigned int i = 0; i < taps.size (); i++) + CPPUNIT_ASSERT_DOUBLES_EQUAL (t4_exp[i], taps[i], 1e-9); + + + check_symmetry (taps); +} + +void +qa_gr_firdes::t5 () +{ + vector taps = + gr_firdes::high_pass_2 ( 1.0, + 8000, + 1750, + 500, + 66, + gr_firdes::WIN_HAMMING); + + // std::cout << "ntaps: " << taps.size () << std::endl; + // print_taps (std::cout, taps); + + CPPUNIT_ASSERT_EQUAL (NELEM (t5_exp), taps.size ()); + + for (unsigned int i = 0; i < taps.size (); i++) + CPPUNIT_ASSERT_DOUBLES_EQUAL (t5_exp[i], taps[i], 1e-9); + + check_symmetry (taps); +} + +void +qa_gr_firdes::t6 () +{ + vector taps = + gr_firdes::band_pass_2 ( 1.0, + 20e6, + 5.75e6 - (5.28e6/2), + 5.75e6 + (5.28e6/2), + 0.62e6, + 66, + gr_firdes::WIN_HAMMING); + + // std::cout << "ntaps: " << taps.size () << std::endl; + // print_taps (std::cout, taps); + + CPPUNIT_ASSERT_EQUAL (NELEM (t6_exp), taps.size ()); + + for (unsigned int i = 0; i < taps.size (); i++) + CPPUNIT_ASSERT_DOUBLES_EQUAL (t6_exp[i], taps[i], 1e-7); + + check_symmetry (taps); +} + +void +qa_gr_firdes::t7 () { }