real-valued signal constellation has hidden imaginary part

4 views (last 30 days)
Hi guys!
I found something which isn't so nice in Matlab. When you create a demodulator object with
h = modem.pammod('M',2,'InputType', 'Bit','SymbolOrder','Gray');
the signal constellation should be real-valued. If you look at h.constellation you see no imaginary part, but isreal(h.constellation) gives back a zero, which means the constellation points do have a imaginary part. For me it was a little bit annoying, because I cannot use mxIsComplex to determine whether a signal constellation is complex or real-valued. Do you have any clever suggestions for a workaround.
best regards, Bernhard

Accepted Answer

Bernhard Schmidt
Bernhard Schmidt on 10 Feb 2011
Wow, thanks, Walter! Why does this work?
  2 Comments
Walter Roberson
Walter Roberson on 10 Feb 2011
When Matlab does a plain assignment, it just creates a new variable header pointing to the old information. But when you do any arithmetic operation on a complex array, Matlab checks for the case of all-zero complex part and drops the complex part in that case. Adding 0 preserves any complex part that is really there, but triggers the check on the complex part.
Interestingly, double(h.constellation) does *not* trigger the check for all-zero complex part.

Sign in to comment.

More Answers (1)

Walter Roberson
Walter Roberson on 9 Feb 2011
isreal(h.constellation + 0)
I don't know a fast way to do that at the mex level though.

Community Treasure Hunt

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

Start Hunting!