Started work on octave FSK modem
authorbaobrien <baobrien@01035d8c-6547-0410-b346-abe4f91aad63>
Fri, 11 Sep 2015 16:59:38 +0000 (16:59 +0000)
committerbaobrien <baobrien@01035d8c-6547-0410-b346-abe4f91aad63>
Fri, 11 Sep 2015 16:59:38 +0000 (16:59 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@2310 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/octave/fsk4.m [new file with mode: 0644]

diff --git a/codec2-dev/octave/fsk4.m b/codec2-dev/octave/fsk4.m
new file mode 100644 (file)
index 0000000..7a63342
--- /dev/null
@@ -0,0 +1,45 @@
+% fsk4.mf
+% 4FSK modem attempt from the DMR spec
+
+graphics_toolkit("gnuplot");
+
+fm;
+
+% Frequency response of the DMR raised cosine filter 
+% from ETSI TS 102 361-1 V2.2.1 page 111
+function r = fsk4_rcf_resp(f)
+    r = 1.0*(f<=1920) - cos((pi*f)/1920).*1.0.*(f>1920 & f<=2880);
+endfunction
+
+%Maximum positive deviation of amy 4FSK symbol
+global fsk4_max_deviation = 1944;
+
+%Deviation of the FSK symbols
+global fsk4_symbols = [-1944 -648 648 1944];
+
+function fsk4_states = fsk4_init(fsk4_states,Rs)
+    global fsk4_max_deviation;
+    global fsk4_symbols;
+
+    Fs = fsk4_states.Fs = 48000;  %Sample rate
+    Rs = fsk4_states.Rs = Rs;     %Symbol rate
+    M = fsk4_states.M = fsk4_states.Fs/fsk4_states.Rs; %Samples per symbol
+    
+    %Set up 4FSK raised cosine filter
+    rf = (0:(Fs/2));
+    tx_filter = fir2(100 ,rf/(Fs/2),fsk4_rcf_resp(rf));
+    fsk4_states.tx_filter = tx_filter;
+    %Set up the 4FSK symbols
+    fsk4_states.symmap = fsk4_symbols / fsk4_max_deviation;
+    
+    fm_states.Ts = M;
+    fm_states.Fs = Fs;
+    fm_states.fc = 0;
+    fm_states.fm_max = fsk4_max_deviation*2;
+    fm_states.fd = fsk4_max_deviation;
+    fm_states.pre_emp = fm_states.de_emp = 0;
+    fm_states.output_filter = 1;
+    fsk4_states.fm_states = analog_fm_init(fm_states);
+
+endfunction 
+