Octave sim doing filtering on decimated signal, but down conversion etc still at...
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Thu, 31 Jul 2014 07:55:21 +0000 (07:55 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Thu, 31 Jul 2014 07:55:21 +0000 (07:55 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1774 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/octave/fdmdv.m
codec2-dev/octave/fdmdv_ut.m

index e70ec4273e722c369b1dac679b4ed2312438f893..369b213510a20c3b7ecc04ad912ac68b5fedb2c9 100644 (file)
@@ -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
index b6d685bac83341247ff8f92343418de537adc644..14cc6390e2bfb2d7946d1adaf39db62ea2f77fe0 100644 (file)
@@ -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];