Azzera filtri
Azzera filtri

randi generating random complex numbers from 4-QAM

29 visualizzazioni (ultimi 30 giorni)
I am trying to generate the transmitted symbol x randomly from the set of constellation points seen below from a 4-QAM constellation diagram. This is in respect to the input-output model y = h · x + w for a total of 10^4 independent realizations. I went to the Matlab site and found the following code:
a = randi([-5,5],10,1,"like",1i)
I tweaked it to represent the points on my 4-QAM diagram as so
a = randi([-2,2],10e4,1,"like",1i)
However when I try to run it I get the following error:
Error using randi
Complex or sparse input following 'like' is not supported.
Error in Untitled (line 2)
a = randi([-2,2],10,1,"like",1i)
Perhaps I am overcomplicating this but I can use some assistance in updating my code to produce a random generation of complex numbers in respect to the constellation points on the 4-QAM diagram seen below. Thank you in advance.

Risposta accettata

the cyclist
the cyclist il 4 Apr 2023
Your code works fine for me, and here:
a = randi([-2,2],10e4,1,"like",1i);
plot(real(a),imag(a),"o")
I'm not sure what to suggest, other than restarting MATLAB. What do you get from
which randi -all
  3 Commenti
Walter Roberson
Walter Roberson il 4 Apr 2023
I notice the user has marked R2020a; perhaps it was not supported then.
(I had no idea it was supported at all!)
the cyclist
the cyclist il 4 Apr 2023
Modificato: the cyclist il 4 Apr 2023
I think you are correct. I looked for this in the version history of randi, but missed it! Looks like this was introduced in R2022a.
EDIT: The Mathematics section of the release notes (for R2022a) corroborates this.

Accedi per commentare.

Più risposte (1)

the cyclist
the cyclist il 4 Apr 2023
Modificato: the cyclist il 4 Apr 2023
My other answer focused on "Why didn't this syntax work?" (and concluded that you don't have a recent enough version).
This is answer is focused "How can I do what I need?"
There are two straightforward solutions:
(1) Generate the real and imaginary parts separately, and add them. For example.
N = 11;
re = 4*randi(2,N,1) - 6;
im = 4*randi(2,N,1) - 6;
c = re + i*im
c =
2.0000 + 2.0000i -2.0000 + 2.0000i -2.0000 + 2.0000i 2.0000 - 2.0000i 2.0000 + 2.0000i -2.0000 - 2.0000i 2.0000 - 2.0000i 2.0000 + 2.0000i -2.0000 + 2.0000i -2.0000 + 2.0000i -2.0000 - 2.0000i
(2) Generate a random value from 1 to 4 (because you have 4 distinct points), and use that as an index into the complex values you want.
N = 11;
c_vals = [-2-2*i, -2+2*i, 2-2*i,2+2*i];
idx = randi(4,N,1);
c = c_vals(idx)'
c =
-2.0000 + 2.0000i 2.0000 + 2.0000i 2.0000 + 2.0000i 2.0000 - 2.0000i 2.0000 - 2.0000i -2.0000 + 2.0000i -2.0000 + 2.0000i -2.0000 - 2.0000i -2.0000 - 2.0000i 2.0000 + 2.0000i 2.0000 + 2.0000i
  2 Commenti
Jose Iglesias
Jose Iglesias il 4 Apr 2023
Thank you for your input. I ended up upgrading to R2023a and it ran the original code a = randi([-5,5],10,1,"like",1i) with no issues.

Accedi per commentare.

Categorie

Scopri di più su Test and Measurement in Help Center e File Exchange

Prodotti


Release

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by