Hi Can,
I understand that you are using 64QAM on your low powered signals and want to demodulate them, and this can be achieved in two ways:
The first method is as follows:
- Step 1: Normalize the received symbols to have average power of 1.
rx_symbols_normalized = rx_symbols ./ sqrt(mean(abs(rx_symbols).^2));
- Step 2: Use the “qamdemod” function to demodulate the normalized symbols.
demodulated_symbols = qamdemod(rx_symbols_normalized, M, 'UnitAveragePower', true); % “M” is to be taken 64
Normalizing the symbols ensures correct demodulation regardless of the received signal power.
The following second method is a more classic approach:
- Step 1: Calculate the Euclidian distance between each received symbol and the 64 constellation points of 64QAM modulation scheme through the following formula:
distance = abs(rx_symbol - constellation_point);
- Step 2: Find the constellation point and its index, with minimum distance for each received symbol
- Step 3: Map the index of the minimum distance to the corresponding symbol in the 64QAM constellation while minimizing the bit errors. You can use gray encoding table for 64QAM.
- Step 4: Repeat the above steps for all the symbols.
Please, refer to the following links to learn more about QAM technique and “qamdemod” function respectively:
- https://www.mathworks.com/help/comm/gs/examine-16-qam-using-matlab.html
- https://www.mathworks.com/help/comm/ref/qamdemod.html
I hope this helps!
Thank you,
Abhimenyu.