aboutsummaryrefslogtreecommitdiff
path: root/octave/qam16.m
diff options
context:
space:
mode:
authorMarin Ivanov <[email protected]>2025-07-25 10:17:14 +0300
committerMarin Ivanov <[email protected]>2026-01-18 20:09:26 +0200
commit0168586485e6310c598713c911b1dec5618d61a1 (patch)
tree6aabc2a12ef8fef70683f5389bea00f948015f77 /octave/qam16.m
Initial commitHEADmaster
* codec2 cut-down version 1.2.0 * Remove codebook and generation of sources * remove c2dec c2enc binaries * prepare for emscripten
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
+