【python】QPSK・16QAM・64QAM 변조용의 함수
코드는 파이썬이지만 matlab에도 쉽게 적용 할 수 있어야합니다.
import numpy as np
def bit_to_QPSK(TX_bit):
# 入力bit系列のサイズを記録
temp = TX_bit.shape
M = temp[0]
bit_num = temp[1]
# まずは入力bit系列をBPSK変調
TX_BPSK = np.ones((M, bit_num))
TX_BPSK[TX_bit == 0] = -1
# 平均電力が1になるように1/np.sqrt(2)をかけて、
# BPSK系列の奇数番目は実部に、偶数番目は虚部になるように合成
TX_BPSK = TX_BPSK * 1 / np.sqrt(2)
TX_QPSK = TX_BPSK[:, 0:bit_num:2] + 1j * TX_BPSK[:, 1:bit_num:2]
return TX_QPSK
def bit_to_16QAM(TX_bit):
# 入力bit系列のサイズを記録
temp = TX_bit.shape
M = temp[0]
bit_num = temp[1]
sym_num = bit_num / 4
# まずは入力bit系列をBPSK変調
TX_BPSK = np.ones((M, bit_num))
TX_BPSK[TX_bit == 0] = -1
# 奇数番目のシンボルの重みをもたせた上で合成
temp = 2 * TX_BPSK[:, 0:bit_num:2] + TX_BPSK[:, 1:bit_num:2]
# 出力結果がグレイ符号化になるように調整
temp_copy = temp.copy()
temp[temp_copy == 3] = 1
temp[temp_copy == 1] = 3
TX_16QAM = (temp[:, 0:int(sym_num * 2):2] + 1j * temp[:, 1:int(sym_num * 2):2]) * 1 / np.sqrt(10)
return TX_16QAM
def bit_to_64QAM(TX_bit):
# 入力bit系列のサイズを記録
temp = TX_bit.shape
M = temp[0]
bit_num = temp[1]
sym_num = bit_num / 4
# まずは入力bit系列をBPSK変調
TX_BPSK = np.ones((M, bit_num))
TX_BPSK[TX_bit == 0] = -1
# シンボルの重みをもたせた上で合成
temp = 4 * TX_BPSK[:, 0:bit_num:3] + 2 * TX_BPSK[:, 1:bit_num:3] + TX_BPSK[:, 2:bit_num:3]
# 出力結果がグレイ符号化になるように調整
temp_copy = temp.copy()
temp[temp_copy == 7] = 3
temp[temp_copy == 5] = 1
temp[temp_copy == 3] = 5
temp[temp_copy == 1] = 7
temp[temp_copy == -3] = -1
temp[temp_copy == -1] = -3
TX_64QAM = (temp[:, 0:int(sym_num * 3):2] + 1j * temp[:, 1:int(sym_num * 3):2]) * 1 / np.sqrt(42)
return TX_64QAM
# 送信側アンテナ数
M = 2
# 受信側アンテナ数
N = M
# 送信ビット数
bit_num = 12 * 10 ** 2
# 送信ビット列を生成
TX_bit = np.random.randint(0, 2, (M, bit_num))
# 各種変調を実行
TX_QPSK = bit_to_QPSK(TX_bit)
TX_16QAM = bit_to_16QAM(TX_bit)
TX_64QAM = bit_to_64QAM(TX_bit)
print(TX_bit)
print(TX_QPSK)
print(TX_16QAM)
print(TX_64QAM)
위의 bit_to_QPSK, bit_to_16QAM, bit_to_64QAM은 각각 0/1로 구성된 임의의 행 수의 비트 열을 QPSK 변조, 16QAM 변조, 64QAM 변조하는 함수입니다. 모두 그레이 인코딩이 되어 있을 것입니다.
비트와 심볼 할당이지만 QPSK는
16QAM은
64QAM은
라는 식으로 되어 있습니다. 그레이 인코딩의 비트 - 심볼 할당 방법은 일치하지 않으므로주의가 필요할 수 있습니다.
판정·복조용의 함수도 조만간 기사로 합니다.
Reference
이 문제에 관하여(【python】QPSK・16QAM・64QAM 변조용의 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Seiji_Tanaka/items/a059090ee020a5d5c648텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)