在MATLAB

时间:2018-01-03 22:11:28

标签: algorithm matlab math signal-processing fft

我尝试生成随机频谱,然后使用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)))的幅度,我总是得到这种形式的图形。

enter image description here

n=0总是出现尖峰,所有其他元素的数量都要小得多。我希望能够深入了解为什么会发生这种情况。

我的问题是Create random values in vector Matlab的副本,它们是恰好在同一主题上的完全不同的问题。我特地询问了ifft的行为。它也不是spike in my inverse fourier transform的副本。在那个问题中,峰值可能是由数据的某些特性造成的,但在我的例子中,数据是完全随机的。

1 个答案:

答案 0 :(得分:5)

为频率分量生成随机值的方式,它们不是关于零对称分布的。具体地,所获得的实部和虚部具有.5/sqrt(2)的理想平均值。实际(样本)平均值将接近平均值。

应用IDFT时,所有频率的平均值对应于时域中的第一个样本。要查看此内容,请在IDFT expression

中设置 n = 0

enter image description here

所以你在第一个样本得到一个更大的绝对值,因为平均过频率大于“应该”。