# 导入需要用到的库
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.02
#在0到10内生成均匀步长的列表
t = np.arange(0, size, sampling_t)
# 随机生成二进制信号序列,范围为[0,2),即0,1
a = np.random.randint(0, 2, size)
#生成32位浮点型空数组
m = np.zeros(len(t), dtype=np.float32)
for i in range(len(t)):
m[i] = a[math.floor(t[i])] #对均匀步长列表向下取整,得到的数据为所在时间点的二进制信号,用于画出二进制信号
fig = plt.figure() #生成一个图框
# 调用系统文字库文件,用来显示汉字,去掉也影响不大
zhfont1 = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
ax1 = fig.add_subplot(4, 2, 1) #图像axl显示的位置
#显示二进制信号图像标题
ax1.set_title('产生随机n位二进制信号', fontproperties=zhfont1, fontsize=20)#二进制信号波形图标题
plt.axis([0, size, -0.5, 1.5])#二进制图像所在的坐标系的xy轴范围
plt.plot(t, m, 'b')#画出二进制信号
fs = 100000 # 采样频率,即画点时取点的频率
ts = np.arange(0, (50 * size) / fs, 1 / fs)#产生绘制图像的采样点
fc1 = 3000#正弦信号1频率
fc2 = 6000#正弦信号2频率
############################画出ASK图像###############################
ask2 = m * np.sin(np.dot(2 * pi * fc1, ts))#计算出ask波形对应数值
ax2 = fig.add_subplot(4, 2, 2)#图像ASK显示位置
ax2.set_title('2ASK调制信号', fontproperties=zhfont1, fontsize=20)#ASK波形图标题
plt.axis([0, size, -1.5, 1.5])#ASK图像所在的坐标系的xy轴范围
plt.plot(t, ask2, 'r')#画出ASK图像
######################################################################
############################画出ASK图像###############################
coherent_carrier1 = np.sin(np.dot(2 * pi * fc1, ts))
coherent_carrier2 = np.sin(np.dot(2 * pi * fc2, ts))
bfsk = m * coherent_carrier1 + (1-m) * coherent_carrier2#产生2FSK波形
ax2 = fig.add_subplot(4, 2, 5)#图像FSK显示位置
ax2.set_title('2FSK调制信号', fontproperties=zhfont1, fontsize=20)#FSK波形图标题
plt.axis([0, size, -1.5, 1.5])#FSK图像所在的坐标系的xy轴范围
plt.plot(t, bfsk, 'r')#画出FSK图像
######################################################################
############################画出PSK图像###############################
bpsk = np.sin(np.dot(2 * pi * fc1, ts) + pi * (m - 1) + pi / 4)#产生2PSK波形
ax2 = fig.add_subplot(4, 2, 6)#图像PSK显示位置
ax2.set_title('2PSK调制信号', fontproperties=zhfont1, fontsize=20)#FPSK波形图标题
plt.axis([0, size, -1.5, 1.5])#PSK图像所在的坐标系的xy轴范围
plt.plot(t, bpsk, 'r')#画出PSK图像
######################################################################
plt.show()