QAM Demodulation With Low Power Signal

조회 수: 4 (최근 30일)
Can Sevgi
Can Sevgi 2022년 7월 26일
답변: Abhimenyu 2023년 10월 13일
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)

답변 (1개)

Abhimenyu
Abhimenyu 2023년 10월 13일
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.

카테고리

Help CenterFile Exchange에서 QAM에 대해 자세히 알아보기

제품


릴리스

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by