一、代码部分

1.2ASK调制解调

代码如下(示例):

# -*- 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(5, 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))ook = m * np.cos(np.dot(2 * pi * fc, ts))
# 2ASK调制信号波形
ax2 = fig.add_subplot(5, 1, 3)
ax2.set_title('2ASK调制信号', fontproperties=zhfont1, fontsize=20)
plt.axis([0, size, -1.5, 1.5])
plt.plot(t, ook, 'r')# 定义加性高斯白噪声
def awgn(y, snr):snr = 10 ** (snr / 10.0)xpower = np.sum(y ** 2) / len(y)npower = xpower / snrreturn np.random.randn(len(y)) * np.sqrt(npower) + y# 加AWGN噪声
noise_ook = awgn(ook, 5)#2ASK调制信号叠加噪声波形
ax3 = fig.add_subplot(5, 1, 5)
ax3.set_title('2ASK调制信号叠加噪声波形', fontproperties=zhfont1, fontsize=20)
plt.axis([0, size, -1.5, 1.5])
plt.plot(t, noise_ook, '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_ook)# 相干解调,乘以同频同相的相干载波
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('2ASK信号相干解调后、抽样判决前的信号', 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 = 0for j in range(100):tempF = tempF + lowpass_out[i * 100 + j]if tempF > 5:flag[i] = 1else:flag[i] = 0
for i in range(size):if flag[i] == 0:for j in range(100):detection_bpsk[i * 100 + j] = 0else:for j in range(100):detection_bpsk[i * 100 + j] = 1bx2 = fig2.add_subplot(3, 1, 3)
bx2.set_title('2ASK信号抽样判决后的信号', fontproperties=zhfont1, fontsize=20)
plt.axis([0, size, -0.5, 1.5])
plt.plot(t, detection_bpsk, 'r')
plt.show()

2.2FSK调制解调

代码如下(示例):

# -*- 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(5, 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')fc1 = 4000
fc2 = 10000
fs = 160000  # 采样频率
ts = np.arange(0, (100 * size) / fs, 1 / fs)
coherent_carrier1 = np.cos(np.dot(2 * pi * fc1, ts))
coherent_carrier2 = np.cos(np.dot(2 * pi * fc2, ts))bfsk = m * coherent_carrier1 + (1 - m) * coherent_carrier2# 2FSK调制信号波形
ax2 = fig.add_subplot(5, 1, 3)
ax2.set_title('2FSK调制信号', fontproperties=zhfont1, fontsize=20)
plt.axis([0, size, -1.5, 1.5])
plt.plot(t, bfsk, 'r')# 定义加性高斯白噪声
def awgn(y, snr):snr = 10 ** (snr / 10.0)xpower = np.sum(y ** 2) / len(y)npower = xpower / snrreturn np.random.randn(len(y)) * np.sqrt(npower) + y# 加AWGN噪声
noise_bpsk = awgn(bfsk, 5)# 2FSK调制信号叠加噪声波形
ax3 = fig.add_subplot(5, 1, 5)
ax3.set_title('2FSK调制信号叠加噪声波形', 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 / 160000, 6000 * 2 / 160000], btype='bandpass', analog=False,output='ba')# 低通滤波器设计,通带截止频率为2000Hz
[b12, a12] = signal.ellip(5, 0.5, 60, (2000 * 2 / 160000), btype='lowpass', analog=False, output='ba')# 通过带通滤波器滤除带外噪声
bandpass_out1 = signal.filtfilt(b11, a11, noise_bpsk)# 相干解调,乘以同频同相的相干载波
coherent_demod1 = bandpass_out1 * (coherent_carrier1 * 2)# 通过低通滤波器
lowpass_out1 = signal.filtfilt(b12, a12, coherent_demod1)# 带通椭圆滤波器设计2,通带为[8000,12000]
[b21, a21] = signal.ellip(5, 0.5, 60, [8000 * 2 / 160000, 12000 * 2 / 160000], btype='bandpass', analog=False,output='ba')# 通过带通滤波器滤除带外噪声
bandpass_out2 = signal.filtfilt(b21, a21, noise_bpsk)# 相干解调,乘以同频同相的相干载波
coherent_demod2 = bandpass_out2 * (coherent_carrier2 * 2)# 通过低通滤波器
lowpass_out2 = signal.filtfilt(b12, a12, coherent_demod2)fig2 = plt.figure()
bx1 = fig2.add_subplot(3, 1, 1)
bx1.set_title('2FSK信号相干解调后、抽样判决前的信号', fontproperties=zhfont1, fontsize=20)
plt.axis([0, size, -1.5, 1.5])
plt.plot(t, lowpass_out1, 'r')# 抽样判决
detection_2fsk = np.zeros(len(t), dtype=np.float32)
flag = np.zeros(size, dtype=np.float32)for i in range(10):tempF = 0for j in range(100):tempF = tempF + lowpass_out1[i * 100 + j]if tempF > 50:flag[i] = 1else:flag[i] = 0
for i in range(size):if flag[i] == 0:for j in range(100):detection_2fsk[i * 100 + j] = 0else:for j in range(100):detection_2fsk[i * 100 + j] = 1bx2 = fig2.add_subplot(3, 1, 3)
bx2.set_title('2FSK信号抽样判决后的信号', fontproperties=zhfont1, fontsize=20)
plt.axis([0, size, -0.5, 1.5])
plt.plot(t, detection_2fsk, 'r')
plt.show()

3.2PSK调制解调

代码如下(示例):

# -*- 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(5, 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)# 2PSK调制信号波形ax2 = fig.add_subplot(5, 1, 3)
ax2.set_title('2PSK调制信号', 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 / snrreturn np.random.randn(len(y)) * np.sqrt(npower) + y# 加AWGN噪声
noise_2psk = awgn(bpsk, 5)# 2PSK调制信号叠加噪声波形
ax3 = fig.add_subplot(5, 1, 5)
ax3.set_title('2PSK调制信号叠加噪声波形', fontproperties=zhfont1, fontsize=20)
plt.axis([0, size, -1.5, 1.5])
plt.plot(t, noise_2psk, '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_2psk)# 相干解调,乘以同频同相的相干载波
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_2psk = np.zeros(len(t), dtype=np.float32)
flag = np.zeros(size, dtype=np.float32)
for i in range(10):tempF = 0for j in range(100):tempF = tempF + lowpass_out[i * 100 + j]if tempF > 0:flag[i] = 1else:flag[i] = 0
for i in range(size):if flag[i] == 0:for j in range(100):detection_2psk[i * 100 + j] = 0else:for j in range(100):detection_2psk[i * 100 + j] = 1
bx2 = fig2.add_subplot(3, 1, 3)
bx2.set_title('2PSK信号抽样判决后的信号', fontproperties=zhfont1, fontsize=20)
plt.axis([0, size, -0.5, 1.5])
plt.plot(t, detection_2psk, 'r')
plt.show()

二、运行结果






总结

基于python实现了ASK,FSK和PSK的调制解调仿真。

Python实现2ASK,2FSK和2PSK调制与解调相关推荐

  1. MATLAB编程实现2FSK信号的调制与解调(非相干解调)

    2FSK信号的产生 数字频率调制又称频移键控(FSK),二进制频移键控记作2FSK.数字频移键控是用载波的频率来传送数字消息,即用所传送的数字消息控制载波的频率.2FSK信号便是符号"1&q ...

  2. 基于LabVIEW的基带NRZ矩形波形产生模块以及二进制数字调制系统(2ASK、2FSK、2PSK)以及抗噪声分析(含工程源码、设计报告)

    通用基带单极性NRZ矩形波产生模块 通过输入二进制序列(序列长度可自定义),产生相应的基带波形,一般为NRZ矩形波. 基本设计思路 在此VI设计中,将输出的单极性NRZ信号采用命名为"输出一 ...

  3. 基于FPGA的2ASK、2FSK、2PSK的调制解调

    文章目录 前言 一.顶层原理图 二.signalTap II 上的仿真图 三.部分代码贴出 总结 前言 这是自己的毕设总结,主要就是基于FPGA的调制解调器的设计.涉及到2ASK.2FSK.2PSK的 ...

  4. 2ASK、2FSK、2PSK、2DPSK、4ASK、4FSK、4PSK、4DPSK、QPSK,以及4QAM、16QAM和MSK、GMSK这些调制和解调过程

    2ASK,2FSK,2PSK,2DPSK四个二进制的仿真结论如下所示: 4ASK,4FSK,4PSK,4DPSK四个四进制的仿真结论如下所示: QPSK,4QAM,16QAM三个仿真结果如下所示: M ...

  5. 单极性归零NRZ码、双极性非归零NRZ码、2ASK、2FSK、2PSK、2DPSK及MATLAB仿真

    二进制调制团圆饭 源代码 仿真结果 源代码 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 单极性归零NRZ码.双极性非归零NRZ码.2ASK.2FSK.2P ...

  6. 基于matlab的短波通信信号基本样式(AM、DSB、FM、2ASK、2FSK、2PSK)

    标题基于matlab的短波通信信号基本样式(AM.DSB.FM.2ASK.2FSK.2PSK) 最近学校老师布置的通信信号的仿真任务,本来仿真一个普通信号并不是一件难事,但是老师要求按照实际的频段来仿 ...

  7. 高斯噪声调频matlab,基于MATLAB的2ASK调制与解调设计

    目录 目录 (1) 第一部分 (2) 1.设计任务及要求 (2) 1.1课程设计的主要内容及技术指标 (2) 1.2课程设计的基本要求 (2) 2.课程设计进度安排 (2) 3.课程设计提交的成果 ( ...

  8. 模拟幅度调制相干解调系统抗噪声性能仿真分析-python实现

    目录 1. 引言 1.1 研究目的 1.2 研究方法 1.3 主要内容 2. 系统模型 2.1 常规调幅调制`(AM)` 2.1.1 AM 调制 2.1.2 AM 解调 2.2 抑制载波双边带调制`( ...

  9. 信号调制与解调python

    1.简介: 调制:把基带信号,也就是包含传输信息的有效信号加载到某个载波(通常为高频的正弦或余弦波)的过程称为调制,得到的信号称为已调信号.调制是指载波信号在基带信号的作用下发生改变,包含信息的基带信 ...

最新文章

  1. mysql 查询多边形_mysql中判断一个点是否在多边形中
  2. redistemplate set方法_spring boot整合redis ---- RedisTemplate 三分钟快速入门
  3. cli parser_Java命令行界面(第27部分):cli-parser
  4. 五步让你成为专家级程序员
  5. 拥抱 Elasticsearch:给 TiDB 插上全文检索的翅膀
  6. 简单循迹小车实验心得_智能循迹小车总结 智能循迹小车报告.doc
  7. python数据分析要学多久_如何七周成为数据分析师18:Python的新手教程
  8. Sticky footers 粘住底部布局
  9. springboot允许跨域注解_springboot 设置允许跨域的方法
  10. ShardedJedis的使用
  11. idea实现Tomcat热部署
  12. 企业微信本地测试环境搭建
  13. eyoucms相关问题总结
  14. 传奇地图时间限制脚本_脚本第一课限制进入次数地图设置方法
  15. 第15节 域之集中管理、统一管理
  16. 从零开始学习UCOSII操作系统13--系统移植理论篇
  17. Minecraft 1.16.5模组开发(三十一) 自定义建筑生成(structure) (新)
  18. CCNA专业英文词汇全集
  19. 屏幕色彩(一)-已知混色光色点求配色比
  20. 计算机颜色系统是三大色彩体系,色彩体系三大属性学习

热门文章

  1. [转] Linux ALSA声卡驱动之三:component、dai、codec以及platform之间的关系
  2. 使用winhex查看FAT16格式结构
  3. 商详的流程编排的实现方案
  4. 凯叔讲故事显示无法连接服务器,【凯叔讲故事】151.苏菲的杰作(重发视频链接修复版)...
  5. 测试经理的工作以及素质
  6. 正交表 软件测试作业,软件测试单元3 黑盒测试
  7. Echarts —自定义label标签的样式(formatter,rich,添加图标等操作)
  8. nginx升级1.20.1版本
  9. mac 搭建kafka系列教程
  10. 软件设计师-JAVA程序设计语言