Python课程|上机小任务3.3-随机数及信号调制练习

基本要求:

●构造一个大小为20(共20 个数)的随机0、1 序列(0、1 概率相等),然后用该序列对正弦波sin(x)进行相位调制,要求sin(x)每变化 1 个周期(2π),其相位就根据0、1 序列的值调整一次,其中,若对应序列值为0 则相位调整量为0,若对应序列值为1 则相位调整量为π。将随机序列打印出来,再将所构造的已调信号绘制出来。

例如:

若所构造0、1 序列前四个值为0、1、1、0,则经过相位调制后的波形应具有如下形式: 当x 在[0,2π) 内时,对应波形为 sin(x);当 x 在[2π,6π)内时,对应波形为sin(x+π); 
当x 在[6π,8π)内时,对应波形为 sin(x);... 

高级要求:

●再构造一个大小为100(共100 个数)的随机 0、1 序列(0、1 概率相等),然后用该序列生成一个简易的频移键控信号,要求每个序列值控制的时长均为1s(1秒),且序列值为0时,生成波形sin(2πt),序列值为1 时,生成波形 sin(4πt)。注意:这里的t 为时间变量,单位:s。将随机序列打印出来,再将所构造的频移键控信号绘制出来(注意横坐标单位:s)。
【要求时间变量 t 的分辨间隔(相邻两点对应的时间间隔)不大于 0.01s】


例如:

所构造0、1 序列前四个值为0、1、1、0,则经过频移键控后的波形应具有如下形式: 
当 t 在[0,1)内时,对应波形为 sin(2πt);当 t 在[1,3)内时,对应波形为 sin(4πt);当 t 在[3,4)内时,对应波形为sin(2πt);... 

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from mpl_toolkits import mplot3d


# 生成20随机的等概率的0 1 数字
a = np.random.rand(20)
b = list(a)

num_zeros = 0
num_ones = 0
num = []
for i in b:
    if i < 1/2:
        num.append(0)
        num_zeros += 1
    else:
        num.append(1)
        num_ones += 1

print(num)



# 当数字为0时形成的图形
def paint_0(n):

    x = np.arange(n * np.pi, (n + 2) * np.pi, 0.01)
    y = np.sin(x)
    plt.figure(1)
    plt.plot(x, y, color='b')

# 当数字为1时形成的图形
def paint_1(n):

    x = np.arange(n * np.pi, (n + 2) * np.pi, 0.01)
    y = np.sin(x + np.pi)
    plt.figure(1)
    plt.plot(x, y, color='b')



n = 0
for i in num:
    if i == 0:
        paint_0(n)
        n += 2
    else:
        paint_1(n)
        n += 2


plt.show()


# 生成20随机的等概率的0 1 数字
a1 = np.random.rand(100)
b1 = list(a1)

num_zeros1 = 0
num_ones1 = 0
num1 = []
for i in b1:
    if i < 1/2:
        num1.append(0)
        num_zeros1 += 1
    else:
        num1.append(1)
        num_ones1 += 1

print(num1)



def paint_2t(n):
    t = np.arange(n, n + 1, 0.01)
    y = np.sin(2*np.pi*t)
    plt.figure(2, dpi=300, figsize=(24, 8))
    plt.plot(t, y, color='b')


def paint_4t(n):
    t = np.arange(n, n + 1, 0.01)
    y = np.sin(4 * np.pi * t)
    plt.figure(2, dpi=300, figsize=(24, 8))
    plt.plot(t, y, color='b')


n1 = 0
for i in num1:
    if i == 0:
        paint_2t(n1)
        n1 += 1
    else:
        paint_4t(n1)
        n1 += 1

plt.show()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值