[SOLVED]64 and 256 QAM constellation map

Status
Not open for further replies.

arash rezaee

Member level 5
Hi every one. I want to know how can I find the amplitude and phase of each symbol in 64-QAM and 256-QAM. I have this mapping for 16-QAM but I dont know how to find it for 64 or 256-QAM. Basically, I want to generate 64 and 256-QAM in the FPGA so I think this way is good. If there is any idea about implementing QAM in FPGA, It is my pleasure to hear it.

Regards
Arash

Mityan

Full Member level 5
64 QAM is 8 by 8 square array.
Consider the maximum magnitude is 1. In this case you should lay the elements of the constellation in horizontal direction from -1/sqrt(2) to +1/sqrt(2) spaced uniformly with the step s=2/(7*sqrt(2)) because 8 point = 7 spaces.
In vertical direction just do the same.
Horizontal - In-phase channel, vertical - quadrature.
And you will get point (1,1) with coordinates (I,Q) = (-1/sqrt(2), -1/sqrt(2)). Magnidute will be 1.
point (1,2) - (-1/sqrt(2), -1/sqrt(2)+s)
point (2,1) - (-1/sqrt(2)+s, -1/sqrt(2))
point (2,2) - (-1/sqrt(2)+s, -1/sqrt(2)+s)
point (8,8) - (1/sqrt(2), 1/sqrt(2)).

Numbering is arbitrary

For QAM 256 tthere is 16X16 array.

arash rezaee

arash rezaee

points: 2

arash rezaee

Member level 5
Thanks a lot for your reply. I understood for In-Phase. But the quadrature part it has to be in phase(degree). Am I right? Can you explain it more?

Regards
Arash

- - - Updated - - -

I found one example in matlab web site and I saw the points and I followed your way but I didnt get the same answer. here I put the point on that example

[0.4629 + 0.4629i 0.4629 + 0.1543i 0.4629 + 0.7715i 0.4629 + 1.0801i 0.4629 - 0.4629i 0.4629 - 0.1543i 0.4629 - 0.7715i 0.4629 - 1.0801i 0.1543 + 0.4629i 0.1543 + 0.1543i 0.1543 + 0.7715i 0.1543 + 1.0801i 0.1543 - 0.4629i 0.1543 - 0.1543i 0.1543 - 0.7715i 0.1543 - 1.0801i 0.7715 + 0.4629i 0.7715 + 0.1543i 0.7715 + 0.7715i 0.7715 + 1.0801i 0.7715 - 0.4629i 0.7715 - 0.1543i 0.7715 - 0.7715i 0.7715 - 1.0801i 1.0801 + 0.4629i 1.0801 + 0.1543i 1.0801 + 0.7715i 1.0801 + 1.0801i 1.0801 - 0.4629i 1.0801 - 0.1543i 1.0801 - 0.7715i 1.0801 - 1.0801i -0.4629 + 0.4629i -0.4629 + 0.1543i -0.4629 + 0.7715i -0.4629 + 1.0801i -0.4629 - 0.4629i -0.4629 - 0.1543i -0.4629 - 0.7715i -0.4629 - 1.0801i -0.1543 + 0.4629i -0.1543 + 0.1543i -0.1543 + 0.7715i -0.1543 + 1.0801i -0.1543 - 0.4629i -0.1543 - 0.1543i -0.1543 - 0.7715i -0.1543 - 1.0801i -0.7715 + 0.4629i -0.7715 + 0.1543i -0.7715 + 0.7715i -0.7715 + 1.0801i -0.7715 - 0.4629i -0.7715 - 0.1543i -0.7715 - 0.7715i -0.7715 - 1.0801i -1.0801 + 0.4629i -1.0801 + 0.1543i -1.0801 + 0.7715i -1.0801 + 1.0801i -1.0801 - 0.4629i -1.0801 - 0.1543i -1.0801 - 0.7715i -1.0801 - 1.0801i]'

Regards
Arash

Thanks a lot for your reply. I understood for In-Phase. But the quadrature part it has to be in phase(degree). Am I right? Can you explain it more?

Regards
Arash

enjunear

Thanks a lot for your reply. I understood for In-Phase. But the quadrature part it has to be in phase(degree). Am I right? Can you explain it more?
It's a complex number, which can be represented in two ways: rectangular coordinates or polar coordinates.

Rectangular coordinates are written as the sum of two magnitudes (in-phase, quadrature)... like the data you found (e.g. 0.4629 + 0.4629i). Recall that i and j = sqrt(-1), which in signal theory translates to a phase shift of 90 degrees (see Euler's Identity). So, the first number is the in-phase signal magnitude, and the number with the i (or j) is the quadrature signal magnitude.

You can express the same point as the vector's magnitude and phase angle (mag /phase). (0.4629 + 0.4629i) would be written as 0.6546 @ +45 degrees.

This is probably why your conversion isn't lining up... the previous poster stated to set the corner points (max magnitude) with a magnitude of 1, whereas the dataset you found has a max magnitude of 1.527 (1.0801 + 1.0801i --> 1.5275 @ 45 deg). For a maximum vector magnitude of 1, your rectangular values would be 0.7071 at the largest (e.g. +/- 0.7071 +/- 0.7071i for the four corner points).

arash rezaee

arash rezaee

points: 2

arash rezaee

Member level 5
Thanks for your answering. I have one more question . How can I calculate point as the vector's magnitude and phase angle (mag /phase)?

Regards
Arash

enjunear

1) Since you are already using Matlab, use the built-in function, cart2pol.
MathWorks - CART2POL

2) Most handheld scientific calculators have a method to convert coordinates from rectangular to polar form, and back again.

3) If you want to do the trig, the vector magnitude is the length of the hypotenuse of a triangle with sides of length x and y (think Pythagorean theorem... c^2 = a^2 + b^2 ).

Calculating the angle is a little more tricky. The angle is always determined as a vector starting from pointing along the positive x-axis. So, if your vector is in the upper-right quadrant (positive x, positive y), then theta = arctan(|y|/|x|). However, if your vector is in the upper-left quadrant, then the arc-tangent will give you the angle from the negative x-axis, so you will have to take 180-arctan(|y|/|x|) to get the angle starting from the positive x-axis. Similar adjustments to the triangle's included angle need to be done for the lower-left quadtrant ( arctan(|y|/|x|)+180 ), and the lower-right quadrant ( 360-arctan(|y|/|x|) ).

There are other ways to calculate and represent the angles, but this should help you get some insight into the method of conversion from rectangular to polar coordinates. Draw the four cases out and follow what angle the arctan is calculating, and why you need to compensate with 180-, +180 and 360- for those three quadrants.

Status
Not open for further replies.