File: qam16.m

package info (click to toggle)
codec2 1.2.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 76,376 kB
  • sloc: ansic: 436,819; cpp: 2,091; objc: 1,736; sh: 1,510; python: 1,405; asm: 683; makefile: 605
file content (35 lines) | stat: -rw-r--r-- 876 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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