From 1ffc327277510f90edf9ff43127767e5168ec556 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Thu, 31 Jul 2014 07:55:21 +0000 Subject: [PATCH] Octave sim doing filtering on decimated signal, but down conversion etc still at rate M. However this may be fast enough git-svn-id: https://svn.code.sf.net/p/freetel/code@1774 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2-dev/octave/fdmdv.m | 8 ++++++-- codec2-dev/octave/fdmdv_ut.m | 19 ++++++++++++++----- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/codec2-dev/octave/fdmdv.m b/codec2-dev/octave/fdmdv.m index e70ec427..369b2135 100644 --- a/codec2-dev/octave/fdmdv.m +++ b/codec2-dev/octave/fdmdv.m @@ -57,7 +57,7 @@ gt_alpha5_root = gen_rn_coeffs(alpha, T, Rs, Nsym, M); global Nrxdec; Nrxdec=31; global rxec; - rxdec = fir1(Nrxdec, 0.25); + rxdec = 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 @@ -337,6 +337,7 @@ function rx_filt = down_convert_and_rx_filter(rx_fdm, nin) global freq_pol; global Nfilter; global gt_alpha5_root; + global Q; % update memory of rx_fdm @@ -375,7 +376,7 @@ function rx_filt = down_convert_and_rx_filter(rx_fdm, nin) N=M/P; k = 1; for i=1:N:nin - rx_filt(c,k) = rx_baseband(st+i-1:st+i-1+Nfilter-1) * gt_alpha5_root'; + 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))'; k+=1; end end @@ -1151,6 +1152,9 @@ global fbb_phase_tx; fbb_phase_tx = 1; global fbb_phase_rx; fbb_phase_rx = 1; +global rxdec_lpf_mem; + rxdec_lpf_mem = zeros(1,Nrxdec-1+M); +global Q=M/4; % Spread initial FDM carrier phase out as far as possible. This % helped PAPR for a few dB. We don't need to adjust rx phase as DQPSK diff --git a/codec2-dev/octave/fdmdv_ut.m b/codec2-dev/octave/fdmdv_ut.m index b6d685ba..14cc6390 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 = 20; -EbNo_dB = 73; +frames = 100; +EbNo_dB = 6.3; Foff_hz = -100; modulation = 'dqpsk'; hpa_clip = 150; @@ -194,10 +194,19 @@ for f=1:frames rx_fdm(i) = rx_fdm(i)*foff_phase; end - % LP filter - % Decimate to rate M/4 + % LP filter +/- 1000 Hz - rx_filt = down_convert_and_rx_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; + + 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_symbols rx_timing] = rx_est_timing(rx_filt, M); rx_timing_log = [rx_timing_log rx_timing]; -- 2.25.1