仅使用 numpy,有没有办法创建方波?

Posted

技术标签:

【中文标题】仅使用 numpy,有没有办法创建方波?【英文标题】:Using only numpy, is there a way to create a square wave? 【发布时间】:2021-03-06 12:14:48 【问题描述】:

我尝试过使用掩码并制作 x = [0,0.5,0.51,1,1.01], y = [1,1,-1,-1,1] 之类的列表当然可以,但是很乏味,而且不就像我想做一个从 x = 0 到 5 的方波一样好。

【问题讨论】:

也许dsp.stackexchange.com/a/62863 【参考方案1】:

你可以写一个像这样的小函数来填充 x 和 y


import matplotlib.pyplot as plt
import math

def SquareWave(high, low, start, end, width):
    print("Square Wave")
    ##Calculate how many cycles
    ncycles = int(math.ceil((end - start)/width)) #Round up
    print(ncycles)
    x=[]
    y=[]
    x.append(start)
    y.append(high)
    xstep = width / 2 
    for n in range(ncycles):
        start += xstep #Increment by the step width
        x.append(start)
        y.append(high)
        x.append(start)
        y.append(low)
        start += xstep #Increment by the step width
        x.append(start)
        y.append(low)
        x.append(start)
        y.append(high)
    return(x,y)
        
        

x,y = SquareWave(1,-1, 0, 5, 1)

plt.plot(x,y)

【讨论】:

【参考方案2】:

:一般解决方案:

import matplotlib.pyplot as plot 
import numpy as np 

def sq(x, y):
    
    mindiff = min([x[i+1]-x[i] for i in range(4)])
    up_x = np.arange(x[0], x[-1], mindiff)
    up_y = list(map(lambda i: y[sum(i > x)], up_x))
    print(up_y)
    plot.plot(up_x, up_y)
    plot.show()

x = [0,0.5,0.51,1,1.01]
y = [1,1,-1,-1,1] 
sq(x, y)


:特定于您的代码:

import matplotlib.pyplot as plot 
import numpy as np 
  
up_t = list(np.linspace(x[0], x[1], 100)) + list([0.5])+list([0.51])+list(np.linspace(x[2], x[3], 100)) + list([1.01])
up_y = [1 for i in range(100)] + [1, -1]+ [-1 for i in range(100)] + [1]

t = np.array(up_t)
plot.plot(up_t, up_y)
plot.show()

【讨论】:

以上是关于仅使用 numpy,有没有办法创建方波?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建具有随机周期的方波?

使用 Numpy 手动反转 FFT

有没有办法堆叠两个 tensorflow 数据集?

Maxpooling 2x2 数组仅使用 numpy

如何在python numpy中创建随机正交矩阵

有没有办法使用 Vuze 仅限制 1 个种子的下载带宽