【问题标题】:Generating a random vector in MATLAB在 MATLAB 中生成随机向量
【发布时间】:2018-01-03 22:11:28
【问题描述】:

我正在尝试生成一个随机频谱,然后使用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 的副本。在那个问题中,峰值可能是由数据的某些特殊性引起的,但在我的情况下,数据是完全随机的。

【问题讨论】:

  • @galoget 什么?你有没有读过我的问题?他们都询问生成随机向量,但方式完全不同......
  • @LeanderMoesinger 我看了那个问题,但我不认为这是一回事。在那个问题中,峰值可能是由他的数据的一些特质引起的,但在我的情况下,数据是完全随机的。

标签: algorithm matlab math signal-processing fft


【解决方案1】:

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

当您应用 IDFT 时,所有频率的平均值对应于时域中的第一个样本。要看到这一点,请在 IDFT expression 中设置 n = 0:

因此,您在第一个样本处获得更大的绝对值,因为频率上的平均值大于“应该”。

【讨论】:

  • 很公平,我将如何解决这个问题? (通过使其关于 0 对称,我想?)由于期望值运算符是线性的,并且 rand 的均值为零,我假设 randNum 的均值也为零。
  • rand 的均值为零不可能
  • 你完全正确!我认为rand 是从正态分布中采样的!这解决了我的问题,非常感谢。
  • @FarhadYusufali randn 是正常的(0 平均值),rand 是均匀的(0.5 平均值)。你可能想要randn
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
相关资源
最近更新 更多