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调制信号的平均相位估计相关推荐

  1. mASK调制在AWGN信道下的可达信息速率的Monte Carlo仿真计算法

    本文探究mASK调制在AWGN信道下的可达信息速率用Monte Carlo仿真计算的方法.参考我的上一篇博文<mASK 调制在AWGN信道下的可达信息速率的积分计算>,解决的方法相同,只是 ...

  2. MATLAB仿真QPSK调制信号通过AWGN信道的误符号率和误比特率分析

    MATLAB仿真QPSK调制信号通过AWGN信道的误符号率和误比特率分析 形式:程序 程序实现功能: 仿真正交相移键控QPSK信号调制的基带数字通信系统通过AWGN信道的误符号率(SER)和误比特率( ...

  3. 最大玻尔兹曼分布的mASK信号在AWGN信道下的容量计算

    最大玻尔兹曼分布的mASK信号在AWGN信道下的容量计算_u011852612的博客-CSDN博客

  4. AWGN信道下的香农限

    香农限的概念 香农定义的信道容量为信道的输入信息X与信道的输出信息Y之间的最大互信息熵,即 对于信道带宽为B,信号功率为Ps ,噪声功率PN 的AWGN信道来说,其信道容量可做如下表示, 而香农限则是 ...

  5. matlab基带信号速率,如何用MATLAB产生25Gbaud的基带QPSK调制信号

    如何用MATLAB产生25Gbaud的基带QPSK调制信号 包括生成随机符号序列,进行QPSK调制,过采样,脉冲成型滤波和降采样.有错误敬请指正. 参数设置:symbol rate=25Gbaud D ...

  6. 有关BPSK、QPSK调制信号的通信链路仿真,以及误码分析

    之前简单叙述了一个随机序列如何使用MATLAB中内置函数进行数字调制,但是距离通信链路级仿真还仅仅是准备阶段,要想感受完整的通信仿真过程还有许多精细的模块需要学习.回顾通信的整个过程,大致分为三个部分 ...

  7. 【FPGA教程案例34】通信案例4——基于FPGA的QPSK调制信号产生,通过matlab测试其星座图

    FPGA教程目录 MATLAB教程目录 -------------------------------------------------------------------------------- ...

  8. AWGN和Rayleigh信道下QPSK的误码率分析

    https://blog.csdn.net/weixin_41608328/article/details/88809024

  9. AWGN信道下卷积编码、viterbe译码、分别采用软硬判决,进行误码率分析

    一.卷积编码 仿真 (硬判决译码 误码率和理论值比较) 已知卷积码生成函数: 可知码率为1/3,相应的抽头系数为(557 663 711)的卷积码.编写程序,采用卷积编码.维特比译码(硬判决),BPS ...

  10. QPSK调制解调和误码率

    课程设计作业 QPSK调制解调 clear all; close all; %% %系统参数设计 T_start=0;%开始时间 T_stop=20;%截止时间 T=T_stop-T_start;%仿 ...

最新文章

  1. 美多商城之商品(准备商品数据 )、Dockers容器和FastDFS存储
  2. 收藏 | YOLO系列综述:从V1到V4
  3. 多线程并发下的单例模式
  4. ST算法解决RMQ问题
  5. rjdbc读取mysql_R通过RJDBC连接外部数据库 (转)
  6. v$asm_diskgroup中state的说明
  7. Python 操作 MongoDB
  8. java函_Java 8的函式重用
  9. theano 0.7 版本降到0.6 版本
  10. 曲面化原理创新设计_曲面丝印机会给我们带来什么样的美丽
  11. 颜色的原理,三基色原理以及HLS(色相、亮度、饱和度)原理
  12. 选择中医 - 养生之道
  13. 正则表达式匹配英文和法文
  14. 深度探索JFR - JFR详细介绍与生产问题定位落地 - 3. 各种Event详细说明与JVM调优策略(3)
  15. 深信服实习面经11_02
  16. mysql查看表存不存在
  17. Python基础篇5:输入两个数,求它们的和、差、积、商、余数
  18. murmur3哈希算法 1
  19. 使用MfgTool工具进行系统烧写
  20. MATLAB二元隐函数绘图命令fimplicit3详解

热门文章

  1. 《游戏设计艺术(第二版)》第一、二章个人学习
  2. 初学者求经典java学习视频
  3. 在国外当程序员是一种什么样的体验
  4. 诺禾--分子生物学常用小软件分享
  5. 江西直播源PHP代理,直播源更新平台
  6. Pubmedy加载时显示程序包无效的解决方案
  7. Java程序设计基础作业目录(作业笔记)
  8. 群晖NAS从入门到精通的所有帖子汇总,只要这一篇就够了
  9. c语言编辑回文数,C语言实例 回文数
  10. 【 地图系列 】 世界地图和主要国家的 JSON 文件