summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gr-fft/lib/window.cc10
-rw-r--r--gr-filter/lib/firdes.cc11
2 files changed, 15 insertions, 6 deletions
diff --git a/gr-fft/lib/window.cc b/gr-fft/lib/window.cc
index 5a28b3239d..1610b46f5d 100644
--- a/gr-fft/lib/window.cc
+++ b/gr-fft/lib/window.cc
@@ -81,7 +81,7 @@ namespace gr {
float M = static_cast<float>(ntaps - 1);
for(int n = 0; n < ntaps; n++)
- taps[n] = c0 - c1*cos((2*M_PI*n)/M) + c2*cos((4*M_PI*n)/M);
+ taps[n] = c0 - c1*cosf((2.0f*M_PI*n)/M) + c2*cosf((4.0f*M_PI*n)/M);
return taps;
}
@@ -92,7 +92,8 @@ namespace gr {
float M = static_cast<float>(ntaps - 1);
for(int n = 0; n < ntaps; n++)
- taps[n] = c0 - c1*cos((2*M_PI*n)/M) + c2*cos((4*M_PI*n)/M) - c3*cos((6*M_PI*n)/M);
+ taps[n] = c0 - c1*cosf((2.0f*M_PI*n)/M) + c2*cosf((4.0f*M_PI*n)/M) \
+ - c3*cosf((6.0f*M_PI*n)/M);
return taps;
}
@@ -103,7 +104,8 @@ namespace gr {
float M = static_cast<float>(ntaps - 1);
for(int n = 0; n < ntaps; n++)
- taps[n] = c0 - c1*cos((2*M_PI*n)/M) + c2*cos((4*M_PI*n)/M) - c3*cos((6*M_PI*n)/M) + c4*cos((8*M_PI*n)/M);
+ taps[n] = c0 - c1*cosf((2.0f*M_PI*n)/M) + c2*cosf((4.0f*M_PI*n)/M) \
+ - c3*cosf((6.0f*M_PI*n)/M) + c4*cosf((8.0f*M_PI*n)/M);
return taps;
}
@@ -224,7 +226,7 @@ namespace gr {
double inm1 = 1.0/((double)(ntaps-1));
double temp;
- for(int i = 0; i <= ntaps; i++) {
+ for(int i = 0; i < ntaps; i++) {
temp = 2*i*inm1 - 1;
taps[i] = Izero(beta*sqrt(1.0-temp*temp)) * IBeta;
}
diff --git a/gr-filter/lib/firdes.cc b/gr-filter/lib/firdes.cc
index 93dfec5bc8..a52a2ddf63 100644
--- a/gr-filter/lib/firdes.cc
+++ b/gr-filter/lib/firdes.cc
@@ -659,14 +659,18 @@ namespace gr {
//
// delta_f / width_factor gives number of taps required.
- static const float width_factor[5] = { // indexed by win_type
+ const int MAX_WIDTH_FACTOR = 8;
+ static const float width_factor[8] = { // indexed by win_type
3.3, // WIN_HAMMING
3.1, // WIN_HANN
5.5, // WIN_BLACKMAN
2.0, // WIN_RECTANGULAR
//5.0 // WIN_KAISER (guesstimate compromise)
//2.0 // WIN_KAISER (guesstimate compromise)
- 10.0 // WIN_KAISER
+ 10.0, // WIN_KAISER
+ 6.0, // WIN_BLACKMAN_HARRIS (est.)
+ 3.0, // WIN_BARTLETT (est.)
+ 5.5, // WIN_FLATTOP (est.)
};
int
@@ -692,6 +696,9 @@ namespace gr {
double delta_f = transition_width / sampling_freq;
// compute number of taps required for given transition width
+ if(window_type >= MAX_WIDTH_FACTOR)
+ throw std::runtime_error("firdes::compute_ntaps: window_type out of range.");
+
int ntaps = (int)(width_factor[window_type] / delta_f + 0.5);
if((ntaps & 1) == 0) // if even...
ntaps++; // ...make odd