How to scale QAM signal for computing the EVM
10 次查看(过去 30 天)
显示 更早的评论
Hello,
I was trying to compute the EVM from a received QAM signal, but I have some problems... I made this code, but I am not sure if it is correct.
I have two files which contents the signals: Transmitter (Tx) and Receiver (Rx). Tx is the original and the values are fine, for example for 16QAM (1+j, 1-j, 1+3j, 1-3j, -1+j, -1-j, -1+3j, -1-3j, 3+j, 3+3j, 3-j, 3-3j, -3+j, -3+3j, -3-j, -3-3j). Rx is the constellation after the channel which symbol amplitude is totally different (for example, 1+j is now 4+4j) and sometimes is rotated (but this is not my problem now). The Tx and Rx vector are sorted, I mean it Tx(1) correspond to Rx(1) and so on. As I know the Tx constellation, I would have to scale the Rx signal to compute the EVM. I attach a picture which show that Rx is bigger than Tx.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/288877/image.png)
I also attach the Tx and Rx files.
Thank you
%% TX
Ref_1 = load('Tx_16QAM.txt'); % transmitted data
Tx = Ref_1;
Tx = Tx(:,1)+i*Tx(:,2);
Tx_Energy = var(Tx,1);
Tx_mean = mean(Tx);
Tx_mean_correct = Tx - Tx_mean;
Tx_Energy_mean_correct = var(Tx_mean_correct,1);
Tx_corrected = (Tx_mean_correct*sqrt(Tx_Energy))./sqrt(Tx_Energy_mean_correct);
Tx_Energy_corrected = var(Tx_corrected,1);
%% RX
Noisy_Data_1 = load('Rx_1dBm.txt'); % received data
Rx = Noisy_Data_1;
Rx = Rx(:,1)+i*Rx(:,2);
Rx_mean = mean(Rx);
Rx_mean_correct = Rx - Rx_mean;
Rx_Energy = var(Rx,1);
Rx_corrected = (Rx_mean_correct*sqrt(Tx_Energy))./sqrt(Rx_Energy);
Rx_Energy_corrected = var(Rx_corrected,1);
%% EVM calculation
% evm = comm.EVM;
% rmsEVM1 = evm(Ref,Noisy_Data);
%%
evm = comm.EVM('MaximumEVMOutputPort',true,...
'XPercentileEVMOutputPort',true, 'XPercentileValue',90,...
'SymbolCountOutputPort',true);
[rmsEVM,maxEVM,pctEVM,numSym] = evm(Tx_corrected,Rx_corrected);
disp(rmsEVM);
0 个评论
回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 QAM 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!