绘制来自二进制数组[1、0、1、0、0、1、0、1、1、1、0、1]的平方信号?

时间:2019-12-30 13:38:55

标签: python matplotlib

我需要在Python(Spyder)中绘制两个信号。在下面,我已经指出了我的代码需要绘制的信号照片。 (我设法成功绘制了第一个。)

enter image description here

但是,我无法从数组字[1、0、1、0、0、1、0、1、1、1、0、1]绘制平方信号。

enter image description here

有人可以帮我弄清楚如何绘制上述信号吗?

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)')
#plt.ylim(-1, 1)
#plt.grid('on')


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))

plt.figure(2)
plt.plot(t,pliroforia)
plt.xlabel('Χρόνος (sec) ->')
plt.ylabel ('Πλάτος (V)')

3 个答案:

答案 0 :(得分:2)

您可以使用matplotlib step函数代替绘图。

import numpy as NP
import pylab as plt
plt.figure(2)
#Padded data with a zero so it looks like your plot.
word = NP.array([0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1])
plt.step(NP.arange(0, len(word)), word)

Example step image

答案 1 :(得分:0)

简单的解决方案,您可以在其中生成图形的每个点:

%matplotlib inline
import matplotlib.pyplot as plt

word =  [1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1]

# for proper scaling
const = 48000

graph_data_x = []
graph_data_y = []
for i in range(len(word)):
    graph_data_x.append(i / const)
    graph_data_x.append((i + 1) / const)
    graph_data_y.append(word[i])
    graph_data_y.append(word[i])


plt.plot(graph_data_x, graph_data_y)

完全满足您的需求

enter image description here

答案 2 :(得分:0)

您有两个大小不同的数组。 尝试以下代码:

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)')
#plt.ylim(-1, 1)
#plt.grid('on')


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)')