diff options
Diffstat (limited to 'gr-channels/lib/flat_fader_impl.cc')
-rw-r--r-- | gr-channels/lib/flat_fader_impl.cc | 73 |
1 files changed, 36 insertions, 37 deletions
diff --git a/gr-channels/lib/flat_fader_impl.cc b/gr-channels/lib/flat_fader_impl.cc index 0b4cab2337..47834175f3 100644 --- a/gr-channels/lib/flat_fader_impl.cc +++ b/gr-channels/lib/flat_fader_impl.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2013 Free Software Foundation, Inc. + * Copyright 2016 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -48,7 +48,7 @@ namespace gr { d_table(8*1024), - scale_sin(sqrtf(2.0/d_N)), + scale_sin(sqrtf(1.0/d_N)), scale_los(sqrtf(d_K)/sqrtf(d_K+1)), scale_nlos(1/sqrtf(d_K+1)) { @@ -59,47 +59,47 @@ namespace gr { } } - - gr_complex flat_fader_impl::next_sample(){ - gr_complex H(0,0); - - for(int n=1; n<d_N; n++){ - float alpha_n = (2*M_PI*n - M_PI + d_theta)/(4*d_N); #if FASTSINCOS == 1 - float s_i = scale_sin*gr::fxpt::cos(gr::fxpt::float_to_fixed(2*M_PI*d_fDTs*d_m*gr::fxpt::cos(gr::fxpt::float_to_fixed(alpha_n))+d_psi[n+1])); - float s_q = scale_sin*gr::fxpt::cos(gr::fxpt::float_to_fixed(2*M_PI*d_fDTs*d_m*gr::fxpt::sin(gr::fxpt::float_to_fixed(alpha_n))+d_phi[n+1])); +#define _GRFASTSIN(x) gr::fxpt::sin(gr::fxpt::float_to_fixed(x)) +#define _GRFASTCOS(x) gr::fxpt::cos(gr::fxpt::float_to_fixed(x)) #elif FASTSINCOS == 2 - float s_i = scale_sin*d_table.cos(2*M_PI*d_fDTs*d_m*d_table.cos(alpha_n)+d_psi[n+1]); - float s_q = scale_sin*d_table.cos(2*M_PI*d_fDTs*d_m*d_table.sin(alpha_n)+d_phi[n+1]); - +#define _GRFASTSIN(x) d_table.sin(x) +#define _GRFASTCOS(x) d_table.cos(x) #else - float s_i = scale_sin*cos(2*M_PI*d_fDTs*d_m*cos(alpha_n)+d_psi[n+1]); - float s_q = scale_sin*cos(2*M_PI*d_fDTs*d_m*sin(alpha_n)+d_phi[n+1]); +#define _GRFASTSIN(x) sin(x) +#define _GRFASTCOS(x) cos(x) #endif - H += gr_complex(s_i, s_q); + void flat_fader_impl::next_samples(std::vector<gr_complex> &Hvec, int n_samples){ + Hvec.resize(n_samples); + for(int i = 0; i < n_samples; i++){ + gr_complex H(0,0); + for(int n=1; n<d_N+1; n++){ + float alpha_n = (2*M_PI*n - M_PI + d_theta)/(4*d_N); + d_psi[n] = fmod(d_psi[n] + 2*M_PI*d_fDTs*_GRFASTCOS(alpha_n), 2*M_PI); + d_phi[n] = fmod(d_phi[n] + 2*M_PI*d_fDTs*_GRFASTCOS(alpha_n), 2*M_PI); + float s_i = scale_sin*_GRFASTCOS(d_psi[n]); + float s_q = scale_sin*_GRFASTSIN(d_phi[n]); + H += gr_complex(s_i, s_q); + } + + if(d_LOS){ + d_psi[0] = fmod(d_psi[0] + 2*M_PI*d_fDTs*_GRFASTCOS(d_theta_los), 2*M_PI); + float los_i = scale_los*_GRFASTCOS(d_psi[0]); + float los_q = scale_los*_GRFASTSIN(d_psi[0]); + H = H*scale_nlos + gr_complex(los_i,los_q); + } + + update_theta(); + Hvec[i] = H; } + + } - if(d_LOS){ -#if FASTSINCOS == 1 - float los_i = gr::fxpt::cos(gr::fxpt::float_to_fixed(2*M_PI*d_fDTs*d_m*gr::fxpt::cos(gr::fxpt::float_to_fixed(d_theta_los)) + d_psi[0])); - float los_q = gr::fxpt::sin(gr::fxpt::float_to_fixed(2*M_PI*d_fDTs*d_m*gr::fxpt::cos(gr::fxpt::float_to_fixed(d_theta_los)) + d_psi[0])); -#elif FASTSINCOS == 2 - float los_i = d_table.cos(2*M_PI*d_fDTs*d_m*d_table.cos(d_theta_los) + d_psi[0]); - float los_q = d_table.sin(2*M_PI*d_fDTs*d_m*d_table.cos(d_theta_los) + d_psi[0]); -#else - float los_i = cos(2*M_PI*d_fDTs*d_m*cos(d_theta_los) + d_psi[0]); - float los_q = sin(2*M_PI*d_fDTs*d_m*cos(d_theta_los) + d_psi[0]); -#endif - - H = H*scale_nlos + gr_complex(los_i,los_q)*scale_los; - } - - //out[i] = in[i]*H; - d_m++; - update_theta(); - return H; - + gr_complex flat_fader_impl::next_sample(){ + std::vector<gr_complex> v(1); + next_samples(v,1); + return v[0]; } void flat_fader_impl::update_theta() @@ -114,4 +114,3 @@ namespace gr { } /* namespace channels */ } /* namespace gr */ - |