在MATLAB中生成随机向量

5
我将尝试生成一个随机频谱,然后使用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处总是会出现一个峰值,而其他所有元素的大小显著较小。我希望能了解这种情况发生的原因。

我的问题不是在Matlab中创建随机向量的重复,它们是完全不同的问题,只是碰巧涉及到相同的主题。我特别询问我的ifft的行为。这也不是我的反傅里叶变换中出现峰值的重复。在那个问题中,峰值可能是由于数据的某些特殊性引起的,然而在我的情况下,数据是完全随机的。


1
@galoget 你在干嘛?你有看到我的问题吗?虽然它们都是关于生成随机向量的,但方式完全不同... - Farhad
@LeanderMoesinger 我看了一下那个问题,但我认为那不是同样的情况。在那个问题中,尖峰可能是由于他的数据有些特殊性造成的,然而在我的情况下,数据是完全随机的。 - Farhad
1个回答

5
生成频率分量的随机值的方式不是关于零对称分布。具体地,得到的实部和虚部的理想平均值为.5/sqrt(2)。实际(样本)平均值将接近于此。
当你应用IDFT时,所有频率的平均值对应于时间域中的第一个样本。要看到这一点,请在IDFT表达式中将n = 0:
enter image description here 因此,在第一个样本处会得到更大的绝对值,因为频率上的平均值比它“应该”的要大。

好的,我该如何解决这个问题呢?(我想通过使其关于0对称来解决?)由于期望值运算符是线性的,并且rand具有零均值,所以我假设randNum也具有零均值。 - Farhad
1
"rand" 的平均值为零。没门。 - Luis Mendo
你是完全正确的!我一直以为 rand 函数从正态分布中采样!这修复了我的问题,非常感谢你。 - Farhad
2
@FarhadYusufali randn 是正态分布(均值为0),rand 是均匀分布(均值为0.5)。你可能想要使用 randn - Luis Mendo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接