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 = [] #正弦函数载波
评论0