aboutsummaryrefslogtreecommitdiff
path: root/octave/fsk_lib_ldpc.m
diff options
context:
space:
mode:
Diffstat (limited to 'octave/fsk_lib_ldpc.m')
-rw-r--r--octave/fsk_lib_ldpc.m45
1 files changed, 45 insertions, 0 deletions
diff --git a/octave/fsk_lib_ldpc.m b/octave/fsk_lib_ldpc.m
new file mode 100644
index 0000000..9275636
--- /dev/null
+++ b/octave/fsk_lib_ldpc.m
@@ -0,0 +1,45 @@
+% fsk_lib_ldpc.m
+%
+% Library of common functions used for LDPC coded 4FSK modem experiments
+
+fsk_lib;
+ldpc;
+
+% set up modem waveform, real signal that an pass through a SSB radio
+function [states M] = modem_init(Rs,Fs,df)
+ M = 4;
+ if Rs == 100 P=8; end
+ if Rs == 400 P=10; end;
+ states = fsk_init(Fs,Rs,M,P=10,nsym=100);
+ states.tx_real = 1;
+ states.tx_tone_separation = Rs;
+ if Rs == 100
+ states.ftx = 1500 -2.5*states.tx_tone_separation + states.tx_tone_separation*(1:M);
+ elseif Rs == 400
+ states.ftx = 600 + states.tx_tone_separation*(0:M-1);
+ else
+ disp("unknown symbol rate");
+ end
+ states.fest_fmin = 500;
+ states.fest_fmax = 2500;
+ states.fest_min_spacing = Rs/2;
+ states.df = df;
+
+ states.ber_valid_thresh = 0.1;
+ states.ber_invalid_thresh = 0.2;
+
+ states.amp_scale = 1000;
+end
+
+% set up modem waveform and LPC code
+function [states code_param] = fsk_lib_ldpc_init (HRA, Rs, Fs, df=0, plots=0)
+ [states M] = modem_init(Rs, Fs, df);
+ N = states.N;
+ if plots; states.verbose = 0x4; end
+
+ Hsize=size(HRA);
+ states.rate = (Hsize(2)-Hsize(1))/Hsize(2);
+ code_param = ldpc_init_user(HRA, modulation='FSK', mod_order=states.M, mapping='gray');
+ states.coden = code_param.coded_bits_per_frame;
+ states.codek = code_param.data_bits_per_frame;
+end