diff options
| author | Author Name <[email protected]> | 2023-07-07 12:20:59 +0930 |
|---|---|---|
| committer | David Rowe <[email protected]> | 2023-07-07 12:29:06 +0930 |
| commit | ac7c48b4dee99d4c772f133d70d8d1b38262fcd2 (patch) | |
| tree | a2d0ace57a9c0e2e5b611c4987f6fed1b38b81e7 /octave/fsk_lib_ldpc_tx.m | |
shallow zip-file copy from codec2 e9d726bf20
Diffstat (limited to 'octave/fsk_lib_ldpc_tx.m')
| -rw-r--r-- | octave/fsk_lib_ldpc_tx.m | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/octave/fsk_lib_ldpc_tx.m b/octave/fsk_lib_ldpc_tx.m new file mode 100644 index 0000000..408ba79 --- /dev/null +++ b/octave/fsk_lib_ldpc_tx.m @@ -0,0 +1,44 @@ +% fsk_lib_ldpc_tx.m +% +% LDPC coded 4FSK modem tx, generates a 8 kHz 16 bit short real valued sample file + +function fsk_lib_ldpc_tx(filename, num_frames=10, Rs=100, coderate=0.5, EbNodB=100) + fsk_lib_ldpc; + + % set up LDPC code + init_cml(); + if coderate == 0.5 + load H_256_512_4.mat; + elseif coderate == 0.75 + load HRAa_1536_512.mat; H=HRA; + else + disp("unknown code rate"); + end + [states code_param] = fsk_lib_ldpc_init (H, Rs, Fs=8000); + n = code_param.coded_bits_per_frame; k = code_param.data_bits_per_frame; + + rand('seed',1); + data_bits = round(rand(1,code_param.data_bits_per_frame)); tx_bits = []; + for f=1:num_frames + codeword_bits = LdpcEncode(data_bits, code_param.H_rows, code_param.P_matrix); + tx_bits = [tx_bits codeword_bits]; + end + + tx = fsk_mod(states, tx_bits); + + % set up (optional) AWGN noise + EcNodB = EbNodB + 10*log10(states.rate); + EcNo = 10^(EcNodB/10); + variance = states.Fs/(states.Rs*EcNo*states.bitspersymbol); + + % note real noise + noise = sqrt(variance/2)*randn(length(tx),1); + rx = tx + noise; + + frx=fopen(filename,"wb"); fwrite(frx, states.amp_scale*rx, "short"); fclose(frx); + printf("Fs: %d Rs: %d rate %4.2f (%d,%d) EbNodB: %3.1f EcNodB: %3.1f frames transmitted: %3d\n", + Fs, Rs, coderate, n, k, EbNodB, EcNodB, num_frames); +end + + + |
