EVM calculation in communication toolbox

Hi,
I need a clarification in EVM calculation using comm.EVM system object.
my code for your reference:
% Define reference (ideal) signal vector
r = [0.707+0.707i, -0.707+0.707i, -0.707-0.707i, 0.707-0.707i];
% Define received signal vector
s = [1+2i, -2+3i, -3-4i, 5-6i];
% Calculate EVM using comm.EVM
evm_metric = comm.EVM;
evm_result = evm_metric(r', s');
evm_result_1 = evm_metric(s', r');
obtained result:
output of evm_result = 422.0673 %
output of evm_result_1 = 82.7617%
my doubts are:
  1. What is the % range of the EVM value?
  2. Can you please clarify the argument order - (reference signal,received signal) or (received signal,reference signal).

 Respuesta aceptada

Sudarsanan A K
Sudarsanan A K el 26 de Mzo. de 2024

0 votos

Hello Anu,
The "comm.EVM" system object is used to calculate the EVM (Error Vector Magnitude) between the reference signal and the received signal.
  1. The minimum EVM value is , representing an ideal match between transmitted and received signals, with no errors. There's no fixed maximum limit for EVM; values can exceed if the magnitude of the error vector is much greater than the magnitude of the reference signal. This indicates poor signal quality or significant distortion in the received signal.
  2. The correct argument order for the "comm.EVM" object is (reference signal, received signal), as evident from the documentation:
I hope this helps!

5 comentarios

Anu
Anu el 27 de Mzo. de 2024
Thank you for your reply.
I have one more doubt. With the same example, I calculated EVM with "lteEVM" function and got RMS EVM as 0.82762 and in the Mathwork site it is specified that multipliplying the value by 100 will get the % value of RMS EVM.
RMS EVM with lteEVM: 82.762 %
May I know why the EVM result is different for both functions?
Is there any unit for RMS EVM obtained using lteEVM function ?
Sudarsanan A K
Sudarsanan A K el 27 de Mzo. de 2024
Editada: Sudarsanan A K el 27 de Mzo. de 2024
Hi,
In case of the "lteEVM" function, the output argument "evm" is the EVM information, returned as structure. "evm" contains the RMS — root mean square (RMS) EVM, specified as a positive numeric scalar. It is the square root of the mean of the squares of all the values of the EVM, which itself is unitless when expressed as a decimal. As you rightly mentioned, when multiplied by , the unit is expressed as a percentage indicating the error vector's magnitude relative to the reference signal's magnitude.
For more information about the functional implementation, you can investigate the function definition by opening "lteEVM" with the command:
open lteEVM
I hope this clarifies your query!
Anu
Anu el 27 de Mzo. de 2024
May I know why the EVM result is different for both functions?
Sudarsanan A K
Sudarsanan A K el 27 de Mzo. de 2024
Editada: Sudarsanan A K el 27 de Mzo. de 2024
Hello,
The results from both the comm.EVM system object and the "lteEVM" function are actually consistent. It's crucial to recognize that these functions require the input arguments in different orders. Unlike the "comm.EVM" system object, the "lteEVM" function expects the input array first, followed by the reference signal vector. (https://www.mathworks.com/help/lte/ref/lteevm.html#d126e34932).
Here is a demonstration:
rng('default');
% Define reference (ideal) signal vector
r = [0.707+0.707i, -0.707+0.707i, -0.707-0.707i, 0.707-0.707i];
% Add AWGN to the reference signal to simulate the received signal
% The second argument specifies the SNR (Signal-to-Noise Ratio) in dB
snr = 3; % Example SNR value, adjust this to simulate different noise levels
s = awgn(r, snr, 'measured');
% Calculate EVM using comm.EVM
evm_metric = comm.EVM;
% Correct argument order for comm.EVM: (reference signal, received signal)
comEVMRMS_result = evm_metric(r', s')
comEVMRMS_result = 85.3031
% Correct argument order for lteEVM: (input array, reference signal)
lteEVM_result = lteEVM(s', r');
lteEVMRMS_result = lteEVM_result.RMS*100 % in '%'
lteEVMRMS_result = 85.3031
% Check if both EVM results are the same (within a small tolerance to account for numerical precision)
tolerance = 1e-4; % Define a small tolerance
if abs(comEVMRMS_result - lteEVMRMS_result) < tolerance
disp('Both EVM results are the same.');
else
disp('EVM results differ.');
end
Both EVM results are the same.
I hope this helps!
Anu
Anu el 2 de Abr. de 2024
Thank you for your support

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Downloads en Centro de ayuda y File Exchange.

Productos

Versión

R2022a

Etiquetas

Preguntada:

Anu
el 26 de Mzo. de 2024

Comentada:

Anu
el 2 de Abr. de 2024

Community Treasure Hunt

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

Start Hunting!

Translated by