void del_lmsr (LMSR lms) { if (lms) { delvec_COMPLEX (lms->delay_line); delvec_COMPLEX (lms->adaptive_filter); safefree ((char *) lms); } }
/* deep-six the filter */ void delFiltOvSv (FiltOvSv p) { if (p) { delvec_COMPLEX (p->zfvec); delvec_COMPLEX (p->zivec); delvec_COMPLEX (p->zovec); delvec_COMPLEX (p->zrvec); fftwf_destroy_plan (p->pfwd); fftwf_destroy_plan (p->pinv); safefree ((char *) p); } }
void delDttSPAgc (DTTSPAGC a) { delCXB (a->buff); delvec_COMPLEX (a->circ); if (a) safefree ((char *) a); }
void delCXB (CXB p) { if (p) { if (CXBmine (p)) delvec_COMPLEX (CXBbase (p)); free ((char *) p); } }
void del_blms (BLMS blms) { if (blms) { fftwf_destroy_plan (blms->Xplan); fftwf_destroy_plan (blms->Yplan); fftwf_destroy_plan (blms->Errhatplan); fftwf_destroy_plan (blms->UPDplan); fftwf_destroy_plan (blms->Wplan); delvec_COMPLEX (blms->update); delvec_COMPLEX (blms->Update); delvec_COMPLEX (blms->What); delvec_COMPLEX (blms->Xhat); delvec_COMPLEX (blms->error); delvec_COMPLEX (blms->Errhat); delvec_COMPLEX (blms->Yhat); delvec_COMPLEX (blms->y); delvec_COMPLEX (blms->delay_line); safefree ((char *) blms); } }
FiltOvSv newFiltOvSv(COMPLEX * coefs, int ncoef, int pbits) { int buflen, fftlen; FiltOvSv p; fftwf_plan pfwd, pinv; COMPLEX *zrvec, *zfvec, *zivec, *zovec; p = (FiltOvSv) safealloc(1, sizeof(filt_ov_sv), "new overlap/save filter"); buflen = nblock2(ncoef - 1), fftlen = 2 * buflen; zrvec = newvec_COMPLEX_fftw(fftlen, "raw signal vec in newFiltOvSv"); zfvec = newvec_COMPLEX_fftw(fftlen, "filter z vec in newFiltOvSv"); zivec = newvec_COMPLEX_fftw(fftlen, "signal in z vec in newFiltOvSv"); zovec = newvec_COMPLEX_fftw(fftlen, "signal out z vec in newFiltOvSv"); /* prepare frequency response from filter coefs */ { int i; COMPLEX *zcvec; fftwf_plan ptmp; zcvec = newvec_COMPLEX(fftlen, "temp filter z vec in newFiltOvSv"); //ptmp = fftw_create_plan(fftlen, FFTW_FORWARD, pbits); ptmp = fftwf_plan_dft_1d(fftlen, (fftwf_complex *) zcvec, (fftwf_complex *) zfvec, FFTW_FORWARD, pbits); #ifdef LHS for (i = 0; i < ncoef; i++) zcvec[i] = coefs[i]; #else for (i = 0; i < ncoef; i++) zcvec[fftlen - ncoef + i] = coefs[i]; #endif //fftw_one(ptmp, (fftw_complex *) zcvec, (fftw_complex *) zfvec); fftwf_execute(ptmp); fftwf_destroy_plan(ptmp); delvec_COMPLEX(zcvec); } /* prepare transforms for signal */ //pfwd = fftw_create_plan(fftlen, FFTW_FORWARD, pbits); //pinv = fftw_create_plan(fftlen, FFTW_BACKWARD, pbits); pfwd = fftwf_plan_dft_1d(fftlen, (fftwf_complex *) zrvec, (fftwf_complex *) zivec, FFTW_FORWARD, pbits); pinv = fftwf_plan_dft_1d(fftlen, (fftwf_complex *) zivec, (fftwf_complex *) zovec, FFTW_BACKWARD, pbits); /* stuff values */ p->buflen = buflen; p->fftlen = fftlen; p->zfvec = zfvec; p->zivec = zivec; p->zovec = zovec; p->zrvec = zrvec; p->pfwd = pfwd; p->pinv = pinv; p->scale = 1.0f / (REAL) fftlen; normalize_vec_COMPLEX (p->zfvec, p->fftlen, p->scale); return p; }