Borrar filtros
Borrar filtros

How to use evm?

17 visualizaciones (últimos 30 días)
Jerry Malone
Jerry Malone el 7 de Ag. de 2023
Comentada: Jerry Malone el 17 de Oct. de 2023
How do I actually use the comms toolbox evm thing to calculate evm? The Matlab webpages show layers of object-oriented abstraction, but little actual info on how to use it. I just want to use it as a simple function so I don't have to write my own. No need for Simulink. For example, for a QPSK signal, I give it the original constellation and a noisy constellation, and I get back the RMS error. Something like this (greatly simplified):
constellation=[0.7071+0.7071i 0.7071-0.7071i -0.7071+0.7071i -0.7071-0.7071i];
awgn=randn(1,4)+1i*rand(1,4);
err=evm(constellation,constellation+awgn)
Is there any way do that, or any other evm function that does it? Or should I just write my own code?
Thanks.

Respuesta aceptada

Yash
Yash el 21 de Ag. de 2023
Hi,
You can use the built-in comm.EVM object as it provides a convenient and standardized way to calculate EVM in MATLAB.
Here is the updated code snippet for the functionality:
constellation = [0.7071+0.7071i, 0.7071-0.7071i, -0.7071+0.7071i, -0.7071-0.7071i];
awgn = randn(1, 4) + 1i * rand(1, 4);
evm = comm.EVM; % creates an EVM measurement system object
err = evm(constellation, constellation + awgn);
For more details on using the comm.EVM object and its additional capabilities you can refer to the documentation: Measure error vector magnitude (EVM) of received signal - MATLAB (mathworks.com)
  2 comentarios
Jerry Malone
Jerry Malone el 8 de Oct. de 2023
Thanks a million!
Jerry Malone
Jerry Malone el 17 de Oct. de 2023
Is it necessary to recreate the evm object every time I use it?
For example, this works:
evm=comm.EVM;
EVMcalc.dist=rms(evm(d,zznMFdss));
evm=comm.EVM;
EVMcalc.cr=rms(evm(d,z_rotated));
evm=comm.EVM;
EVMcalc.crrad=rms(evm(exp(1i*angle(z_rotated)),z_rotated));
evm=comm.EVM;
EVMcalc.crcirc=rms(evm(d,exp(1i*angle(z_rotated))));
evm=comm.EVM;
EVMcalc.eq=rms(evm(d(Npe_start:end),z_eq(Npe_start:end)));
evm=comm.EVM;
EVMcalc.dd=rms(evm(d(Npe_start:end),zznMFdss(Npe_start:end)));
But this does not:
evm=comm.EVM;
EVMcalc.dist=rms(evm(d,zznMFdss));
EVMcalc.cr=rms(evm(d,z_rotated));
EVMcalc.crrad=rms(evm(exp(1i*angle(z_rotated)),z_rotated));
EVMcalc.crcirc=rms(evm(d,exp(1i*angle(z_rotated))));
EVMcalc.eq=rms(evm(d(Npe_start:end),z_eq(Npe_start:end)));
EVMcalc.dd=rms(evm(d(Npe_start:end),zznMFdss(Npe_start:end)));
The last two lines give errors. In all cases I'm giving the evm a reference constellation and a received constellation. I don't see how using it repeatedly changes any of its parameters.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Propagation and Channel Models en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by