aboutsummaryrefslogtreecommitdiff
path: root/octave/qam16.m
diff options
context:
space:
mode:
authorAuthor Name <[email protected]>2023-07-07 12:20:59 +0930
committerDavid Rowe <[email protected]>2023-07-07 12:29:06 +0930
commitac7c48b4dee99d4c772f133d70d8d1b38262fcd2 (patch)
treea2d0ace57a9c0e2e5b611c4987f6fed1b38b81e7 /octave/qam16.m
shallow zip-file copy from codec2 e9d726bf20
Diffstat (limited to 'octave/qam16.m')
-rw-r--r--octave/qam16.m35
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
+