gpt4 book ai didi

fft - 来自 jTransforms DoubleFFT_1D 的功率谱密度

转载 作者:行者123 更新时间:2023-12-03 23:51:19 25 4
gpt4 key购买 nike

我正在使用 Jtransforms java 库对给定的数据集执行分析。

数据示例如下:

980,988,1160,1080,928,1068,1156,1152,1176,1264

我在 jTransforms 中使用 DoubleFFT_1D 函数。
数据输出如下:
10952, -152, 80.052, 379.936, -307.691, 12.734, -224.052, 427.607, -48.308, 81.472

我在解释输出时遇到问题。我知道输出数组中的第一个元素是 10 个输入的总和 (10952)。它是

我不明白的输出数组的其他元素。最终,我想在图形上绘制输入数据的功率谱密度,并找到 0 到 0.5 Hz 之间的数量。

jTransform 函数的文档说明(其中 a 是数据集):

public void realForward(double[] a) computes 1D forward DFT of real data leaving the result in a . The physical layout of the output data is as follows:

if n is even then

a[2*k] = Re[k], 0 <= k < n / 2
a[2*k+1] = Im[k], 0 < k < n / 2
a[1] = Re[n/2]

if n is odd then

a[2*k] = Re[k], 0 <= k < (n+1)/2
a[2*k+1] = Im[k], 0 < k< (n-1)/2
a[1] = Im[(n-1)/2]

This method computes only half of the elements of the real transform. The other half satisfies the symmetry condition. If you want the full real forward transform, use realForwardFull. To get back the original data, use realInverse on the output of this method.

Parameters: a - data to transform



现在使用上面的方法:(因为我的数据数组的长度是10,所以使用了“n is even”方法)
Re[0] = 10952
Re[1] = 80.052
Re[2] = -307.691
Re[3] = -224.052
Re[4] = -48.308
Re[5] = 12.734

Im[0] = -152
Im[1] = 379.936
Im[2] = 12.734
Im[3] = 427.607
Im[4] = 81.472

所以一些问题:
这个输出看起来正确吗?在我看来, Re[0] 不应该是 10952,它是原始数组中所有元素的总和。

似乎应该稍微更正输出:(我错了吗?)
Re[0] = 80.052
Re[1] = -307.691
Re[2] = -224.052
Re[3] = -48.308
Re[4] = -152

Im[0] = 379.936
Im[1] = 12.734
Im[2] = 427.607
Im[3] = 81.472

现在使用论坛中发布的以下方法:

要获得 bin k 的大小,您需要计算 sqrt(re * re + im * im) ,其中 re, im 是 bin k 的 FFT 输出中的实部和虚部。

对于您的特定 FFT re[k] = a[2*k] and im[k] = a[2*k+1] .因此要计算功率谱:
for k in 0 to N/2 - 1
{
spectrum[k] = sqrt(sqr(a[2*k]) + sqr(a[2*k+1]))
}

因此:
spectrum[0] = 388.278
spectrum[1] = 307.955
spectrum[2] = 482.75
spectrum[3] = 94.717

一些问题。这个数据看起来正确吗?我在正确的轨道上吗?
然后这个频谱数据会绘制出这样的东西:
388.278 at .125 Hz
307.955 at .25 Hz
482.75 at .375 Hz
94.717 at .5 Hz

我离题了吗?我的目标是生成一个从 0 到 0.5Hz 的功率谱密度条形图

最佳答案

我认为您需要按如下方式解释输出数据:

10952       Re[0] = sum of all inputs = DC component
-152 Re[5] - see note about a[1] being special - there is no Im[0]
80.052 Re[1]
379.936 Im[1]
-307.691 Re[2]
12.734 Im[2]
-224.052 Re[3]
427.607 Im[3]
-48.308 Re[4]
81.472 Im[4]

因此,幅度为:
spectrum[0] = 10952
spectrum[1] = sqrt(80.052^2 + 379.936^2) = 388.278
spectrum[2] = sqrt(-307.691^2 + 12.734^2) = 307.427
spectrum[3] = sqrt(-224.052^2 + 427.607^2) = 482.749
spectrum[4] = sqrt(-48.308^2 + 81.472^2) = 94.717

[抱歉,我现在有两个不同的答案 - 我认为在我研究新答案时,两个相关的问题合并了]

关于fft - 来自 jTransforms DoubleFFT_1D 的功率谱密度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5010261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com