randi generating random complex numbers from 4-QAM

조회 수: 9 (최근 30일)
Jose Iglesias
Jose Iglesias 2023년 4월 4일
댓글: the cyclist 2023년 4월 4일
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.

채택된 답변

the cyclist
the cyclist 2023년 4월 4일
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
Walter Roberson
Walter Roberson 2023년 4월 4일
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 2023년 4월 4일
편집: the cyclist 2023년 4월 4일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

the cyclist
the cyclist 2023년 4월 4일
편집: the cyclist 2023년 4월 4일
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
Jose Iglesias
Jose Iglesias 2023년 4월 4일
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.
the cyclist
the cyclist 2023년 4월 4일
Glad to hear you have a solution

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Test and Measurement에 대해 자세히 알아보기

제품


릴리스

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by