From: baobrien Date: Fri, 11 Sep 2015 16:59:38 +0000 (+0000) Subject: Started work on octave FSK modem X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=bf8d5eedf7772a799dd2ff98b27b8ac141b3a51e;p=freetel-svn-tracking.git Started work on octave FSK modem git-svn-id: https://svn.code.sf.net/p/freetel/code@2310 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/codec2-dev/octave/fsk4.m b/codec2-dev/octave/fsk4.m new file mode 100644 index 00000000..7a633424 --- /dev/null +++ b/codec2-dev/octave/fsk4.m @@ -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 +