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/qam16.m | |
shallow zip-file copy from codec2 e9d726bf20
Diffstat (limited to 'octave/qam16.m')
| -rw-r--r-- | octave/qam16.m | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/octave/qam16.m b/octave/qam16.m new file mode 100644 index 0000000..5b0f047 --- /dev/null +++ b/octave/qam16.m @@ -0,0 +1,35 @@ +% qam16.m +% David Rowe May 2020 +% +% Octave QAM16 functions + +1; + +function symbol = qam16_mod(constellation, four_bits) + bits_decimal = sum(four_bits .* [8 4 2 1]); + symbol = constellation(bits_decimal+1); +endfunction + +function four_bits = qam16_demod(constellation, symbol, amp_est=1) + assert (amp_est != 0); + symbol /= amp_est; + dist = abs(symbol - constellation(1:16)); + [tmp decimal] = min(dist); + four_bits = zeros(1,4); + for i=1:4 + four_bits(1,5-i) = bitand(bitshift(decimal-1,1-i),1); + end +endfunction + +function test_qam16_mod_demod(constellation) + for decimal=0:15 + tx_bits = zeros(1,4); + for i=1:4 + tx_bits(1,5-i) = bitand(bitshift(decimal-1,1-i),1); + end + symbol = qam16_mod(constellation, tx_bits); + rx_bits = qam16_demod(constellation,symbol); + assert(tx_bits == rx_bits); + end +endfunction + |
