对 ode23 中的解数据使用 fft 命令

问题描述 投票:0回答:1

我正在使用 $N=256$ 网格点求解离散 ODE 系统,$L = 256$ 是域的长度。空间网格是等距的

-L/2:1:L/2-1
使用 Matlab 的
ode23
求解器,得到的解向量
u
是一个
2177 x 256
矩阵,根据文档,其中
u
中的每一行对应于列向量中的一个时间
t
。也就是说,
u
有 $256$ 个组件,每行只是一个时间片。

我想计算功率谱密度 $|\hat{u}(t)|^2$ 将其与从 $-\pi$ 到 $\pi$ 的离散波数 $\kappa$ 进行绘制。

根据

fft(X,n)
文档,

如果 X 是矩阵,则每一列都被视为向量情况。 如果 X 是向量,则 fft(X) 返回向量的傅立叶变换 矢量。

令我困惑的是,我的解决方案向量中有多个组件,这些组件与我读过的示例不同。要根据需要使用

fft
命令,我:

  1. 设置
    n = length(t) = 2177
    并使用
    uhat=fft(u,n)
    ? PSD 将是
    PSD = uhat.*conj(uhat)/n
    ,我们除以
    n
    进行标准化。或者我会使用
    fft(u',n)
  2. 如何根据波数绘制 PSD?
matlab
1个回答
0
投票

关于你的第一个问题,你应该从行中取出

fft
n
只是
fft
输出的大小,决定你的输出频率分辨率,这意味着如果你放
n=2048
,之间的频率距离输出
fft
结果是
Fs/2048
,其中
Fs
是采样频率。所以总的来说,您应该这样做
fft(u', n)
,其中 n 不需要等于您的样本量。

对于第二个问题,您的输出结果频率在

[-Fs/2:Fs/n:Fs/2)
范围内,除以
Fs
并乘以
2pi
将得到
kappa
轴,
[-pi:2pi/n:pi]

© www.soinside.com 2019 - 2024. All rights reserved.