python实现的 AWGN信道下QPSK调制信号的平均相位估计
AWGN信道下QPSK调制信号的平均相位估计
piccolo.用python简单实现的作业
Q1:在Eb/N0(5db~30db,间隔5db)下的加性高斯白噪声,并且假设信道为AWGN信道引入了30度的相位误差,采用QPSK调制信号作为导频信号,试仿真不同情况下的平均相位估计与采样点间曲线。
具体实现
1.QPSK调制的实现
在这里便于仿真实现,采用相位选择法实现QPSK调制
- step0:生成0-3离散均匀随机序列
- step1:根据相位选择对应关系 实现相位映射
- step2:根据相位实现调制
2.AWGN信道下的实现
awgn相对容易实现,主要注意awgn信道 Eb/N0与SNR的转换
主要过程:
- QPSK信号过AWGN信道
- 信号采样并计算相位
- 解除相位偏置并计算误差以及误差的标准差作为误差估计
step0:生成0-3离散均匀随机序列 仿真实现带偏置的QPSK调制
import numpy as np
from math import pi
import matplotlib.pyplot as plt
import matplotlib
import scipy.signal as signal
import math
import matplotlib.pyplot as plt
%matplotlib inline#码元数
size = 1000
#扩展次数num 采样点数序列2 4 6...40
num = 40
samplenum=np.arange(2,40+2,2)
#信噪比序列5 10 15 ...30
SNR=np.arange(5,31,5)
#生成0-3离散均匀随机序列&定义相位偏移
a = np.random.randint(0, 4, size)
offset_phase=pi/6
#信噪比误差矩阵
wtf=np.zeros((6,20))
#相位选择向量
phase_map=([5*pi/4,7*pi/4,1*pi/4,3*pi/4])phase=np.zeros(size)
data=np.zeros(size)
for i in range(size):t=a[i]phase[i]=phase_map[t]#加相位偏置
phase1=phase+np.ones(size)*offset_phase;
#data&phase
data=np.cos(phase1)+1j*np.sin(phase1)
phase=phase*180/pi;
step1:定义函数体 信号的扩展函数、AWGN信道函数、采样函数、求取采样点角度函数、计算平均相位估计误差函数
#一些函数
#扩展函数 扩展num次
def spread(data,num):tran_data=[]for k in range(size):tran_data.extend(np.ones(num)*data[k])return tran_data # 定义加性高斯白噪声 函数
def awgn(y, snr):snr1 = 10 ** (snr / 10.0)xpower = np.sum(y ** 2) / len(y)npower = xpower / snr1return np.random.randn(len(y)) * np.sqrt(npower) + y#采样函数
def sampling(single,sample_num):SAMPLE=[]for k in range(size):temp=np.round(np.linspace(k*num,(k+1)*num-1,sample_num))temp1=temp.tolist()for m in range(len(temp1)):temp1[m]=int(temp1[m])SAMPLE.append(np.sum(noise_qpsk[temp1])/sample_num)return SAMPLE#求取采样点相位
def arg(SAMPLE):r1=np.real(SAMPLE)r2=np.imag(SAMPLE)arg=[]for k in range(size):t=(math.atan(abs(r2[k]/r1[k])))*180/math.piif r1[k]>0:if r2[k]>0:arg.append(t)else:arg.append(-t)else:if r2[k]>0:arg.append(180-t)else:arg.append(t-180) #arg.append(math.acos(r1[k]/(np.sqrt(r2[k]**2+r1[k]**2)))*180/math.pi) return arg
#采样点相位偏差
def argerror(arg,phase1):ermat=[]for k in range(len(arg)):if arg[k]<0:arg[k]=arg[k]+360ermat.append(arg[k]-phase1[k])if abs(ermat[k])>180:if ermat[k]>180:ermat[k]=ermat[k]-360else:ermat[k]=ermat[k]+360error=np.array(ermat)-30return error
step2:开始进行不同Eb/N0、不同采样点下的仿真计算
#先对序列num次扩展 便于后面采样
data1=spread(data,num)
tran_data1=np.array(data1)
k=0
while k<6:snr=SNR[k]#过AWGN信道noise_qpsk = awgn(tran_data1, snr)for m in range(20):sample_num=samplenum[m]#进行采样SAMPLE=sampling(noise_qpsk, sample_num)#采样点 求解相位sample_arg=arg(SAMPLE)#采样点相位误差sample_error=argerror(sample_arg,phase)wtf[k][m]=np.sqrt(np.sum(sample_error**2)/size)k+=1
step3:绘图&分析
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题x = samplenum
#面向对象的绘图方式
fig,ax = plt.subplots()
ax.figsize=(48,24)
plt.rcParams['image.interpolation'] = 'nearest' # 设置 interpolation style
plt.rcParams['image.cmap'] = 'gray' # 设置 颜色 style
plt.rcParams['savefig.dpi'] = 300 #图片像素
plt.rcParams['figure.dpi'] = 300 #分辨率
plt.rcParams['figure.figsize'] = (8.0, 4.0)
ins0=ax.plot(x,wtf[0], label = 'Eb/N0=5dB')
ins1=ax.plot(x,wtf[1], label = 'Eb/N0=10dB')
ins2=ax.plot(x,wtf[2], label = 'Eb/N0=15dB')
ins3=ax.plot(x,wtf[3], label = 'Eb/N0=20dB')
ins4=ax.plot(x,wtf[4], label = 'Eb/N0=25dB')
ins5=ax.plot(x,wtf[5], label = 'Eb/N0=30dB')
lns = ins0+ins1+ins2+ins3+ins4+ins5
labs = [l.get_label() for l in lns]
ax.legend(lns, labs, loc=0)
ax.set_xlabel("采样点")
ax.set_ylabel("平均相位估计误差")
ax.set_title("Q1:AWGN信道")
ax.set_xticks(x)
ax.grid()
plt.savefig('0.png')
最后结果:
此处用标准差做平均相位估计误差。
根据图中的曲线结果可知,在同一Eb/N0条件下,误差估计偏离程度随着采样率的增加而降低。在同一采样率的下,误差估计偏离程度随着Eb/N0的增加而降低。曲线的趋势符合理论表现。
python实现的 AWGN信道下QPSK调制信号的平均相位估计相关推荐
- mASK调制在AWGN信道下的可达信息速率的Monte Carlo仿真计算法
本文探究mASK调制在AWGN信道下的可达信息速率用Monte Carlo仿真计算的方法.参考我的上一篇博文<mASK 调制在AWGN信道下的可达信息速率的积分计算>,解决的方法相同,只是 ...
- MATLAB仿真QPSK调制信号通过AWGN信道的误符号率和误比特率分析
MATLAB仿真QPSK调制信号通过AWGN信道的误符号率和误比特率分析 形式:程序 程序实现功能: 仿真正交相移键控QPSK信号调制的基带数字通信系统通过AWGN信道的误符号率(SER)和误比特率( ...
- 最大玻尔兹曼分布的mASK信号在AWGN信道下的容量计算
最大玻尔兹曼分布的mASK信号在AWGN信道下的容量计算_u011852612的博客-CSDN博客
- AWGN信道下的香农限
香农限的概念 香农定义的信道容量为信道的输入信息X与信道的输出信息Y之间的最大互信息熵,即 对于信道带宽为B,信号功率为Ps ,噪声功率PN 的AWGN信道来说,其信道容量可做如下表示, 而香农限则是 ...
- matlab基带信号速率,如何用MATLAB产生25Gbaud的基带QPSK调制信号
如何用MATLAB产生25Gbaud的基带QPSK调制信号 包括生成随机符号序列,进行QPSK调制,过采样,脉冲成型滤波和降采样.有错误敬请指正. 参数设置:symbol rate=25Gbaud D ...
- 有关BPSK、QPSK调制信号的通信链路仿真,以及误码分析
之前简单叙述了一个随机序列如何使用MATLAB中内置函数进行数字调制,但是距离通信链路级仿真还仅仅是准备阶段,要想感受完整的通信仿真过程还有许多精细的模块需要学习.回顾通信的整个过程,大致分为三个部分 ...
- 【FPGA教程案例34】通信案例4——基于FPGA的QPSK调制信号产生,通过matlab测试其星座图
FPGA教程目录 MATLAB教程目录 -------------------------------------------------------------------------------- ...
- AWGN和Rayleigh信道下QPSK的误码率分析
https://blog.csdn.net/weixin_41608328/article/details/88809024
- AWGN信道下卷积编码、viterbe译码、分别采用软硬判决,进行误码率分析
一.卷积编码 仿真 (硬判决译码 误码率和理论值比较) 已知卷积码生成函数: 可知码率为1/3,相应的抽头系数为(557 663 711)的卷积码.编写程序,采用卷积编码.维特比译码(硬判决),BPS ...
- QPSK调制解调和误码率
课程设计作业 QPSK调制解调 clear all; close all; %% %系统参数设计 T_start=0;%开始时间 T_stop=20;%截止时间 T=T_stop-T_start;%仿 ...
最新文章
- 美多商城之商品(准备商品数据 )、Dockers容器和FastDFS存储
- 收藏 | YOLO系列综述:从V1到V4
- 多线程并发下的单例模式
- ST算法解决RMQ问题
- rjdbc读取mysql_R通过RJDBC连接外部数据库 (转)
- v$asm_diskgroup中state的说明
- Python 操作 MongoDB
- java函_Java 8的函式重用
- theano 0.7 版本降到0.6 版本
- 曲面化原理创新设计_曲面丝印机会给我们带来什么样的美丽
- 颜色的原理,三基色原理以及HLS(色相、亮度、饱和度)原理
- 选择中医 - 养生之道
- 正则表达式匹配英文和法文
- 深度探索JFR - JFR详细介绍与生产问题定位落地 - 3. 各种Event详细说明与JVM调优策略(3)
- 深信服实习面经11_02
- mysql查看表存不存在
- Python基础篇5:输入两个数,求它们的和、差、积、商、余数
- murmur3哈希算法 1
- 使用MfgTool工具进行系统烧写
- MATLAB二元隐函数绘图命令fimplicit3详解