python 通信调制方式_python实现BPSK调制信号解调
众所周知,matlab中信号处理的工具箱十分强大,但因为一些深度学习实时性的需求,博主不得不转至python,下面是用python编写的一个完整的测试;实现了BPSK的相干解调,门限使用积分判决。
源码:
# -*- coding:utf-8 -*-
import numpy as np
from math import pi
import matplotlib.pyplot as plt
import matplotlib
import scipy.signal as signal
import math
#码元数
size = 10
sampling_t = 0.01
t = np.arange(0, size, sampling_t)
# 随机生成信号序列
a = np.random.randint(0, 2, size)
m = np.zeros(len(t), dtype=np.float32)
for i in range(len(t)):
m[i] = a[math.floor(t[i])]
fig = plt.figure()
ax1 = fig.add_subplot(3, 1, 1)
# 解决set_title中文乱码
zhfont1 = matplotlib.font_manager.FontProperties(fname = 'C:\Windows\Fonts\simsun.ttc')
ax1.set_title('产生随机n位二进制信号', fontproperties = zhfont1, fontsize = 20)
plt.axis([0, size, -0.5, 1.5])
plt.plot(t, m, 'b')
fc = 4000
fs = 20 * fc # 采样频率
ts = np.arange(0, (100 * size) / fs, 1 / fs)
coherent_carrier = np.cos(np.dot(2 * pi * fc, ts))
bpsk = np.cos(np.dot(2 * pi * fc, ts) + pi * (m - 1) + pi / 4)
# BPSK调制信号波形
ax2 = fig.add_subplot(3, 1, 2)
ax2.set_title('BPSK调制信号', fontproperties=zhfont1, fontsize=20)
plt.axis([0,size,-1.5, 1.5])
plt.plot(t, bpsk, 'r')
# 定义加性高斯白噪声
def awgn(y, snr):
snr = 10 ** (snr / 10.0)
xpower = np.sum(y ** 2) / len(y)
npower = xpower / snr
return np.random.randn(len(y)) * np.sqrt(npower) + y
# 加AWGN噪声
noise_bpsk = awgn(bpsk, 5)
# BPSK调制信号叠加噪声波形
ax3 = fig.add_subplot(3, 1, 3)
ax3.set_title('BPSK调制信号叠加噪声波形', fontproperties = zhfont1, fontsize = 20)
plt.axis([0, size, -1.5, 1.5])
plt.plot(t, noise_bpsk, 'r')
# 带通椭圆滤波器设计,通带为[2000,6000]
[b11,a11] = signal.ellip(5, 0.5, 60, [2000 * 2 / 80000, 6000 * 2 / 80000], btype = 'bandpass', analog = False, output = 'ba')
# 低通滤波器设计,通带截止频率为2000Hz
[b12,a12] = signal.ellip(5, 0.5, 60, (2000 * 2 / 80000), btype = 'lowpass', analog = False, output = 'ba')
# 通过带通滤波器滤除带外噪声
bandpass_out = signal.filtfilt(b11, a11, noise_bpsk)
# 相干解调,乘以同频同相的相干载波
coherent_demod = bandpass_out * (coherent_carrier * 2)
# 通过低通滤波器
lowpass_out = signal.filtfilt(b12, a12, coherent_demod)
fig2 = plt.figure()
bx1 = fig2.add_subplot(3, 1, 1)
bx1.set_title('本地载波下变频,经低通滤波器后', fontproperties = zhfont1, fontsize=20)
plt.axis([0, size, -1.5, 1.5])
plt.plot(t, lowpass_out, 'r')
#抽样判决
detection_bpsk = np.zeros(len(t), dtype=np.float32)
flag = np.zeros(size, dtype=np.float32)
for i in range(10):
tempF = 0
for j in range(100):
tempF = tempF + lowpass_out[i * 100 + j]
if tempF > 0:
flag[i] = 1
else:
flag[i] = 0
for i in range(size):
if flag[i] == 0:
for j in range(100):
detection_bpsk[i * 100 + j] = 0
else:
for j in range(100):
detection_bpsk[i * 100 + j] = 1
bx2 = fig2.add_subplot(3, 1, 2)
bx2.set_title('BPSK信号抽样判决后的信号', fontproperties = zhfont1, fontsize=20)
plt.axis([0, size, -0.5, 1.5])
plt.plot(t, detection_bpsk, 'r')
plt.show()
显示结果:
python 通信调制方式_python实现BPSK调制信号解调相关推荐
- PWM整流器仿真模型,SVPWM调制方式,空间矢量调制,仿真模型。 PWM整流器matlab仿真模型,SVPWM调制
PWM整流器仿真模型,SVPWM调制方式,空间矢量调制,仿真模型. PWM整流器matlab仿真模型,SVPWM调制 ID:8265663946144210迪伦小酒馆
- python字符串连接方式_Python 字符串连接方式有这么种,你知道吗?
字符串连接,就是将2个或以上的字符串合并成一个,看上去连接字符串是一个非常基础的小问题,但是在Python中,我们可以用多种方式实现字符串的连接,稍有不慎就有可能因为选择不当而给程序带来性能损失. 方 ...
- python爬取方式_Python 爬虫入门(三)—— 寻找合适的爬取策略
写爬虫之前,首先要明确爬取的数据.然后,思考从哪些地方可以获取这些数据.下面以一个实际案例来说明,怎么寻找一个好的爬虫策略.(代码仅供学习交流,切勿用作商业或其他有害行为) 1).方式一:直接爬取网站 ...
- python字典定义方式_Python字典常用方法及汇总
字典的概念 字典是"键值对"的无序可变序列,字典中的每个元素都是一个"键值对",包含:"键对象"和"值对象".可以通过& ...
- python多线程实现方式_python中实现多线程有几种方式?
我们都知道,代码编程不是固定的东西,而是非常灵活的内容,根据不同的内容,我们可以拓展出很多条内容,最终目的还是为了可以实现结果,给大家举例说明其中一个最常用的多线程吧~以及实现的几种方式. 1. 用函 ...
- python变量赋值方式_python变量和变量赋值的几种形式
动态类型的语言 python是动态类型的语言,不需要声明变量的类型. 实际上,python中的变量仅仅只是用来保存一个数据对象的地址.无论是什么数据对象,在内存中创建好数据对象之后,都只是把它的地址保 ...
- python变量赋值方式_python中变量的命令规制及变量的赋值方式
文章结构: 一.python中变量的命名规则 二.变量赋值的三种方式 三.python的垃圾回收机制 一.Python中变量的命令规则 变量名只能包含字母.数字和下划线,且不能以数字开头: 变量名不能 ...
- python数据存储方式_python各数据存储方法
声明: 1)仅作为个人学习,如有冒犯,告知速删! 2)不想误导,如有错误,不吝指教! 本节内容: 简介 ------------------文件存储------------------ TXT文本存储 ...
- python数组表示方式_python数组的使用
1.Python的数组分三种类型: (1) list 普通的链表,初始化后可以通过特定方法动态增加元素.定义方式:arr = [元素] (2) Tuple 固定的数组,一旦定义后,其元素个数是不能再改 ...
- python包导入方式_python导包的几种方法(自定义包的生成以及导入详解)
python 导入数据包的几种方法 1.直接导入整个数据包:improt 数据包 2.导入数据包中的某一个函数: from 数据包 improt 函数(当函数这一项为 * 时为导入整个数据包) 3. ...
最新文章
- Google 5月4日换装了(纪念凯斯·哈林)
- php获取文件名称和扩展名
- Linux futex 快速同步互斥机制简介
- python做社会网络分析_社交网络分析(Social Network Analysis in Python)①
- 【渝粤教育】电大中专电子商务网站建设与维护 (25)作业 题库
- 网站服务器建设方法,如何在服务器上建立站点的方法步骤
- Call to undefined function imagettftext()解决方法
- iplat62--按钮使用规范
- HDU 1160 FatMouse#39;s Speed DP题解
- 在PostgreSQL中创建数据库的副本
- 深度学习中常见的Normalization总结—Batch Normalization,Instance Normalization
- 【NCD 2019 B】Let me sleep【边双连通分量缩点、树的直径】
- golang Windows下编译linux可执行文件
- Windows XP DOS命令大全
- ios-自建网页在浏览器安装ipa包
- python中if语句中可用break_python跳出if语句
- 前端网页打印window.print()
- 中国有互联网根服务器吗?
- 1000句最常用英语口语 (501~999)
- 设置.exe程序图标(ico文件)
热门文章
- VSCode中文版快捷键
- 大学高数常微分方程思维导图_思维导图_2016考研数学:高数中六种常见题型归纳_沪江英语...
- java代码规范插件_阿里java代码规范IDEA插件之傻瓜教程
- STM32cubemx教程及STM32入门(一)
- ubuntu14.04人脸相似度dlib模块和skimage模块安装
- Solidity教程一
- JxBrowser的概述与简单应用
- Java基础问题整理
- Linux log工具:zlog编译安装及使用示例(同样适用交叉编译环境)
- 如何使用AxureShare+Axure RP 8.0创建团队项目,实现团队协同