QPSK调制原理及python实现
生活随笔
收集整理的這篇文章主要介紹了
QPSK调制原理及python实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- QPSK調制原理及python實現
- QPSK調制原理
- python實現調制過程
- 1、導入相關庫函數
- 2、調制過程
- 3、作圖過程
QPSK調制原理及python實現
QPSK調制原理
QPSK調制過程及原理在前面的博客中以及詳細分析過。在本文中將簡單介紹實現代碼的數學原理。
代碼實現QPSK調制,是運用了IQ調制原理,將數字基帶信號分為I、Q兩路,再分別與載波想乘,最后相加從而得到調制信號。實現過程中的難點是如何實現信號的極性轉換、實現串并轉換將奇偶位分開。
IQ調制 :
python實現調制過程
1、導入相關庫函數
from scipy import signal, special import numpy as np import matplotlib.pyplot as plt import matplotlib.ticker as mticker from matplotlib.font_manager import FontProperties font = FontProperties(fname="/root/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/simhei.ttf") plt.rcParams['font.sans-serif']=['simhei']#設置作圖中文顯示2、調制過程
前面部分是基帶信號產生過程,在上一篇博客中已經介紹過。后面部分則是調制過程,完全是根據IQ調制原理實現的。
T = 1 #基帶信號寬度,也就是頻率 nb = 100 #定義傳輸的比特數 delta_T = T/200 #采樣間隔 fs = 1/delta_T #采樣頻率 fc = 10/T #載波頻率 SNR = 0 #信噪比t = np.arange(0, nb*T, delta_T) N = len(t)# 產生基帶信號 data = [1 if x > 0.5 else 0 for x in np.random.randn(1, nb)[0]] #調用隨機函數產生任意在0到1的1*nb的矩陣,大于0.5顯示為1,小于0.5顯示為0 data0 = [] #創建一個1*nb/delta_T的零矩陣 for q in range(nb):data0 += [data[q]]*int(1/delta_T) #將基帶信號變換成對應波形信號# 調制信號的產生 data1 = [] #創建一個1*nb/delta_T的零矩陣 datanrz = np.array(data)*2-1 #將基帶信號轉換成極性碼,映射 for q in range(nb):data1 += [datanrz[q]]*int(1/delta_T) #將極性碼變成對應的波形信號idata = datanrz[0:(nb-1):2] #串并轉換,將奇偶位分開,間隔為2,i是奇位 q是偶位 qdata = datanrz[1:nb:2] ich = [] #創建一個1*nb/delta_T/2的零矩陣,以便后面存放奇偶位數據 qch = [] for i in range(int(nb/2)):ich += [idata[i]]*int(1/delta_T) #奇位碼元轉換為對應的波形信號qch += [qdata[i]]*int(1/delta_T) #偶位碼元轉換為對應的波形信號a = [] #余弦函數載波 b = [] #正弦函數載波 for j in range(int(N/2)):a.append(np.math.sqrt(2/T)*np.math.cos(2*np.math.pi*fc*t[j])) #余弦函數載波b.append(np.math.sqrt(2/T)*np.math.sin(2*np.math.pi*fc*t[j])) #正弦函數載波 idata1 = np.array(ich)*np.array(a) #奇數位數據與余弦函數相乘,得到一路的調制信號 qdata1 = np.array(qch)*np.array(b) #偶數位數據與余弦函數相乘,得到另一路的調制信號 s = idata1 + qdata1 #將奇偶位數據合并,s即為QPSK調制信號3、作圖過程
將上述I路、Q路以及調制信號繪制出來:
plt.figure(figsize=(14,12)) plt.subplot(3,1,1) plt.plot(idata1) plt.title('同相支路I',fontproperties=font, fontsize=20) plt.axis([0,500,-3,3]) plt.subplot(3,1,2) plt.plot(qdata1) plt.title('正交支路Q',fontproperties=font, fontsize=20) plt.axis([0,500,-3,3]) plt.subplot(3,1,3) plt.plot(s) plt.title('調制信號',fontproperties=font, fontsize=20) plt.axis([0,500,-3,3]) plt.show()得到結果:
以上結果則是在理想狀態下QPSK調制的結果。
參考博客:https://blog.csdn.net/qq_40074819/article/details/105046970
參考文庫:https://wenku.baidu.com/view/b3823aa0ba0d4a7302763ac1.html
總結
以上是生活随笔為你收集整理的QPSK调制原理及python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows python安装_win
- 下一篇: python计算机视觉编程(全)(强烈推