randi generating random complex numbers from 4-QAM
15 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Jose Iglesias
il 4 Apr 2023
Commentato: the cyclist
il 4 Apr 2023
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.

0 Commenti
Risposta accettata
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
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.
Più risposte (1)
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
(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)'
2 Commenti
Vedere anche
Categorie
Scopri di più su Test and Measurement in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!