# randi generating random complex numbers from 4-QAM

15 visualizzazioni (ultimi 30 giorni)
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 CommentiMostra -1 commenti meno recentiNascondi -1 commenti meno recenti

Accedi per commentare.

### 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 CommentiMostra 2 commenti meno recentiNascondi 2 commenti meno recenti
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 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 CommentiMostra 1 commento meno recenteNascondi 1 commento meno recente
the cyclist il 4 Apr 2023
Glad to hear you have a solution

Accedi per commentare.

### Categorie

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

R2020a

### Community Treasure Hunt

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

Start Hunting!