在 MATLAB 中生成随机向量
Generating a random vector in MATLAB
我正在尝试生成随机频谱,然后使用 ifft
找到相应的时域向量。
我正在使用以下代码:
for i = 1:64
randNum = (rand() + 1i * rand())/sqrt(2); % Needs to be normalized by sqrt(2)
randFreq(i) = randNum;
end
randVec = ifft(randFreq);
请注意,我知道 mvnrnd
,但是由于技术原因,我 需要 使用 for
循环并单独生成每个元素。我也需要生成随机频谱然后用逆变换,不能直接在时域生成随机向量
如果我绘制随机向量的大小 (plot(abs(randVec))
),我 总是 得到这种形式的图表。
在 n=0
总是有一个尖峰,所有其他元素的幅度都小得多。我希望对发生这种情况的原因有所了解。
我的问题 也不是 , they are completely different questions that just happen to be on the same topic. I'm specifically asking about the behaviour of my ifft
. It's not a duplicate of spike in my inverse fourier transform 的重复问题。在那个问题中,尖峰可能是由数据的一些特殊性引起的,但在我的情况下,数据是完全随机的。
您为频率分量生成随机值的方式,它们不是关于零对称分布的。具体来说,得到的实部和虚部的理想平均值为.5/sqrt(2)
。实际(样本)平均值将接近于此。
当您应用 IDFT 时,所有频率的平均值对应于时域中的第一个样本。要查看此内容,请在 IDFT expression:
中设置 n = 0
所以你在第一个样本中得到一个更大的绝对值,因为频率的平均值比它大"should"。
我正在尝试生成随机频谱,然后使用 ifft
找到相应的时域向量。
我正在使用以下代码:
for i = 1:64
randNum = (rand() + 1i * rand())/sqrt(2); % Needs to be normalized by sqrt(2)
randFreq(i) = randNum;
end
randVec = ifft(randFreq);
请注意,我知道 mvnrnd
,但是由于技术原因,我 需要 使用 for
循环并单独生成每个元素。我也需要生成随机频谱然后用逆变换,不能直接在时域生成随机向量
如果我绘制随机向量的大小 (plot(abs(randVec))
),我 总是 得到这种形式的图表。
在 n=0
总是有一个尖峰,所有其他元素的幅度都小得多。我希望对发生这种情况的原因有所了解。
我的问题 也不是 ifft
. It's not a duplicate of spike in my inverse fourier transform 的重复问题。在那个问题中,尖峰可能是由数据的一些特殊性引起的,但在我的情况下,数据是完全随机的。
您为频率分量生成随机值的方式,它们不是关于零对称分布的。具体来说,得到的实部和虚部的理想平均值为.5/sqrt(2)
。实际(样本)平均值将接近于此。
当您应用 IDFT 时,所有频率的平均值对应于时域中的第一个样本。要查看此内容,请在 IDFT expression:
中设置 n = 0
所以你在第一个样本中得到一个更大的绝对值,因为频率的平均值比它大"should"。