我需要用Python(Spyder)绘制以下3个信号。下面,我已经指出了我的代码需要绘制的信号的照片(我第一次成功地绘制了它。)
此外,代码需要绘制来自数组字[1,0,1,0,0,1,0,1,0,1,1,1,0,1]的平方信号(我还没想好怎么做)
最后,应根据上述两个信号绘制以下信号
在上一篇文章(堆栈溢出)中,我得到了一些帮助来绘制正方形信号。然而,我认为这不是这样做的方式,因为我收到以下错误,当我试图绘制第三个信号
ASK_signal=pliroforia*our_signal
ValueError: operands could not be broadcast together with shapes (1440000,) (250,)
有人能帮我解决这个问题吗
以下是我目前的代码:
import fft_modules
from fft_modules import *
import numpy as np
from numpy import pi, linspace, sin, cos, array
import matplotlib.pyplot as plt
from scipy import signal
from scipy import *
A=1
f=1000
T=1/f
B=f
Nyquist_Fs=2*B
Fs=100*Nyquist_Fs
Ts=T/10
Tmax=25*T
samples_per_period=T/Ts
total_samples=samples_per_period*(Tmax/T)
print("TS="+str(Ts))
print("T="+str(T))
t = linspace(0, Tmax, total_samples, endpoint=True)
#our_signal = signal.square(A*cos(2*pi*f*t))
our_signal = A*sin(2*pi*f*t)
plt.figure(1)
plt.plot(t,our_signal)
plt.xlabel('Χρόνος (sec) ->')
plt.ylabel ('Πλάτος (V)')
word = array([1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1])
Samples_per_bit=int(12/Ts)
pliroforia=[]
for i in range(0,len(word)):
table=np.ones(Samples_per_bit)
x=table*word[i]
pliroforia=np.concatenate((pliroforia,x))
t = linspace(0, Tmax, pliroforia.shape[0], endpoint=True)
plt.figure(2)
plt.plot(t,pliroforia)
plt.xlabel('Χρόνος (sec) ->')
plt.ylabel ('Πλάτος (V)')
ASK_signal=pliroforia*our_signal
plt.figure(3)
plt.plot(t,ASK_signal)
您的错误来自数组之间不兼容的形状。 在计算其乘积之前,必须确保
pliroforia
和our_signal
具有相同数量的元素我认为这就是您试图通过
for
循环实现的目标。 但它不应该像你期望的那样工作这里的问题是“重采样”(我不确定它是否正确,但它在搜索引擎中有帮助)。 有两个系列,从时间0到时间
Tmax
(这里是0.25),一个有total_samples
(250)个样本,另一个只有12个样本。 你想重新采样你的第二个系列多达250个样品,以有兼容的形状这是一个常见的问题,大多数好的库都有“重采样”操作。 在scipy中,它被称为^{} 。
你用你的“短”序列的x和y值来调用它,它给了你一个函数,你可以用一个新的x值数组来调用这个函数,在这个数组中你想对你的初始序列进行采样(这不是很清楚,看看代码,一个值几千字的例子)
下面是结果代码:
以及由此产生的情节
编辑
我只是注意到我的文字信号和你期望的不符。 这是由“坏”x值生成引起的。
word
的12个样本不覆盖整个duration
要解决这个问题,您可以使用更多参数(我认为这在语义上更正确):
另一个可能更简单但意义不大的解决方案是向
word
添加一个样本,使其覆盖整个持续时间:现在,signal这个词更像您所期望的(以一个完整的1位开始和结束):
编程相关推荐