double z_freqz_db(bool hpf, double f, double a, double h, double l) { double wf = f * PI; complex<double> hf; if (!hpf) { hf = h + l * (1 + (1.0 + polar(a, -wf)) / (a + polar(1.0, -wf))); } else { a = 1.0 / a; hf = h + l * (1 - (1.0 + polar(a, -wf)) / (a + polar(1.0, -wf))); } double db = 10.0 * log(magsq(hf)) / log(10.0); return (db); }
void cic_freq(int rate, int order, int pts, double* w, int freq_off, double inc) { double db=0; double sum = 0; double wf = inc*PI/(double)pts; for (int i=0;i<pts;i++) { if (i!=freq_off) sum = (1.0/rate)*sin(0.5*wf*(i-freq_off)*rate)/sin(0.5*wf*(i-freq_off)); else sum = 0; // std::cout << "w1[" << i << "] = " << sum << "\n"; db = 10.0*order*log(magsq(sum))/log(10.0); w[i] = db; } }
void equalizer::update_levels() { for (int i = 0; i < num_bands; i++) { levels[i] = lev_gain * levels[i] + (1 - lev_gain) * magsq(eq[i]); } }
complex<double> sqrt(complex<double> x) { double mag = sqrt(sqrt(magsq(x))); double ang = 0.5*arg(x); // ambiguity return(polar(mag,ang)); }
double Vector3::deg_cosine(Vector3& another) { double d = dot(another); d /= sqrt(magsq()*another.magsq()); return d; }
//******************************************************************************* // Symbol lock detector //******************************************************************************* long qpsk_discriminators::symbol_lock_out() { long sym_lock; sym_lock = magsq(data) - magsq(prev_sam); return(sym_lock); }