cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
9,795 Views
Registered: ‎12-12-2014

16 qam mapping

Jump to solution
hi,,,the below code is for 16 qam mapping....i want to know that how the hex values calculated for mapping library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; -- entity declaration entity mapper is Port ( clk, rst : in std_logic; -- global clock --reset : in std_logic; -- asynchronous active high reset --valid_in : in std_logic; -- when high din is valid m_in : in std_logic_vector(3 downto 0); -- data in rl,ig : out std_logic_vector( 15 downto 0) -- real out --ig : out std_logic_vector(15 downto 0)-- imag out --valid_out : out std_logic -- when high real and imag is valid ); end mapper; -- architecture declaration architecture Behavioral of mapper is --signal count : std_logic; signal rl_s : std_logic_vector(15 downto 0); signal ig_s : std_logic_vector(15 downto 0); begin -- process to map 16 point constellation process(clk, rst) begin --if(rst = '1') then --rl_s <= (others => '0'); --ig_s <= (others => '0'); --count <= '0'; --valid_out <= '0'; if(clk'event and clk = '1') then --if(valid_in = '1') then --count <= '0'; case m_in is when"0000" => rl_s <= x"143d"; --x"0051"; ig_s <= x"143d"; --x"0051"; --valid_out <= '1'; when"0001" => rl_s <= x"143d"; --x"0051"; ig_s <= x"3CB7"; --x"00F2"; --valid_out <= '1'; when"0010" => rl_s <= x"143d"; --x"0051"; ig_s <= x"EBC3"; --x"FFAE"; --valid_out <= '1'; when"0011" => rl_s <= x"143d"; --x"0051"; ig_s <= x"C349"; --x"FF0D"; --valid_out <= '1'; when"0100" => rl_s <= x"3CB7"; --x"00F2"; ig_s <= x"143d"; --x"0051"; --valid_out <= '1'; when"0101" => rl_s <= x"3CB7"; --x"00F2"; ig_s <= x"3CB7"; --x"00F2"; --valid_out <= '1'; when"0110" => rl_s <= x"3CB7"; --x"00F2"; ig_s <= x"EBC3"; --x"FFAE"; --valid_out <= '1'; when"0111" => rl_s <= x"3CB7"; --x"00F2"; ig_s <= x"C349"; --x"FFC3"; --valid_out <= '1'; when"1000" => rl_s <= x"EBC3"; ig_s <= x"143d"; --x"0051"; --valid_out <= '1'; when"1001" => rl_s <= x"EBC3"; --x"FFAE"; ig_s <= x"3CB7"; --x"00F2"; --valid_out <= '1'; when"1010" => rl_s <= x"EBC3"; --x"FFAE"; ig_s <= x"EBC3"; --x"FFAE"; --valid_out <= '1'; when"1011" => rl_s <= x"EBC3"; --x"FFAE"; ig_s <= x"C349"; --x"FF0E"; --valid_out <= '1'; when"1100" => rl_s <= x"C349"; --x"FF0E"; ig_s <= x"143d"; --x"0051"; --valid_out <= '1'; when"1101" => rl_s <= x"C349"; --x"FF0E"; ig_s <= x"3CB7"; --x"00F2"; --valid_out <= '1'; when"1110" => rl_s <= x"C349"; --x"FF0E"; ig_s <= x"EBC3"; --x"FFAE"; --valid_out <= '1'; when"1111" => rl_s <= x"C349"; --x"FF0E"; ig_s <= x"C349"; --x"FF0E"; --valid_out <= '1'; when others => null; end case; else rl_s <= (others => '0'); ig_s <= (others => '0'); --valid_out <= valid_in; end if; --end if; end process; rl <= rl_s; ig <= ig_s; end Behavioral; thanx in advance
Tags (1)
0 Kudos
1 Solution

Accepted Solutions
Highlighted
Teacher
Teacher
17,509 Views
Registered: ‎03-31-2012
qam 16 has 16 points with 4 points in each quadrant: here is a picture: https://en.wikipedia.org/wiki/Quadrature_amplitude_modulation#/media/File:16QAM_Gray_Coded.svg

You need to figure out what your lsb value is (probably x143d) and where 0000 is positioned (looks like first point in the +,+ quadrant). The rest is easy.
- Please mark the Answer as "Accept as solution" if information provided is helpful.
Give Kudos to a post which you think is helpful and reply oriented.

View solution in original post

7 Replies
Highlighted
Scholar
Scholar
9,784 Views
Registered: ‎02-27-2008

OK,

 

Carriage returns, and line-feeds would have been nice to have in your post.


But, what is the question?


The constellation for 16 QAM in the IQ plane consists of 16 "dots" in a 4 by 4 (square) pattern. equidistant from each other centered around 0, 0.  Each dot, ,is a symbol, representing 4 bits.

 

The determination of which symbol is received is performed by finding if the received symbol is at one of the dots, with less than  +/- half the dot spacing in x, and in y.

 

Noise, (phase or amplitude) distorts the symbol location, so one has to allow for a range of received values for each dot to assign a value to the received symbol.

 

Depending on the A/D converter resolution, the data in I or Q  must be at least a 3 bit converter, and may be as much as a 16 bit A/D.  The decision as to which symbol it is only requires sufficient resolution to "see"  a half space bewteen dots, but may use more resolution to help distinguish signals from noise.

 

Once the data is recovered, there are only 2 bits in I and 2 bits in Q (four bits equals 16 states per symbol is 16QAM).

 

There must be an automatic gain control loop which increases/decreases the gain so the symbols are equally spaced, and their values fill teh complete range of the A/D converter.


There must also be another loop to center the I and Q channels such that there is no DC offset in I or Q.

 

Actual numeric values depends on the converters chosen.

 

 

 

 

 

 

 

 

Austin Lesea
Principal Engineer
Xilinx San Jose
Highlighted
9,670 Views
Registered: ‎12-12-2014

how the real and imaginary(rl,ig) values are calculated?

 

the code is

 

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- entity declaration

 

entity mapper is
Port ( clk
, rst : in std_logic; -- global clock
--reset : in std_logic; -- asynchronous active high reset
--valid_in : in std_logic; -- when high din is valid
m_in : in std_logic_vector(3 downto 0); -- data in
rl,ig : out std_logic_vector( 15 downto 0) -- real out
--ig : out std_logic_vector(15 downto 0)-- imag out
--valid_out : out std_logic -- when high real and imag is valid
);
end mapper;

 

-- architecture declaration

 

architecture Behavioral of mapper is

signal rl_s : std_logic_vector(15 downto 0);
signal ig_s : std_logic_vector(15 downto 0);
begin


-- process to map 16 point constellation
process(clk, rst)
begin
if(rst = '1') then
rl_s <= (others => '0');
ig_s <= (others => '0');

elsif(clk'event and clk = '1') then

case m_in is

 

when"0000" =>
rl_s <= x"143d"; --x"0051";
ig_s <= x"143d"; --x"0051";

when"0001" =>
rl_s <= x"143d"; --x"0051";
ig_s <= x"3CB7"; --x"00F2";

when"0010" =>
rl_s <= x"143d"; --x"0051";
ig_s <= x"EBC3"; --x"FFAE";

when"0011" =>
rl_s <= x"143d"; --x"0051";
ig_s <= x"C349"; --x"FF0D";

when"0100" =>
rl_s <= x"3CB7"; --x"00F2";
ig_s <= x"143d"; --x"0051";

when"0101" =>
rl_s <= x"3CB7"; --x"00F2";
ig_s <= x"3CB7"; --x"00F2";

when"0110" =>
rl_s <= x"3CB7"; --x"00F2";
ig_s <= x"EBC3"; --x"FFAE";

when"0111" =>
rl_s <= x"3CB7"; --x"00F2";
ig_s <= x"C349"; --x"FFC3";

when"1000" =>
rl_s <= x"EBC3";
ig_s <= x"143d"; --x"0051";

when"1001" =>
rl_s <= x"EBC3"; --x"FFAE";
ig_s <= x"3CB7"; --x"00F2";

when"1010" =>
rl_s <= x"EBC3"; --x"FFAE";
ig_s <= x"EBC3"; --x"FFAE";

when"1011" =>
rl_s <= x"EBC3"; --x"FFAE";
ig_s <= x"C349"; --x"FF0E";

 

when"1100" =>
rl_s <= x"C349"; --x"FF0E";
ig_s <= x"143d"; --x"0051";

when"1101" =>
rl_s <= x"C349"; --x"FF0E";
ig_s <= x"3CB7"; --x"00F2";

when"1110" =>
rl_s <= x"C349"; --x"FF0E";
ig_s <= x"EBC3"; --x"FFAE";

when"1111" =>
rl_s <= x"C349"; --x"FF0E";
ig_s <= x"C349"; --x"FF0E";

 

when others => null;
end case;
end if;
end process;

rl <= rl_s;
ig <= ig_s;

end Behavioral;

 

thanx in advance

0 Kudos
Highlighted
Teacher
Teacher
17,510 Views
Registered: ‎03-31-2012
qam 16 has 16 points with 4 points in each quadrant: here is a picture: https://en.wikipedia.org/wiki/Quadrature_amplitude_modulation#/media/File:16QAM_Gray_Coded.svg

You need to figure out what your lsb value is (probably x143d) and where 0000 is positioned (looks like first point in the +,+ quadrant). The rest is easy.
- Please mark the Answer as "Accept as solution" if information provided is helpful.
Give Kudos to a post which you think is helpful and reply oriented.

View solution in original post

Highlighted
9,608 Views
Registered: ‎12-12-2014
thanx muzaffer

but i need to understand all the values for 16 and 32 qam
0 Kudos
Highlighted
9,605 Views
Registered: ‎12-12-2014
please reply fast all the mapping values
0 Kudos
Highlighted
9,604 Views
Registered: ‎12-12-2014
thanx in advance
0 Kudos
Highlighted
Historian
Historian
9,557 Views
Registered: ‎02-25-2008

@er.narendra18@gmail.com wrote:
please reply fast all the mapping values

Lack of planning on your part does not constitute emergency on our part.

 

How much are you willing to pay to get the information you need?

----------------------------Yes, I do this for a living.
0 Kudos