diff options
Diffstat (limited to 'gr-digital/python/digital/qam_constellations.py')
-rw-r--r-- | gr-digital/python/digital/qam_constellations.py | 150 |
1 files changed, 98 insertions, 52 deletions
diff --git a/gr-digital/python/digital/qam_constellations.py b/gr-digital/python/digital/qam_constellations.py index 2ddaa92d15..42aa31611f 100644 --- a/gr-digital/python/digital/qam_constellations.py +++ b/gr-digital/python/digital/qam_constellations.py @@ -85,6 +85,7 @@ For 16QAM: 3, 2, 1, 0 ''' + def qam_16_0x0_0_1_2_3(): ''' | 0010 0110 | 1110 1010 @@ -95,18 +96,21 @@ def qam_16_0x0_0_1_2_3(): | | 0000 0100 | 1100 1000 ''' - const_points = [-3-3j, -1-3j, 1-3j, 3-3j, - -3-1j, -1-1j, 1-1j, 3-1j, - -3+1j, -1+1j, 1+1j, 3+1j, - -3+3j, -1+3j, 1+3j, 3+3j] + const_points = [-3 - 3j, -1 - 3j, 1 - 3j, 3 - 3j, + -3 - 1j, -1 - 1j, 1 - 1j, 3 - 1j, + -3 + 1j, -1 + 1j, 1 + 1j, 3 + 1j, + -3 + 3j, -1 + 3j, 1 + 3j, 3 + 3j] symbols = [0x0, 0x4, 0xC, 0x8, 0x1, 0x5, 0xD, 0x9, 0x3, 0x7, 0xF, 0xB, 0x2, 0x6, 0xE, 0xA] return (const_points, symbols) + + qam_16 = qam_16_0x0_0_1_2_3 qam_16_0 = qam_16 + def qam_16_0x1_0_1_2_3(): ''' | 0011 0111 | 1111 1011 @@ -120,8 +124,11 @@ def qam_16_0x1_0_1_2_3(): k = 0x1 pi = [0, 1, 2, 3] return constellation_map_generator(qam_16()[0], qam_16()[1], k, pi) + + qam_16_1 = qam_16_0x1_0_1_2_3 + def qam_16_0x2_0_1_2_3(): ''' | 0000 0100 | 1100 1000 @@ -135,8 +142,11 @@ def qam_16_0x2_0_1_2_3(): k = 0x2 pi = [0, 1, 2, 3] return constellation_map_generator(qam_16()[0], qam_16()[1], k, pi) + + qam_16_2 = qam_16_0x2_0_1_2_3 + def qam_16_0x3_0_1_2_3(): ''' | 0001 0101 | 1101 1001 @@ -150,6 +160,8 @@ def qam_16_0x3_0_1_2_3(): k = 0x3 pi = [0, 1, 2, 3] return constellation_map_generator(qam_16()[0], qam_16()[1], k, pi) + + qam_16_3 = qam_16_0x3_0_1_2_3 @@ -166,8 +178,11 @@ def qam_16_0x0_1_0_2_3(): k = 0x0 pi = [1, 0, 2, 3] return constellation_map_generator(qam_16()[0], qam_16()[1], k, pi) + + qam_16_4 = qam_16_0x0_1_0_2_3 + def qam_16_0x1_1_0_2_3(): ''' | 0000 0100 | 1100 1000 @@ -181,8 +196,11 @@ def qam_16_0x1_1_0_2_3(): k = 0x1 pi = [1, 0, 2, 3] return constellation_map_generator(qam_16()[0], qam_16()[1], k, pi) + + qam_16_5 = qam_16_0x1_1_0_2_3 + def qam_16_0x2_1_0_2_3(): ''' | 0011 0111 | 1111 1011 @@ -196,8 +214,11 @@ def qam_16_0x2_1_0_2_3(): k = 0x2 pi = [1, 0, 2, 3] return constellation_map_generator(qam_16()[0], qam_16()[1], k, pi) + + qam_16_6 = qam_16_0x2_1_0_2_3 + def qam_16_0x3_1_0_2_3(): ''' | 0010 0110 | 1110 1010 @@ -211,6 +232,8 @@ def qam_16_0x3_1_0_2_3(): k = 0x3 pi = [1, 0, 2, 3] return constellation_map_generator(qam_16()[0], qam_16()[1], k, pi) + + qam_16_7 = qam_16_0x3_1_0_2_3 @@ -229,7 +252,7 @@ def sd_qam_16_0x0_0_1_2_3(x, Es=1): | 0000 0100 | 1100 1000 ''' - dist = Es*numpy.sqrt(2) + dist = Es * numpy.sqrt(2) boundary = dist / 3.0 dist0 = dist / 6.0 # print "Sample: ", x @@ -242,26 +265,29 @@ def sd_qam_16_0x0_0_1_2_3(x, Es=1): x_im = x.imag if x_re < -boundary: - b3 = boundary*(x_re + dist0) + b3 = boundary * (x_re + dist0) elif x_re < boundary: b3 = x_re else: - b3 = boundary*(x_re - dist0) + b3 = boundary * (x_re - dist0) if x_im < -boundary: - b1 = boundary*(x_im + dist0) + b1 = boundary * (x_im + dist0) elif x_im < boundary: b1 = x_im else: - b1 = boundary*(x_im - dist0) + b1 = boundary * (x_im - dist0) b2 = -abs(x_re) + boundary b0 = -abs(x_im) + boundary - return [(Es / 2.0)*b3, (Es / 2.0)*b2, (Es / 2.0)*b1, (Es / 2.0)*b0] + return [(Es / 2.0) * b3, (Es / 2.0) * b2, (Es / 2.0) * b1, (Es / 2.0) * b0] + + sd_qam_16 = sd_qam_16_0x0_0_1_2_3 sd_qam_16_0 = sd_qam_16 + def sd_qam_16_0x1_0_1_2_3(x, Es=1): ''' | Soft bit LUT generator for constellation: @@ -274,29 +300,32 @@ def sd_qam_16_0x1_0_1_2_3(x, Es=1): | | 0001 0101 | 1101 1001 ''' - x_re = 3*x.real - x_im = 3*x.imag + x_re = 3 * x.real + x_im = 3 * x.imag if x_re < -2: - b3 = 2*(x_re + 1) + b3 = 2 * (x_re + 1) elif x_re < 2: b3 = x_re else: - b3 = 2*(x_re - 1) + b3 = 2 * (x_re - 1) if x_im < -2: - b1 = 2*(x_im + 1) + b1 = 2 * (x_im + 1) elif x_im < 2: b1 = x_im else: - b1 = 2*(x_im - 1) + b1 = 2 * (x_im - 1) b2 = -abs(x_re) + 2 b0 = +abs(x_im) - 2 return [b3, b2, b1, b0] + + sd_qam_16_1 = sd_qam_16_0x1_0_1_2_3 + def sd_qam_16_0x2_0_1_2_3(x, Es=1): ''' | Soft bit LUT generator for constellation: @@ -310,29 +339,32 @@ def sd_qam_16_0x2_0_1_2_3(x, Es=1): | 0010 0110 | 1110 1010 ''' - x_re = 3*x.real - x_im = 3*x.imag + x_re = 3 * x.real + x_im = 3 * x.imag if x_re < -2: - b3 = 2*(x_re + 1) + b3 = 2 * (x_re + 1) elif x_re < 2: b3 = x_re else: - b3 = 2*(x_re - 1) + b3 = 2 * (x_re - 1) if x_im < -2: - b1 = -2*(x_im + 1) + b1 = -2 * (x_im + 1) elif x_im < 2: b1 = -x_im else: - b1 = -2*(x_im - 1) + b1 = -2 * (x_im - 1) b2 = -abs(x_re) + 2 b0 = -abs(x_im) + 2 return [b3, b2, b1, b0] + + sd_qam_16_2 = sd_qam_16_0x2_0_1_2_3 + def sd_qam_16_0x3_0_1_2_3(x, Es=1): ''' | Soft bit LUT generator for constellation: @@ -345,29 +377,32 @@ def sd_qam_16_0x3_0_1_2_3(x, Es=1): | | 0011 0111 | 1111 1011 ''' - x_re = 3*x.real - x_im = 3*x.imag + x_re = 3 * x.real + x_im = 3 * x.imag if x_re < -2: - b3 = 2*(x_re + 1) + b3 = 2 * (x_re + 1) elif x_re < 2: b3 = x_re else: - b3 = 2*(x_re - 1) + b3 = 2 * (x_re - 1) if x_im < -2: - b1 = -2*(x_im + 1) + b1 = -2 * (x_im + 1) elif x_im < 2: b1 = -x_im else: - b1 = -2*(x_im - 1) + b1 = -2 * (x_im - 1) b2 = -abs(x_re) + 2 b0 = +abs(x_im) - 2 return [b3, b2, b1, b0] + + sd_qam_16_3 = sd_qam_16_0x3_0_1_2_3 + def sd_qam_16_0x0_1_0_2_3(x, Es=1): ''' | Soft bit LUT generator for constellation: @@ -380,29 +415,32 @@ def sd_qam_16_0x0_1_0_2_3(x, Es=1): | | 0000 0100 | 1100 1000 ''' - x_re = 3*x.real - x_im = 3*x.imag + x_re = 3 * x.real + x_im = 3 * x.imag if x_re < -2: - b3 = 2*(x_re + 1) + b3 = 2 * (x_re + 1) elif x_re < 2: b3 = x_re else: - b3 = 2*(x_re - 1) + b3 = 2 * (x_re - 1) if x_im < -2: - b0 = 2*(x_im + 1) + b0 = 2 * (x_im + 1) elif x_im < 2: b0 = x_im else: - b0 = 2*(x_im - 1) + b0 = 2 * (x_im - 1) b2 = -abs(x_re) + 2 b1 = -abs(x_im) + 2 return [b3, b2, b1, b0] + + sd_qam_16_4 = sd_qam_16_0x0_1_0_2_3 + def sd_qam_16_0x1_1_0_2_3(x, Es=1): ''' | Soft bit LUT generator for constellation: @@ -415,29 +453,32 @@ def sd_qam_16_0x1_1_0_2_3(x, Es=1): | | 0001 0101 | 1101 1001 ''' - x_re = 3*x.real - x_im = 3*x.imag + x_re = 3 * x.real + x_im = 3 * x.imag if x_re < -2: - b3 = 2*(x_re + 1) + b3 = 2 * (x_re + 1) elif x_re < 2: b3 = x_re else: - b3 = 2*(x_re - 1) + b3 = 2 * (x_re - 1) if x_im < -2: - b0 = -2*(x_im + 1) + b0 = -2 * (x_im + 1) elif x_im < 2: b0 = -x_im else: - b0 = -2*(x_im - 1) + b0 = -2 * (x_im - 1) b2 = -abs(x_re) + 2 b1 = -abs(x_im) + 2 return [b3, b2, b1, b0] + + sd_qam_16_5 = sd_qam_16_0x1_1_0_2_3 + def sd_qam_16_0x2_1_0_2_3(x, Es=1): ''' | Soft bit LUT generator for constellation: @@ -450,29 +491,32 @@ def sd_qam_16_0x2_1_0_2_3(x, Es=1): | | 0010 0110 | 1110 1010 ''' - x_re = 3*x.real - x_im = 3*x.imag + x_re = 3 * x.real + x_im = 3 * x.imag if x_re < -2: - b3 = 2*(x_re + 1) + b3 = 2 * (x_re + 1) elif x_re < 2: b3 = x_re else: - b3 = 2*(x_re - 1) + b3 = 2 * (x_re - 1) if x_im < -2: - b0 = 2*(x_im + 1) + b0 = 2 * (x_im + 1) elif x_im < 2: b0 = x_im else: - b0 = 2*(x_im - 1) + b0 = 2 * (x_im - 1) b2 = -abs(x_re) + 2 b1 = +abs(x_im) - 2 return [b3, b2, b1, b0] + + sd_qam_16_6 = sd_qam_16_0x2_1_0_2_3 + def sd_qam_16_0x3_1_0_2_3(x, Es=1): ''' | Soft bit LUT generator for constellation: @@ -485,25 +529,27 @@ def sd_qam_16_0x3_1_0_2_3(x, Es=1): | | 0011 0111 | 1111 1011 ''' - x_re = 3*x.real - x_im = 3*x.imag + x_re = 3 * x.real + x_im = 3 * x.imag if x_re < -2: - b3 = 2*(x_re + 1) + b3 = 2 * (x_re + 1) elif x_re < 2: b3 = x_re else: - b3 = 2*(x_re - 1) + b3 = 2 * (x_re - 1) if x_im < -2: - b0 = -2*(x_im + 1) + b0 = -2 * (x_im + 1) elif x_im < 2: b0 = -x_im else: - b0 = -2*(x_im - 1) + b0 = -2 * (x_im - 1) b2 = -abs(x_re) + 2 b1 = +abs(x_im) - 2 return [b3, b2, b1, b0] + + sd_qam_16_7 = sd_qam_16_0x3_1_0_2_3 |