// destroy WLAN framing synchronizer object void wlanframesync_destroy(wlanframesync _q) { #if DEBUG_WLANFRAMESYNC // free debugging objects if necessary if (_q->agc_rx != NULL) agc_crcf_destroy(_q->agc_rx); if (_q->debug_x != NULL) windowcf_destroy(_q->debug_x); if (_q->debug_rssi != NULL) windowf_destroy(_q->debug_rssi); if (_q->debug_framesyms != NULL) windowcf_destroy(_q->debug_framesyms); #endif // free transform object windowcf_destroy(_q->input_buffer); free(_q->X); free(_q->x); FFT_DESTROY_PLAN(_q->fft); // destroy synchronizer objects nco_crcf_destroy(_q->nco_rx); // numerically-controlled oscillator wlan_lfsr_destroy(_q->ms_pilot); // pilot sequence generator // free memory for encoded message free(_q->msg_enc); // free main object memory free(_q); }
void ofdmframesync_destroy(ofdmframesync _q) { #if DEBUG_OFDMFRAMESYNC // destroy debugging objects if (_q->debug_x != NULL) windowcf_destroy(_q->debug_x); if (_q->debug_rssi != NULL) windowf_destroy(_q->debug_rssi); if (_q->debug_framesyms != NULL) windowcf_destroy(_q->debug_framesyms); if (_q->G_hat != NULL) free(_q->G_hat); if (_q->px != NULL) free(_q->px); if (_q->py != NULL) free(_q->py); if (_q->debug_pilot_0 != NULL) windowf_destroy(_q->debug_pilot_0); if (_q->debug_pilot_1 != NULL) windowf_destroy(_q->debug_pilot_1); #endif // free subcarrier type array memory free(_q->p); // free transform object windowcf_destroy(_q->input_buffer); free(_q->X); free(_q->x); FFT_DESTROY_PLAN(_q->fft); // clean up PLCP arrays free(_q->S0); free(_q->s0); free(_q->S1); free(_q->s1); // free gain arrays free(_q->G0); free(_q->G1); free(_q->G); free(_q->B); free(_q->R); // destroy synchronizer objects nco_crcf_destroy(_q->nco_rx); // numerically-controlled oscillator msequence_destroy(_q->ms_pilot); // free main object memory free(_q); }
void ampmodem_destroy(ampmodem _q) { #if DEBUG_AMPMODEM // export output debugging file ampmodem_debug_print(_q, DEBUG_AMPMODEM_FILENAME); // destroy debugging objects windowcf_destroy(_q->debug_x); windowf_destroy(_q->debug_phase_error); windowf_destroy(_q->debug_freq_error); #endif // destroy nco object nco_crcf_destroy(_q->oscillator); // destroy hilbert transform firhilbf_destroy(_q->hilbert); // free main object memory free(_q); }
// destroy frame synchronizer object, freeing all internal memory void gmskframesync_destroy(gmskframesync _q) { #if DEBUG_GMSKFRAMESYNC // destroy debugging objects if (_q->debug_objects_created) { windowcf_destroy(_q->debug_x); windowf_destroy(_q->debug_fi); windowf_destroy(_q->debug_mf); windowf_destroy( _q->debug_framesyms); } #endif // destroy synchronizer objects #if GMSKFRAMESYNC_PREFILTER iirfilt_crcf_destroy(_q->prefilter);// pre-demodulator filter #endif firpfb_rrrf_destroy(_q->mf); // matched filter firpfb_rrrf_destroy(_q->dmf); // derivative matched filter nco_crcf_destroy(_q->nco_coarse); // coarse NCO // preamble detector_cccf_destroy(_q->frame_detector); windowcf_destroy(_q->buffer); free(_q->preamble_pn); free(_q->preamble_rx); // header packetizer_destroy(_q->p_header); free(_q->header_mod); free(_q->header_enc); free(_q->header_dec); // payload packetizer_destroy(_q->p_payload); free(_q->payload_enc); free(_q->payload_dec); // free main object memory free(_q); }
void gmskdem_destroy(gmskdem _q) { #if DEBUG_GMSKDEM // print to external file gmskdem_debug_print(_q, DEBUG_GMSKDEM_FILENAME); // destroy debugging objects windowf_destroy(_q->debug_mfout); #endif // destroy filter object #if GMSKDEM_USE_EQUALIZER eqlms_rrrf_destroy(_q->eq); #else firfilt_rrrf_destroy(_q->filter); #endif // free filter array free(_q->h); // free main object memory free(_q); }
void ofdmoqamframe64sync_destroy(ofdmoqamframe64sync _q) { #if DEBUG_OFDMOQAMFRAME64SYNC ofdmoqamframe64sync_debug_print(_q); windowcf_destroy(_q->debug_x); windowcf_destroy(_q->debug_rxx); windowcf_destroy(_q->debug_rxy); windowcf_destroy(_q->debug_framesyms); windowf_destroy(_q->debug_pilotphase); windowf_destroy(_q->debug_pilotphase_hat); windowf_destroy(_q->debug_rssi); #endif // free analysis filter bank memory objects firpfbch_destroy(_q->ca0); firpfbch_destroy(_q->ca1); free(_q->X0); free(_q->X1); free(_q->Y0); free(_q->Y1); // clean up PLCP arrays free(_q->S0); free(_q->S1); free(_q->S2); free(_q->S1a); free(_q->S1b); // free pilot msequence object memory msequence_destroy(_q->ms_pilot); // free agc | signal detection object memory agc_crcf_destroy(_q->sigdet); // free NCO object memory nco_crcf_destroy(_q->nco_rx); // free auto-correlator memory objects autocorr_cccf_destroy(_q->autocorr); // free cross-correlator memory objects firfilt_cccf_destroy(_q->crosscorr); free(_q->hxy); // free gain arrays free(_q->G0); free(_q->G1); free(_q->G); // free data buffer free(_q->data); // free input buffer windowcf_destroy(_q->input_buffer); nco_crcf_destroy(_q->nco_pilot); pll_destroy(_q->pll_pilot); // free main object memory free(_q); }
// // AUTOTEST: windowf // void autotest_windowf() { float v[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; float *r; // reader pointer float x; // temporary value holder unsigned int i; float test0[10] = {0,0,0,0,0,0,0,0,0,0}; float test1[10] = {0,0,0,0,0,0,1,1,1,1}; float test2[10] = {0,0,1,1,1,1,9,8,7,6}; float test3[10] = {1,1,9,8,7,6,3,3,3,3}; float test4[10] = {7,6,3,3,3,3,5,5,5,5}; float test5[6] = {3,3,5,5,5,5}; float test6[6] = {5,5,5,5,6,7}; float test7[10] = {0,0,0,0,5,5,5,5,6,7}; float test8[10] = {0,0,0,0,0,0,0,0,0,0}; // create window // 0 0 0 0 0 0 0 0 0 0 windowf w = windowf_create(10); windowf_read(w, &r); CONTEND_SAME_DATA(r,test0,10*sizeof(float)); // push 4 elements // 0 0 0 0 0 0 1 1 1 1 windowf_push(w, 1); windowf_push(w, 1); windowf_push(w, 1); windowf_push(w, 1); windowf_read(w, &r); CONTEND_SAME_DATA(r,test1,10*sizeof(float)); // push 4 more elements // 0 0 1 1 1 1 9 8 7 6 windowf_write(w, v, 4); windowf_read(w, &r); CONTEND_SAME_DATA(r,test2,10*sizeof(float)); // push 4 more elements // 1 1 9 8 7 6 3 3 3 3 windowf_push(w, 3); windowf_push(w, 3); windowf_push(w, 3); windowf_push(w, 3); windowf_read(w, &r); CONTEND_SAME_DATA(r,test3,10*sizeof(float)); // test indexing operation windowf_index(w, 0, &x); CONTEND_EQUALITY(x, 1); windowf_index(w, 1, &x); CONTEND_EQUALITY(x, 1); windowf_index(w, 2, &x); CONTEND_EQUALITY(x, 9); windowf_index(w, 3, &x); CONTEND_EQUALITY(x, 8); windowf_index(w, 4, &x); CONTEND_EQUALITY(x, 7); windowf_index(w, 5, &x); CONTEND_EQUALITY(x, 6); windowf_index(w, 6, &x); CONTEND_EQUALITY(x, 3); windowf_index(w, 7, &x); CONTEND_EQUALITY(x, 3); windowf_index(w, 8, &x); CONTEND_EQUALITY(x, 3); windowf_index(w, 9, &x); CONTEND_EQUALITY(x, 3); // push 4 more elements // 7 6 3 3 3 3 5 5 5 5 windowf_push(w, 5); windowf_push(w, 5); windowf_push(w, 5); windowf_push(w, 5); windowf_read(w, &r); CONTEND_SAME_DATA(r,test4,10*sizeof(float)); if (liquid_autotest_verbose) windowf_debug_print(w); // recreate window (truncate to last 6 elements) // 3 3 5 5 5 5 w = windowf_recreate(w,6); windowf_read(w, &r); CONTEND_SAME_DATA(r,test5,6*sizeof(float)); // push 2 more elements // 5 5 5 5 6 7 windowf_push(w, 6); windowf_push(w, 7); windowf_read(w, &r); CONTEND_SAME_DATA(r,test6,6*sizeof(float)); // recreate window (extend to 10 elements) // 0 0 0 0 5 5 5 5 6 7 w = windowf_recreate(w,10); windowf_read(w,&r); CONTEND_SAME_DATA(r,test7,10*sizeof(float)); // reset // 0 0 0 0 0 0 0 0 0 0 windowf_reset(w); windowf_read(w, &r); CONTEND_SAME_DATA(r,test8,10*sizeof(float)); if (liquid_autotest_verbose) { // manual print printf("manual output:\n"); for (i=0; i<10; i++) printf("%6u : %f\n", i, r[i]); windowf_debug_print(w); } windowf_destroy(w); printf("done.\n"); }