From 3a727a2ea1621b35c9c7b4c0a6bf872b0b8f3f64 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Tue, 21 Mar 2017 23:43:05 +0000 Subject: [PATCH] building up simulation to inlude phase and frequency offsets git-svn-id: https://svn.code.sf.net/p/freetel/code@3079 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2-dev/octave/bpsk.m | 55 +++++++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/codec2-dev/octave/bpsk.m b/codec2-dev/octave/bpsk.m index 4e4d3662..2a43d225 100644 --- a/codec2-dev/octave/bpsk.m +++ b/codec2-dev/octave/bpsk.m @@ -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 -- 2.25.1