我尝试生成随机频谱,然后使用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
总是出现尖峰,所有其他元素的数量都要小得多。我希望能够深入了解为什么会发生这种情况。
我的问题是不是Create random values in vector Matlab的副本,它们是恰好在同一主题上的完全不同的问题。我特地询问了ifft
的行为。它也不是spike in my inverse fourier transform的副本。在那个问题中,峰值可能是由数据的某些特性造成的,但在我的例子中,数据是完全随机的。
答案 0 :(得分:5)
为频率分量生成随机值的方式,它们不是关于零对称分布的。具体地,所获得的实部和虚部具有.5/sqrt(2)
的理想平均值。实际(样本)平均值将接近平均值。
应用IDFT时,所有频率的平均值对应于时域中的第一个样本。要查看此内容,请在IDFT expression:
中设置 n = 0所以你在第一个样本得到一个更大的绝对值,因为平均过频率大于“应该”。