我想要实现的最终目标是生成十分钟的时间序列:要实现这一目标,我必须执行FFT
操作,这是我一直磕磕绊绊的一点。
通常,目标时间序列将被指定为两个术语的总和:稳定组件U(t)
和波动组件u'(t)
。那是
u(t) = U(t) + u'(t);
一般来说,我的代码遵循以下过程:
1)给定数据
time = 600 [s];
Nfft = 4096;
L = 340.2 [m];
U = 10 [m/s];
df = 1/600 = 0.00167 Hz;
fn = Nfft/(2*time) = 3.4133 Hz;
这意味着我的频率数组应如下布局:
f = (-fn+df):df:fn;
但是,我没有使用整个f
数组,而是只使用正半数:
fpos = df:fn = 0.00167:3.4133 Hz;
2)频谱定义
我定义了某个光谱形状,应用以下关系
Su = (6*L*U)./((1 + 6.*fpos.*(L/U)).^(5/3));
3)随机阶段生成
然后,我必须生成一组具有确定分布的complex
个样本:在我的情况下,随机阶段将接近标准高斯分布(mu = 0, sigma = 1
)。
在MATLAB
我致电
nn = complex(normrnd(0,1,Nfft/2),normrnd(0,1,Nfft/2));
4)应用随机阶段
要应用随机阶段,我就这样做
Hu = Su*nn;
此时开始我的痛苦!
到目前为止,我只生成Nfft/2 = 2048
个复杂样本,占fpos
个内容。因此,仍然缺少占f
的负半部分的内容。为了解决这个问题,我想要合并Hu
的真实和虚构部分,以获得Huu
Nfft = 4096
信号Hu
1}}样本和所有真实值。
但是,通过使用此合并过程,将不会表示 0 频率顺序,因为fpos
的虚构部分是为{定义的{1}}。
那么,如何通过将程序保持为我迄今为止提出的程序来解释 0-strong 顺序呢?