我有一个如下所示的功能
f(t) = 1 : if 2t rounded down to the next lowest integer is even
f(t) = -1 : if 2t rounded down to the next lowest integer is odd
我试图最终对函数进行傅立叶变换,但首先我需要编写一个程序来创建一个N = 1000个元素的数组,其中包含来自单个周期的1000个等间距样本功能是方波。
如何创建此阵列?
答案 0 :(得分:1)
可以通过这种方式定义函数。
def f(t):
return 1 if int(2 * t) % 2 == 0 else -1
如果您使用 python 2.x ,则可以使用地图创建列表。
N = 1000
sample = map(f, xrange(N)) # Or alternatively map(lambda n: f(n), xrange(N))
答案 1 :(得分:1)
当您要求方形函数在一个周期内的值时,首先必须为时间样本创建值。从t=0
开始,您提到的函数的周期为1,在t=1
函数重复之后。
为了创建一个介于0和1之间的等间距值的序列,有几种选择,但是一个紧密的值是numpy.linspace。第一个参数是循环的开始时间,第二个参数是循环的结束,第三个参数是样本的数量(等间距)。通过使用此功能,您可以创建t_samples
。
之后,您只需要使用square_func
中存储的值提供方波函数(下面代码中的t_samples
)。
请参阅此处的示例,了解如何使用它:
import numpy
def square_func(t):
if int(2*t)%2 == 0:
return 1
else:
return -1
t_samples = numpy.linspace(0.0,1.0,1000)
samples = [square_func(i) for i in t_samples]
变量samples
存储一个列表,其中包含您需要的值(其中一半为'1',另一半为'-1',因为我们指的是一个循环)。使用此代码生成的函数循环如下图所示:
答案 2 :(得分:0)
假设您有一个返回样本值的方法:
import math
def f(t):
"""
f(t) = 1 if ⌊2t⌋ is even, −1 if ⌊2t⌋ is odd
"""
if math.floor(2 * t) % 2 == 0:
return 1
else:
return -1
生成阵列的最简单方法是:
a = [f(n) for n in xrange(1000)]
注意:这假设是Python 2.x,如果是Python 3.x
,则使用范围答案 3 :(得分:0)
我最终以这种方式回答了
F=zeros(1000)
F[0:500]=1
F[500:1000]=-1