Python实现对于已知可变长二级制串,编制 ASK,FSK,PSK 编码对应的波形

# 导入需要用到的库
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()

 

 

### 回答1: 编写一个用MATLAB编程语言实现ASKFSKPSK编码波形图显示程序的方法描述如下: 首先,我们需要了解ASKFSKPSK编码的原理和公式。 - ASK(Amplitude Shift Keying,振幅键控)编码是一种数字调制方式,通过改变信号的振幅来表示数字信号。 - FSK(Frequency Shift Keying,频率键控)编码是一种数字调制方式,通过改变信号的频率来表示数字信号。 - PSK(Phase Shift Keying,相位键控)编码是一种数字调制方式,通过改变信号的相位来表示数字信号。 接下来,我们可以使用MATLAB编程语言来模拟这些编码波形图显示程序。 1. 对于ASK编码,首先定义一个数字信号序列,然后创建一个时间序列,通过将数字信号映射到振幅上来创建ASK信号。最后使用MATLAB的plot函数来显示ASK信号的波形图。 2. 对于FSK编码,同样首先定义一个数字信号序列,然后创建一个时间序列,通过将数字信号映射到不同的频率上来创建FSK信号。最后使用MATLAB的plot函数来显示FSK信号的波形图。 3. 对于PSK编码,同样首先定义一个数字信号序列,然后创建一个时间序列,通过将数字信号映射到不同的相位上来创建PSK信号。最后使用MATLAB的plot函数来显示PSK信号的波形图。 总结: 使用MATLAB编程语言编写ASKFSKPSK编码波形图显示程序的方法,我们可以先定义数字信号序列,然后创建时间序列,并根据不同的编码方式将数字信号映射到不同的参数上,最后使用MATLAB的plot函数来显示波形图。 ### 回答2: 在MATLAB编程语言中,可以使用plot函数绘制ASK(Amplitude Shift Keying),FSK(Frequency Shift Keying)和PSK(Phase Shift Keying)编码波形图。 首先,可以定义一个时间轴向量,用于生成波形图的横坐标。例如,可以使用linspace函数创建一个从0到1的时间序列: t = linspace(0, 1, 1000); 接下来,可以根据ASKFSKPSK编码的原理,定义相应的波形函数。例如,假设ASK编码时使用的两个频率分别为f1和f2,并且编码的数据序列为data,可以定义ASK波形函数: ASK波形函数: function y = ASK(data, f1, f2, t) y = zeros(size(t)); for i = 1:length(data) if data(i) == 1 y((i-1)*length(t)/length(data)+1:i*length(t)/length(data)) = sin(2*pi*f1*t((i-1)*length(t)/length(data)+1:i*length(t)/length(data))); else y((i-1)*length(t)/length(data)+1:i*length(t)/length(data)) = sin(2*pi*f2*t((i-1)*length(t)/length(data)+1:i*length(t)/length(data))); end end end 类似地,可以定义FSKPSK编码波形函数: FSK波形函数: function y = FSK(data, f1, f2, t) y = zeros(size(t)); for i = 1:length(data) if data(i) == 1 y((i-1)*length(t)/length(data)+1:i*length(t)/length(data)) = sin(2*pi*f1*t((i-1)*length(t)/length(data)+1:i*length(t)/length(data))); else y((i-1)*length(t)/length(data)+1:i*length(t)/length(data)) = sin(2*pi*f2*t((i-1)*length(t)/length(data)+1:i*length(t)/length(data))); end end end PSK波形函数: function y = PSK(data, f, t) y = zeros(size(t)); for i = 1:length(data) if data(i) == 1 y((i-1)*length(t)/length(data)+1:i*length(t)/length(data)) = cos(2*pi*f*t((i-1)*length(t)/length(data)+1:i*length(t)/length(data))); else y((i-1)*length(t)/length(data)+1:i*length(t)/length(data)) = -cos(2*pi*f*t((i-1)*length(t)/length(data)+1:i*length(t)/length(data))); end end end 最后,通过调用plot函数,可以将波形图绘制出来: data = [0 1 1 0 1]; % 编码数据序列 f1 = 10; % ASKFSK的频率1 f2 = 20; % ASKFSK的频率2 f = 15; % PSK的频率 figure; subplot(3,1,1); plot(t, ASK(data, f1, f2, t)); xlabel('时间'); ylabel('振幅'); title('ASK编码波形图'); subplot(3,1,2); plot(t, FSK(data, f1, f2, t)); xlabel('时间'); ylabel('振幅'); title('FSK编码波形图'); subplot(3,1,3); plot(t, PSK(data, f, t)); xlabel('时间'); ylabel('振幅'); title('PSK编码波形图'); 通过以上的MATLAB代码,可以实现绘制ASKFSKPSK编码波形图,并展示在一个图形窗口中。 ### 回答3: 在MATLAB中,可以使用`plot`函数来显示ASK(Amplitude Shift Keying,振幅键控)、FSK(Frequency Shift Keying,频率键控)和PSK(Phase Shift Keying,相位键控)编码波形图。 首先,创建一个时间轴,表示要显示的波形图的时间。例如,可以使用`time = linspace(0, 1, 1000)`来创建一个从0到1的时间轴,包含1000个点。 接下来,根据ASKFSKPSK编码原理,使用适当的数学公式生成这些波形的序列。这些序列可以是离散的,也可以是连续的。以ASK为例,可以使用以下公式生成ASK波形的序列:`signal = arrayfun(@(t) amplitude * cos(2 * pi * frequency * t), time)`。其中,`amplitude`为振幅,`frequency`为频率。 然后,使用`plot`函数将这些序列绘制成波形图。例如,对于ASK编码,可以使用`plot(time, signal)`来将时间轴和ASK序列作为参数传递给`plot`函数。可以分别为FSKPSK编码生成相应的序列并进行绘制。 最后,使用`xlabel`、`ylabel`和`title`函数为波形图添加X轴标签、Y轴标签和标题,以便更好地标识和解释波形。 以上是利用MATLAB编写ASKFSKPSK编码波形图显示程序的简要步骤。根据具体的需求和编码参数,可能需要进行适当的调整和完善。希望对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值