From 0cab363dd278c1bdb24458759a8a6e459253a900 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Thu, 31 Jul 2014 08:25:05 +0000 Subject: [PATCH] refactoring simulation into functions, about to start C port git-svn-id: https://svn.code.sf.net/p/freetel/code@1775 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2-dev/octave/fdmdv.m | 28 +++++++++++++++++++++++----- codec2-dev/octave/fdmdv_ut.m | 19 ++++++------------- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/codec2-dev/octave/fdmdv.m b/codec2-dev/octave/fdmdv.m index 369b2135..23febbca 100644 --- a/codec2-dev/octave/fdmdv.m +++ b/codec2-dev/octave/fdmdv.m @@ -56,8 +56,8 @@ gt_alpha5_root = gen_rn_coeffs(alpha, T, Rs, Nsym, M); global Nrxdec; Nrxdec=31; -global rxec; - rxdec = fir1(Nrxdec-1, 0.25); +global rxdec_coeff; + rxdec_coeff = fir1(Nrxdec-1, 0.25); if 0 % tmp code to plot freq resp. 20dB attn of any aliases should be fine % not real sensitive to in-band attn, e.g. outer tones a dB down should be OK @@ -325,9 +325,27 @@ function rx_filt = rx_filter(rx_baseband, nin) endfunction +% LP filter +/- 1000 Hz, allows us to perfrom rx filtering at a lower rate saving CPU + +function rx_fdm_filter = rxdec_filter(rx_fdm, nin) + global M; + global Nrxdec; + global rxdec_coeff; + global rxdec_lpf_mem; + + rxdec_lpf_mem(1:Nrxdec-1+M-nin) = rxdec_lpf_mem(nin+1:Nrxdec-1+M); + rxdec_lpf_mem(Nrxdec-1+M-nin+1:Nrxdec-1+M) = rx_fdm(1:nin); + + rx_fdm_filter = zeros(1,nin); + for i=1:nin + rx_fdm_filter(i) = rxdec_lpf_mem(i:Nrxdec-1+i) * rxdec_coeff; + end +end + + % Combined down convert and rx filter, more memory efficient but less intuitive design -function rx_filt = down_convert_and_rx_filter(rx_fdm, nin) +function rx_filt = down_convert_and_rx_filter(rx_fdm, nin, dec_rate) global Nc; global M; global P; @@ -372,11 +390,11 @@ function rx_filt = down_convert_and_rx_filter(rx_fdm, nin) rx_baseband(i) = rx_fdm_mem(i)*phase_rx(c)'; end - % now we can filter this carrier's P symbols + % now we can filter this carrier's P symbols. Due to filtering of rx_fdm we can filter at rate at rate M/Q N=M/P; k = 1; for i=1:N:nin - rx_filt(c,k) = (M/Q)*rx_baseband(st+i-1:M/Q:st+i-1+Nfilter-1) * gt_alpha5_root(1:M/Q:length(gt_alpha5_root))'; + rx_filt(c,k) = (M/Q)*rx_baseband(st+i-1:dec_rate:st+i-1+Nfilter-1) * gt_alpha5_root(1:dec_rate:length(gt_alpha5_root))'; k+=1; end end diff --git a/codec2-dev/octave/fdmdv_ut.m b/codec2-dev/octave/fdmdv_ut.m index 14cc6390..0d7772e9 100644 --- a/codec2-dev/octave/fdmdv_ut.m +++ b/codec2-dev/octave/fdmdv_ut.m @@ -12,8 +12,8 @@ fdmdv; % load modem code % Simulation Parameters -------------------------------------- -frames = 100; -EbNo_dB = 6.3; +frames = 20; +EbNo_dB = 63; Foff_hz = -100; modulation = 'dqpsk'; hpa_clip = 150; @@ -194,19 +194,12 @@ for f=1:frames rx_fdm(i) = rx_fdm(i)*foff_phase; end - % LP filter +/- 1000 Hz + rx_fdm_filter = rxdec_filter(rx_fdm, M); - rxdec_lpf_mem(1:Nrxdec-1) = rxdec_lpf_mem(M+1:Nrxdec-1+M); - rxdec_lpf_mem(Nrxdec:Nrxdec-1+M) = rx_fdm; + % TODO: Decimate to rate Q at this point, this will save some more CPU + % in down_convert_and_rx_filter - rx_fdm_filter = zeros(1,M); - for i=1:M - rx_fdm_filter(i) = rxdec_lpf_mem(i:Nrxdec-1+i) * rxdec; - end - - % Decimate to rate Q to reduce CPU load of rx filtering - - rx_filt = down_convert_and_rx_filter(rx_fdm_filter, M); + rx_filt = down_convert_and_rx_filter(rx_fdm_filter, M, M/Q); [rx_symbols rx_timing] = rx_est_timing(rx_filt, M); rx_timing_log = [rx_timing_log rx_timing]; -- 2.25.1