问题标签 [spectral-density]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1924 浏览

matlab - 在 Octave 中实现 Matlab 的 avgpower?

伙计们,

Matlab 2007b (7.5.0) 有一个 avgpower 函数。见这里

“avgpower 方法使用积分的矩形近似值,使用存储在对象中的 PSD 数据计算信号的平均功率。

“avgpower 方法返回信号的平均功率,即 PSD 曲线下的面积。”

示例调用:

我希望在 Octave 中复制这种功能。功能“pwelch”似乎是一种可能性。以机智:

现在我认为频谱具有PSD的y值,而频率具有x值。所以,我可以在频率中找到介于“下”和“上”之间的样本,并且......呃,平均光谱中的相应值?我对此很模糊。

此外,“频率”中的值不一定对应于我想要的上限和下限,我不知道该怎么做。如果下部或上部正好位于宽频率箱的中间怎么办?例如,我是否需要半个 bin(即线性插值)?

也有可能从某种 FFT 中获取单个值,而不是使用 pwelch。

建议?

0 投票
2 回答
666 浏览

python - 调试数值稳定性问题的策略?

我正在尝试为 Python 编写 Wilson 的谱密度分解算法 [1] 的实现。该算法迭代地将 [QxQ] 矩阵函数分解为其平方根(它是用于谱密度矩阵的 Newton-Raphson 平方根查找器的一种扩展)。

问题是我的实现只收敛于大小为 45x45 或更小的矩阵。所以经过 20 次迭代后,矩阵之间的平方和差约为 2.45e-13。但是,如果我输入大小为 46x46 的输入,它直到第 100 次左右迭代才会收敛。对于 47x47 或更大,矩阵永远不会收敛;误差在 100 到 1000 之间波动大约 100 次迭代,然后开始快速增长。

你将如何尝试调试这样的东西?似乎没有任何具体的疯狂点,而且矩阵太大,我无法真正尝试手动进行计算。有没有人有提示/教程/启发式来找到像这样奇怪的数字错误?

我以前从未处理过这样的事情,但我希望你们中的一些人...

谢谢, - 丹

[1] GT威尔逊。“矩阵谱密度的分解”。SIAM J. 应用程序。数学(第 23 卷,第 4 期,1972 年 12 月)

0 投票
0 回答
2188 浏览

fft - 解释 jTransform FFT 结果

我正在使用 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) 计算真实数据的一维前向 DFT,将结果留在 a 中。输出数据的物理布局如下:

如果 n 是偶数

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

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

a[1] = Re[n/2]

如果 n 是奇数,那么

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]

此方法仅计算实际变换的一半元素。另一半满足对称条件。如果您想要完整的真实前向变换,请使用 realForwardFull。要取回原始数据,请在此方法的输出上使用 realInverse。

参数: a - 要转换的数据 ...................................

那么输出数字是多少?这些值是什么意思?任何帮助表示赞赏。

0 投票
3 回答
8350 浏览

fft - jTransforms DoubleFFT_1D 的功率谱密度

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

数据示例如下:

我在 jTransforms 中使用 DoubleFFT_1D 函数。数据输出如下:

我无法解释输出。我知道输出数组中的第一个元素是 10 个输入的总和(10952)。它是

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

jTransform 函数的文档状态(其中 a 是数据集):

public void realForward(double[] a)计算真实数据的一维前向 DFT,将结果保存在 . 输出数据的物理布局如下:

如果 n 是偶数

如果 n 是奇数,那么

此方法仅计算实际变换的一半元素。另一半满足对称条件。如果您想要完整的真实前向变换,请使用 realForwardFull。要取回原始数据,请在此方法的输出上使用 realInverse。

参数:a - 要转换的数据

现在使用上面的方法:(因为我的数据数组的长度是10,所以使用了“n是偶数”的方法)

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

似乎应该稍微纠正输出:(我错了吗?)

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

要获得 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]。因此要计算功率谱:

因此:

一些问题。这个数据看起来正确吗?我在正确的轨道上吗?那么这个光谱数据会不会像这样绘制出来:

我走远了吗?我的目标是制作一个从 0 到 0.5Hz 的功率谱密度条形图

0 投票
1 回答
2988 浏览

matlab - 时间序列的光谱相干性

我有两个时间序列数据,一个是水温,另一个是气温(一年的每小时测量值)。两个测量是同时进行的,因此向量的大小相同。命令 corrcoef 说明它们的相关性等于 ~0.9。

现在我正在尝试一种不同的方法来找到我认为光谱相干性的相关性。据我了解,为了做到这一点,我应该找到每个时间序列的自光谱密度?(即水温和气温),然后找到它们之间的相关性?

由于我是信号处理的新手,所以我希望就最好的方法提供一些建议!

0 投票
1 回答
538 浏览

signal-processing - 完美正弦波密度谱中的未知噪声

有些事情我不明白:我计算了信号的频谱密度(通过计算它的 FFT),这似乎工作正常,但它一直有某种背景噪声,尽管我是在一个完美的正弦波上做的我自己生成的 2 个频率(10 和 30Hz)。

当然,噪音并不算太烦人,因为它只有在对数刻度下才能看到,但甚至,它是从哪里来的?这正常吗?我的信号或任何地方有错误吗?

10 + 30Hz 正弦波的能谱密度

0 投票
2 回答
45350 浏览

r - R中的快速傅里叶变换

我有一个数据集,其中包含动物在 12 个月内每小时访问的次数。我想使用快速傅立叶变换来检查周期性模式和周期性。过去,我为此使用过 Statistica;但是,我想使用 R 来绘制频谱密度与周期的关系图。有没有一种简单的方法可以在 R 中做到这一点?如果可能,我想确定 12 小时和 24 小时的活动高峰。

0 投票
2 回答
1121 浏览

android - 生成特定屏幕尺寸密度的图像

我正在构建一个应用程序,其中包含一个在整个应用程序视图中使用的图像文件。我对 android.developers 中关于将图像缩放到 Android 中不同屏幕密度的信息有点困惑ldpi = 0.75mdpi = 1.0; hdpi = 1.5; xhdpi = 2.0.

我的第一个想法是,我所要做的就是将图像文件插入到适当的密度文件中,然后 Android 会负责缩放;但我不觉得这是正确的。我的问题是:

如果我错了,我必须自己将图像缩放到适当的密度,然后将它们保存到不同的密度文件中,我该怎么做?我可以在 Photoshop 中做到这一点吗?我想是的,但我不确定。如果是这样,我将如何缩放图像?谢谢你的帮助!

0 投票
3 回答
6278 浏览

matlab - 如何在matlab中测量功率谱密度?

我正在尝试在 matlab 中测量随机过程的 PSD,但我不知道该怎么做。我在这里发布了完全相同的问题,但我想我可能在这里有更多的运气。

随机过程描述风速,并由实数向量表示。每个条目对应于空间中某个点的风速,以 m/s 为单位测量。这些点相距 0.0005 m。如何测量和绘制 PSD?我们称之为向量V。我的第一个想法是使用

但这是正确的吗?问题是,我得到了一个解析表达式,PSD 应该(理论上)匹配。通过用这两行代码绘制它,它看起来全错了。具体来说,它看起来好像需要平移和缩放。除此之外,两者的形状相似。

在此处输入图像描述

更新: 上面的图像实际上并没有描述通过使用pwelch单个向量获得的 PSD,而是 200 个向量的 PSD 的平均值,因为这些向量源于数值模拟。正如建议的那样,我尝试按 2*pi/0.0005 进行缩放。我看到您实际上可以将此信息提供给pwelch. 所以我尝试使用代码

反而。如下所示,它看起来好多了。然而,它仍然不完美。这只是我应该期待的吗?顺便说一句,取平方根不是答案。不过谢谢你的建议。一方面,它应该遵循 Kolmogorov 的 -5/3 定律,它现在确实如此(它遵循绿线,斜率为 -5/3)。我试图与之匹配的函数是 Shkarofsky 谱密度函数,它是 Shkarofsky 相关函数的一维傅里叶变换。不能在网站上标记数学吗?

在此处输入图像描述

更新2: 我已经尝试[p, w] = pwelch(V,[],[],[],1/0.0005);按照我的建议使用。但正如你所见,它仍然不完全匹配。我很难准确地解释我在寻找什么。但我想要(或者,我所期望的)是计算和分析 PSD 的下降同时发生,并以相同的速度下降。数据来自湍流模拟。解析表达式已拟合到湍流的实际测量值,其中也存在这种下降。我根本不是专家,但据我所知,下降发生在较小的长度尺度上,因为由于空气的粘性,能量会消散。

在此处输入图像描述

0 投票
0 回答
204 浏览

r - 尝试在光谱密度方程上应用非函数

我正在尝试使用 R 找到 MA(2) 模型的谱密度。这是我想出的公式,但 R 告诉我存在“尝试应用非功能”错误。找不到我哪里出错了。帮助。

还定义了 sigma、theta1、theta2 和 omega。我的错误在哪里?谢谢你。