refactoring simulation into functions, about to start C port
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Thu, 31 Jul 2014 08:25:05 +0000 (08:25 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Thu, 31 Jul 2014 08:25:05 +0000 (08:25 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1775 01035d8c-6547-0410-b346-abe4f91aad63

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

index 369b213510a20c3b7ecc04ad912ac68b5fedb2c9..23febbca0d1e050c25e2d2f91a68c30eb687a309 100644 (file)
@@ -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
index 14cc6390e2bfb2d7946d1adaf39db62ea2f77fe0..0d7772e985235c0349b5d11892762e877dff4062 100644 (file)
@@ -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];