building up simulation to inlude phase and frequency offsets
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 21 Mar 2017 23:43:05 +0000 (23:43 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 21 Mar 2017 23:43:05 +0000 (23:43 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@3079 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/octave/bpsk.m

index 4e4d366251f9c030d20e5e5db58b0ca407452142..2a43d2252cf93ab0427899076d594a7b57cfa3ae 100644 (file)
@@ -6,12 +6,16 @@
 1;
 
 function sim_out = run_sim(sim_in)
+  Rs = 50;
+
   Nbits = sim_in.Nbits;
   EbNodB = sim_in.EbNodB;
   dbpsk = sim_in.dbpsk;
   verbose = sim_in.verbose;
   m = sim_in.m;
   phase_est_mem = sim_in.phase_est_mem;
+  phase_offset = sim_in.phase_offset;
+  woffset = 2*pi*sim_in.freq_offset_hz/Rs;
 
   tx = zeros(1,Nbits);
   rx = zeros(1,Nbits);
@@ -35,7 +39,8 @@ function sim_out = run_sim(sim_in)
         tx(i) = 1 - 2*tx_bits(i);
       end
 
-      rx(i) = tx(i) + noise(i);
+      rx(i) = tx(i)*exp(j*phase_offset) + noise(i);
+      phase_offset += woffset;
 
       r(2:phase_est_mem) = r(1:phase_est_mem-1);
       r(1) = rx(i);
@@ -73,7 +78,7 @@ function sim_out = run_sim(sim_in)
         if phase_est_mem 
           % modulation strip
           stripped(i) = angle(sum(r(1:phase_est_mem) .^ 2));
-          rx_symb(i) *= exp(-j*stripped(i));
+          rx_symb(i) *= exp(-j*stripped(i)/2);
         end
       end
     end
@@ -100,12 +105,37 @@ endfunction
 function run_curves
   sim_in.verbose = 0;
   sim_in.Nbits = 10000;
-  sim_in.EbNodB = 0:8;
+  sim_in.EbNodB = 0:6;
   sim_in.dbpsk = 0;
   sim_in.m = 2;
+  sim_in.phase_est_mem = 0;
+  sim_in.phase_offset = 0;
 
   bpsk_out = run_sim(sim_in);
 
+  sim_in.phase_offset = pi/4;
+  sim_in.phase_est_mem = 5;
+  bpsk_out_5 = run_sim(sim_in);
+  sim_in.phase_est_mem = 10;
+  bpsk_out_10 = run_sim(sim_in);
+  sim_in.phase_est_mem = 20;
+  bpsk_out_20 = run_sim(sim_in);
+
+  figure(3); clf;
+  semilogy(sim_in.EbNodB, bpsk_out.ber,'b+-;BPSK;');
+  hold on;
+  semilogy(sim_in.EbNodB, bpsk_out_5.ber,'g+-;BPSK 5 pt phase est;');
+  semilogy(sim_in.EbNodB, bpsk_out_10.ber,'c+-;BPSK 10 pt phase est;');
+  semilogy(sim_in.EbNodB, bpsk_out_20.ber,'k+-;BPSK 20 pt phase est;');
+  hold off;
+  xlabel('Eb/No (dB)');
+  ylabel('BER');
+  grid;
+  legend('boxoff');
+  title('Coherent Modn Stripped BPSK');
+  print -depsc bpsk_coherent.eps
+
+#{
   sim_in.dbpsk = 1;
   dbpsk_out_2 = run_sim(sim_in);
 
@@ -114,38 +144,45 @@ function run_curves
   sim_in.m = 4;
   dbpsk_out_4 = run_sim(sim_in);
 
-  figure(3); clf;
+  figure(4); clf;
   semilogy(sim_in.EbNodB, bpsk_out.ber,'b+-;BPSK;');
   hold on;
   semilogy(sim_in.EbNodB, dbpsk_out_2.ber,'g+-;DBPSK m=2;');
   semilogy(sim_in.EbNodB, dbpsk_out_3.ber,'c+-;DBPSK m=3;');
   semilogy(sim_in.EbNodB, dbpsk_out_4.ber,'k+-;DBPSK m=4;');
   hold off;
+  print -depsc dbpsk_ml.eps
+
+  xlabel('Eb/No (dB)');
+  ylabel('BER');
   grid;
   legend('boxoff');
+  title('ML DBPSK');
+#}
 end
 
 
 function run_single
-  sim_in.Nbits = 1000;
-  sim_in.EbNodB = 4;
+  sim_in.Nbits = 100;
+  sim_in.EbNodB = 40;
   sim_in.dbpsk = 0;
   sim_in.m = 2;
   sim_in.phase_est_mem = 10;
   sim_in.verbose = 1;
+  sim_in.phase_offset = pi/4;
+  sim_in.freq_offset_hz = .01;
 
   run_sim(sim_in);
 end
 
+
 format;
 more off;
 rand('seed',1);
 randn('seed',1);
 
 run_single
-
-
-
+%run_curves