aboutsummaryrefslogtreecommitdiff
path: root/octave/fdmdv_mod.m
diff options
context:
space:
mode:
Diffstat (limited to 'octave/fdmdv_mod.m')
-rw-r--r--octave/fdmdv_mod.m34
1 files changed, 34 insertions, 0 deletions
diff --git a/octave/fdmdv_mod.m b/octave/fdmdv_mod.m
new file mode 100644
index 0000000..3530cfe
--- /dev/null
+++ b/octave/fdmdv_mod.m
@@ -0,0 +1,34 @@
+% fdmdv_mod.m
+%
+% Modulator function for FDMDV modem, uses test frames as input and
+% outputs a raw file of 16 bit shorts at a sample rate of 8 kHz.
+%
+% Copyright David Rowe 2012
+% This program is distributed under the terms of the GNU General Public License
+% Version 2
+%
+
+function tx_fdm = fdmdv_mod(rawfilename, nbits)
+
+ fdmdv; % include modem code
+ f = fdmdv_init;
+ Nc = f.Nc; Nb = f.Nb;
+
+ frames = floor(nbits/(Nc*Nb))
+ tx_fdm = [];
+ gain = 1000; % Scale up to 16 bit shorts
+ prev_tx_symbols = ones(Nc+1,1); prev_tx_symbols(Nc+1) = 2;
+
+ for i=1:frames
+ [tx_bits f] = get_test_bits(f,Nc*Nb);
+ [tx_symbols f] = bits_to_psk(f,prev_tx_symbols, tx_bits);
+ prev_tx_symbols = tx_symbols;
+ [tx_baseband f] = tx_filter(f, tx_symbols);
+ tx_fdm = [tx_fdm real(fdm_upconvert(f, tx_baseband))];
+ end
+
+ tx_fdm *= gain;
+ fout = fopen(rawfilename,"wb");
+ fwrite(fout, tx_fdm, "short");
+ fclose(fout);
+endfunction