如何在脉冲符号上使用Numpy.FFT

2024-06-27 02:14:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚开始学习numpy.fft,所以请提前道歉。 我有一个由1000个1和0的元素组成的数组,代表1000毫秒的脉冲输入,包括真和假。我想在这个数组上执行rfft。举个简单的例子,我创建了一个数组,它每3个元素有一个1,否则为0:

freq = 3
for j in range(0, 1000):
    if freq != 0 and (((j + 1) % freq) == 0):
        arr3hz.append(1)
    else:
        arr3hz.append(0)

我本以为rfft会给我3Hz,但我使用了以下代码:

n = len(arr3hz)
d = 1 / 1000
hs = np.fft.rfft(arr3hz)
fs = np.fft.rfftfreq(n, d)
amps = np.absolute(hs)

for j in range(0, len(fs)):
    fw.write("Freq: %d Amp: %f\n" % (fs[j], amps[j]))

在我的书面文件中,我只是看到随机频率元素与随机振幅,这是我无法理解的。我使用numpy.rfft有什么问题?我也不确定在nd以及这样的数组中使用什么


Tags: infftnumpy元素forlennprange
1条回答
网友
1楼 · 发布于 2024-06-27 02:14:31

这里发生了一些事情

  1. 第一块给出了3 ms的周期,即333.33 Hz的频率
  2. 平均值不是零,所以也会有一个零频率分量
  3. 1000毫秒不能被3毫秒整除。离散傅里叶变换假定整个信号以等于窗口长度(1000毫秒)的周期重复。这意味着你有332个3毫秒的间隔和1个4毫秒的间隔。因为333赫兹的频率不是周期性的,所以会有频率的扩展

您对nd使用了正确的值。
一般来说,我发现打印输出比打印输出更有帮助

import matplotlib.pyplot as plt
plt.plot(fs, amps)

看到了吗

pulse_freq_plot

相关问题 更多 >