CXB newCXB (int size, COMPLEX * base, char *tag) { CXB p = (CXB) safealloc (1, sizeof (CXBuffer), tag); if (base) { CXBbase (p) = base; CXBmine (p) = FALSE; } else { CXBbase (p) = newvec_COMPLEX (size, "newCXB"); CXBmine (p) = TRUE; } CXBsize (p) = CXBwant (p) = size; CXBovlp (p) = CXBhave (p) = CXBdone (p) = 0; return p; }
void delCXB (CXB p) { if (p) { if (CXBmine (p)) delvec_COMPLEX (CXBbase (p)); free ((char *) p); } }
void reinit_spectrum (SpecBlock * sb) { size_t polysize = 1; sb->fill = 0; if (sb->polyphase) polysize = 8; memset ((char *) CXBbase (sb->accum), 0, polysize * sb->size * sizeof (REAL)); memset ((char *) sb->output, 0, sb->size * sizeof (float)); memset ((char *) sb->coutput, 0, sb->size * sizeof(COMPLEX)); }
void init_spectrum (SpecBlock * sb) { REAL phase_tmp = 0.0; REAL gain_tmp = 1.0; COMPLEX *p; sb->fill = 0; p = newvec_COMPLEX_fftw(sb->size*16,"spectrum accum"); sb->accum = newCXB (sb->size * 16, p, "spectrum accum"); p = newvec_COMPLEX_fftw(sb->size, "spectrum timebuf"); sb->timebuf = newCXB (sb->size, p, "spectrum timebuf"); p = newvec_COMPLEX_fftw(sb->size, "spectrum timebuf"); sb->freqbuf = newCXB (sb->size, p, "spectrum freqbuf"); sb->window = newvec_REAL (sb->size * 16, "spectrum window"); makewindow (BLACKMANHARRIS_WINDOW, sb->size, sb->window); sb->mask = sb->size - 1; sb->polyphase = FALSE; sb->output = (float *) safealloc (sb->size, sizeof (float), "spectrum output"); sb->coutput = (COMPLEX *)safealloc (sb->size, sizeof (COMPLEX), "spectrum output");; sb->plan = fftwf_plan_dft_1d (sb->size, (fftwf_complex *) CXBbase (sb->timebuf), (fftwf_complex *) CXBbase (sb->freqbuf), FFTW_FORWARD, sb->planbits); sb->iqfix = newCorrectIQspec2(); // SV1EIA AIR sb->iqfix->buffer_counter = 0; // SV1EIA AIR sb->iqfix->im_max_actual = 0; // SV1EIA AIR sb->iqfix->im_max_test = 0; // SV1EIA AIR sb->iqfix->im_min_actual = 0; // SV1EIA AIR sb->iqfix->im_min_test = 0; // SV1EIA AIR sb->iqfix->re_max_actual = 0; // SV1EIA AIR sb->iqfix->re_max_test = 0; // SV1EIA AIR sb->iqfix->re_min_actual = 0; // SV1EIA AIR sb->iqfix->re_min_test = 0; // SV1EIA AIR }
void init_spectrum (SpecBlock * sb) { COMPLEX *p; sb->fill = 0; p = newvec_COMPLEX_16(sb->size*16,"spectrum accum"); sb->accum = newCXB (sb->size * 16, p, "spectrum accum"); p = newvec_COMPLEX_16(sb->size, "spectrum timebuf"); sb->timebuf = newCXB (sb->size, p, "spectrum timebuf"); p = newvec_COMPLEX_16(sb->size, "spectrum timebuf"); sb->freqbuf = newCXB (sb->size, p, "spectrum freqbuf"); sb->window = newvec_REAL (sb->size * 16, "spectrum window"); makewindow (BLACKMANHARRIS_WINDOW, sb->size, sb->window); sb->mask = sb->size - 1; sb->polyphase = FALSE; sb->output = (float *) safealloc (sb->size, sizeof (float), "spectrum output"); sb->coutput = (COMPLEX *)safealloc (sb->size, sizeof (COMPLEX), "spectrum output");; sb->plan = fftwf_plan_dft_1d (sb->size, (fftwf_complex *) CXBbase (sb->timebuf), (fftwf_complex *) CXBbase (sb->freqbuf), FFTW_FORWARD, sb->planbits); }
WSCompander newWSCompander (int npts, REAL fac, CXB buff) { WSCompander wsc; wsc = (WSCompander) safealloc (1, sizeof (WSCompanderInfo), "WSCompander struct"); wsc->npts = npts; wsc->nend = npts - 1; wsc->tbl = newvec_REAL (npts, "WSCompander table"); wsc->buff = newCXB (CXBsize (buff), CXBbase (buff), "WSCompander buff"); WSCReset (wsc, fac); return wsc; }
LMSR new_lmsr (CXB signal, int delay, REAL adaptation_rate, REAL leakage, int adaptive_filter_size, int filter_type) { LMSR lms = (LMSR) safealloc (1, sizeof (_lmsstate), "new_lmsr state"); lms->signal = newCXB(signal->size,CXBbase(signal),"lmadf CXB"); lms->signal_size = CXBsize (lms->signal); lms->delay = delay; lms->size = 4096; lms->mask = lms->size - 1; lms->delay_line = newvec_COMPLEX (lms->size, "lmsr delay"); lms->adaptation_rate = adaptation_rate; lms->leakage = leakage; lms->adaptive_filter_size = adaptive_filter_size; lms->adaptive_filter = newvec_COMPLEX (128, "lmsr filter"); lms->filter_type = filter_type; lms->delay_line_ptr = 0; return lms; }