众所周知,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调制信号解调相关推荐

  1. PWM整流器仿真模型,SVPWM调制方式,空间矢量调制,仿真模型。 PWM整流器matlab仿真模型,SVPWM调制

    PWM整流器仿真模型,SVPWM调制方式,空间矢量调制,仿真模型. PWM整流器matlab仿真模型,SVPWM调制 ID:8265663946144210迪伦小酒馆

  2. python字符串连接方式_Python 字符串连接方式有这么种,你知道吗?

    字符串连接,就是将2个或以上的字符串合并成一个,看上去连接字符串是一个非常基础的小问题,但是在Python中,我们可以用多种方式实现字符串的连接,稍有不慎就有可能因为选择不当而给程序带来性能损失. 方 ...

  3. python爬取方式_Python 爬虫入门(三)—— 寻找合适的爬取策略

    写爬虫之前,首先要明确爬取的数据.然后,思考从哪些地方可以获取这些数据.下面以一个实际案例来说明,怎么寻找一个好的爬虫策略.(代码仅供学习交流,切勿用作商业或其他有害行为) 1).方式一:直接爬取网站 ...

  4. python字典定义方式_Python字典常用方法及汇总

    字典的概念 字典是"键值对"的无序可变序列,字典中的每个元素都是一个"键值对",包含:"键对象"和"值对象".可以通过& ...

  5. python多线程实现方式_python中实现多线程有几种方式?

    我们都知道,代码编程不是固定的东西,而是非常灵活的内容,根据不同的内容,我们可以拓展出很多条内容,最终目的还是为了可以实现结果,给大家举例说明其中一个最常用的多线程吧~以及实现的几种方式. 1. 用函 ...

  6. python变量赋值方式_python变量和变量赋值的几种形式

    动态类型的语言 python是动态类型的语言,不需要声明变量的类型. 实际上,python中的变量仅仅只是用来保存一个数据对象的地址.无论是什么数据对象,在内存中创建好数据对象之后,都只是把它的地址保 ...

  7. python变量赋值方式_python中变量的命令规制及变量的赋值方式

    文章结构: 一.python中变量的命名规则 二.变量赋值的三种方式 三.python的垃圾回收机制 一.Python中变量的命令规则 变量名只能包含字母.数字和下划线,且不能以数字开头: 变量名不能 ...

  8. python数据存储方式_python各数据存储方法

    声明: 1)仅作为个人学习,如有冒犯,告知速删! 2)不想误导,如有错误,不吝指教! 本节内容: 简介 ------------------文件存储------------------ TXT文本存储 ...

  9. python数组表示方式_python数组的使用

    1.Python的数组分三种类型: (1) list 普通的链表,初始化后可以通过特定方法动态增加元素.定义方式:arr = [元素] (2) Tuple 固定的数组,一旦定义后,其元素个数是不能再改 ...

  10. python包导入方式_python导包的几种方法(自定义包的生成以及导入详解)

    python 导入数据包的几种方法 1.直接导入整个数据包:improt 数据包 2.导入数据包中的某一个函数: from 数据包 improt 函数(当函数这一项为 * 时为导入整个数据包) 3. ...

最新文章

  1. Google 5月4日换装了(纪念凯斯·哈林)
  2. php获取文件名称和扩展名
  3. Linux futex 快速同步互斥机制简介
  4. python做社会网络分析_社交网络分析(Social Network Analysis in Python)①
  5. 【渝粤教育】电大中专电子商务网站建设与维护 (25)作业 题库
  6. 网站服务器建设方法,如何在服务器上建立站点的方法步骤
  7. Call to undefined function imagettftext()解决方法
  8. iplat62--按钮使用规范
  9. HDU 1160 FatMouse#39;s Speed DP题解
  10. 在PostgreSQL中创建数据库的副本
  11. 深度学习中常见的Normalization总结—Batch Normalization,Instance Normalization
  12. 【NCD 2019 B】Let me sleep【边双连通分量缩点、树的直径】
  13. golang Windows下编译linux可执行文件
  14. Windows XP DOS命令大全
  15. ios-自建网页在浏览器安装ipa包
  16. python中if语句中可用break_python跳出if语句
  17. 前端网页打印window.print()
  18. 中国有互联网根服务器吗?
  19. 1000句最常用英语口语 (501~999)
  20. 设置.exe程序图标(ico文件)

热门文章

  1. VSCode中文版快捷键
  2. 大学高数常微分方程思维导图_思维导图_2016考研数学:高数中六种常见题型归纳_沪江英语...
  3. java代码规范插件_阿里java代码规范IDEA插件之傻瓜教程
  4. STM32cubemx教程及STM32入门(一)
  5. ubuntu14.04人脸相似度dlib模块和skimage模块安装
  6. Solidity教程一
  7. JxBrowser的概述与简单应用
  8. Java基础问题整理
  9. Linux log工具:zlog编译安装及使用示例(同样适用交叉编译环境)
  10. 如何使用AxureShare+Axure RP 8.0创建团队项目,实现团队协同