Clear Filters
Clear Filters

QAM Demodulation With Low Power Signal

8 views (last 30 days)
Can Sevgi
Can Sevgi on 26 Jul 2022
Answered: Abhimenyu on 13 Oct 2023
Hello All
Lets assume we're using 64QAM with unit average power and gray encoding.
The modulated representation corresponding to symbols :
1 => -0.923 + 0.659i
2 => -0.923 + 0.132i
.
.
45 => 0.659 - 0.659i
.
.
The received symbols can be found as
rx_symbols = H * tx_symbols;
My question rises here, the received symbols are:
-8.005 e-05 + 5.717 e-05i
-8.005e-05 + 1.143e-05i
.
.
.
5.717e-05 - 5.717e-05i
.
.
How can I demodulate them ?
Using qamdemod with unit average power results high errors since it requires higher amplitude symbols as in given above (modulated symbols)
demodulated_symbols = qamdemod(rx_symbols ,M,"UnitAveragePower",true);
instead I tried :
rx_symbols = rx_symbols ./mean(abs(rx_symbols ));
This operation amplified average power to be 1 but if there are low amount of symbols to take mean, it becomes biased and again results errors.
For example, this normalization resulted 1.8% symbol error rate for 30 symbols received but 30% symbol error rate for 3 symbols received.
**Real Question :**
**What is the proper way to demodulate received low power signal ?**
in MATLAB forums, they do not change signal power, instead they change noise power to adjust SNR, but I need to change signal power while keeping thermal noise constant (as in real life)

Answers (1)

Abhimenyu
Abhimenyu on 13 Oct 2023
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:
I hope this helps!
Thank you,
Abhimenyu.

Products


Release

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!