Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

- Community Forums
- :
- Forums
- :
- Vivado RTL Development
- :
- Synthesis
- :
- Re: 16 qam mapping

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Mute
- Printer Friendly Page

Highlighted
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

er.narendra18@gmail.com

Visitor

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

06-29-2015 11:29 AM

9,840 Views

Registered:
12-12-2014

1 Solution

Accepted Solutions

Highlighted
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.

muzaffer

Teacher

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

06-30-2015 01:07 AM

17,554 Views

Registered:
03-31-2012

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.

Give Kudos to a post which you think is helpful and reply oriented.

7 Replies

Highlighted

austin

Scholar

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

06-29-2015 12:00 PM

9,829 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

Principal Engineer

Xilinx San Jose

Highlighted

er.narendra18@gmail.com

Visitor

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

06-29-2015 08:40 PM

9,715 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

Highlighted
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.

muzaffer

Teacher

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

06-30-2015 01:07 AM

17,555 Views

Registered:
03-31-2012

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.

Give Kudos to a post which you think is helpful and reply oriented.

er.narendra18@gmail.com

Visitor

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

06-30-2015 09:10 AM

9,653 Views

Registered:
12-12-2014

thanx muzaffer

but i need to understand all the values for 16 and 32 qam

but i need to understand all the values for 16 and 32 qam

Highlighted

er.narendra18@gmail.com

Visitor

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

06-30-2015 09:11 AM

9,650 Views

Registered:
12-12-2014

please reply fast all the mapping values

Highlighted

er.narendra18@gmail.com

Visitor

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

06-30-2015 09:11 AM

9,649 Views

Registered:
12-12-2014

thanx in advance

Highlighted

bassman59

Historian

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

07-01-2015 10:51 AM

9,602 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.