randi generating random complex numbers from 4-QAM
Show older comments
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.

Accepted Answer
More Answers (1)
the cyclist
on 4 Apr 2023
Edited: the cyclist
on 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)'
Categories
Find more on Test and Measurement in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!