为方波函数的值创建数组

时间:2015-12-06 18:40:25

标签: python arrays fft

我有一个如下所示的功能

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个等间距样本功能是方波

如何创建此阵列?

4 个答案:

答案 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',因为我们指的是一个循环)。使用此代码生成的函数循环如下图所示:

enter image description here

答案 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