我试图在matlab中测量随机过程的PSD,但我不知道该怎么做。我发布了完全相同的问题here,但我想我可能会有更多运气。
随机过程描述风速,并由实数向量表示。每个条目对应于空间中的风速,以m / s为单位。这些点相距0.0005米。如何测量和绘制PSD?让我们调用向量V
。我的第一个想法是使用
[p, w] = pwelch(V);
loglog(w,p);
但这是对的吗?问题是,我得到了一个解析表达式,PSD应该(在理论上)匹配。通过使用这两行代码绘制它,它看起来都是错误的。具体来说,它看起来好像需要翻译和缩放。除此之外,两者的形状相似。
更新
上面的图像实际上没有描述通过在单个矢量上使用pwelch
获得的PSD,而是描绘了200个矢量的PSD的平均值,因为这些矢量源于数值模拟。正如所建议的那样,我尝试按2 * pi / 0.0005进行缩放。我看到你实际上可以将此信息提供给pwelch
。所以我尝试使用代码
[p, w] = pwelch(V,[],[],[],2*pi/0.0005);
loglog(w,p);
代替。如下所示,它看起来更好。然而,它仍然不完美。这只是我应该期待的吗?顺便说一句,取广场不是答案。但感谢你的建议。首先,它应遵循Kolmogorov的-5/3定律,现在它(它遵循绿线,其斜率为-5/3)。我试图与之匹配的函数是Shkarofsky谱密度函数,它是Shkarofsky相关函数的一维傅里叶变换。是不是可以在网站上标记数学?
更新2:
我按照建议尝试使用[p, w] = pwelch(V,[],[],[],1/0.0005);
。但是你可能看起来仍然不太匹配。我很难准确地解释我在寻找什么。但我想要的(或者,我所期望的)是计算和分析PSD的下降同时发生,并以相同的速度下降。数据来自湍流模拟。分析表达式已经适合于湍流的实际测量,其中也存在这种倾角。我根本不是专家,但据我所知,由于空气的粘性,能量会消散,因此在小长度范围内会发生倾角。
答案 0 :(得分:1)
如何使用标准公式获得PSD
?我会这样做的:
Sxx(f) = (fft(x(t)).*conj(fft(x(t))))*(dt^2);
或
Sxx = fftshift(abs(fft(x(t))))*(dt^2);
然后,如果你真的需要,你可以考虑应用一个窗口标准,例如
只会以某种方式过滤您的PSD
。
答案 1 :(得分:0)
据推测,您需要将频率(波数)重新调整为1 / m的单位。
pwelch
的频率单位应该重新调整,因为documentation解释了:
W是PSD所在的归一化频率的向量 估计。 W具有rad / sample单位。
关闭袖口,我的猜测是比例因子是
scale = 1/0.0005/(2*pi);
或318.3(m ^ -1)。
至于强度,看起来像取平方根可能会有所帮助。也许你的等式报告强度,而不是PSD?
修改强>
正如您所指出的那样,由于分析和计算的PSD具有几乎相同的斜率,因此它们似乎遵循高达800 m ^ -1的类似幂律。我不确定你需要指数或补偿以满足特定模型的程度,我不熟悉这个特定的理论。
至于高波数的明显不一致性,我会指出你正在进入非常小的数字域,因此(1)浮点问题和(2)噪声可能潜伏。另一方面,在计算的PSD中非常漂亮的倾角看起来非常真实,但我没有解释它(也许你的噪音不是白色?)。
您可能希望在matlab中心查看this提交,因为它可能有用。
编辑#2
在检查pwelch
的文档后,您似乎应该通过1/0.0005
(采样率)而不是2*pi/0.0005
。这不应该影响斜率,但会影响截距。
答案 2 :(得分:0)
模拟结果中的PSD下降看起来与锯齿伪像类似 当我用数据插入原始数据时,我在我的数据中看到过 低阶方法。为了使这更清楚 - 说我的原始数据间隔为 0.002米,但在清理缺失数据的过程中,试图节省空间,无论如何, 我将这些数据线性插值到0.005米间距。频率响应 线性插值的表现并不好,并会引入峰和谷 在你频谱的高波数端。
光谱估计有不同的约定 - 是否波数 单位是1 / m,或弧度/米。单面光谱或双面光谱。
帮助pwelch
表示默认设置返回单侧频谱,即某些频段的bin 频率ω将包括+ω和-ω的功率密度。 您应该仔细检查您要比较的理想光谱 也是片面的光谱。否则,你需要一半的价值 单侧光谱得到代表a的+ω侧的值 双面光谱。
我同意Try Hard认为它是循环频率(通常是Hz,或者在这种情况下是1 / m) 应指定为pwelch。也就是说,返回的频率向量 来自pwelch的也是。分析 光谱公式通常用角频率来写,所以你会 我想确保你用弧度/米来评估它,但是要缩小到1 / m 用于绘图。