2

(免责声明:我曾考虑在 math.statsexchange 上发布此内容,但发现类似的问题已移至 SO,所以我在这里)

上下文:

我正在使用 fft/ifft 来确定随机变量总和的概率分布。因此,例如,我有两个均匀的概率分布——在最简单的情况下,区间 [0,1] 上有两个均匀分布。

因此,要获得从这两个分布中采样的两个随机变量之和的概率分布,可以计算每个概率密度的傅里叶变换的乘积。对这个产品做逆 fft,你会得到总和的概率密度。

一个例子:

function usumdist_example()

    x = linspace(-1, 2, 1e5);
    dx = diff(x(1:2));
    NFFT = 2^nextpow2(numel(x));

    % take two uniform distributions on [0,0.5]
    intervals = [0, 0.5;
                 0, 0.5];
    figure();
    hold all;
    for i=1:size(intervals,1)
        % construct the prob. dens. function
        P_x = x >= intervals(i,1) & x <= intervals(i,2);
        plot(x, P_x);

        % for each pdf, get the characteristic function fft(pdf,NFFT)
        % and form the product of all char. functions in Y
        if i==1
            Y = fft(P_x,NFFT) / NFFT;
        else
            Y = Y .* fft(P_x,NFFT) / NFFT;
        end
    end
    y = ifft(Y, NFFT);

    x_plot = x(1) + (0:dx:(NFFT-1)*dx);
    plot(x_plot, y / max(y), '.');

end

我的问题是,产生的概率的形状。窝点。功能完善。但是,x 轴不适合x我一开始创建的,而是移动了。在示例中,峰值在 1.5,而它应该是 0.5。

如果我添加第三个随机变量或修改x. 但我无法弄清楚如何。

恐怕这可能与我有负值的事实有关x,而傅立叶变换通常在frequencies < 0没有意义的时域/频域中工作。

我知道我可以找到例如峰值并将其转移到适当的位置,但看起来很讨厌且容易出错......

很高兴有任何想法!

4

1 回答 1

1

问题是您的 x 原点是 -1,而不是 0。您希望三角形 pdf 的中心为 0.5,因为这是统一 pdf 中心值的两倍。但是,正确的推理是:统一 pdf 的中心比最小 x 高 1.25,而三角形的中心在最小 x 上方 2*1.25 = 2.5(即 1.5)处得到。

换句话说:尽管您的原始 x 轴是 (-1, 2),但卷积(或 FFT)的行为就像是 (0, 3)。事实上,FFT 对您的 x 轴一无所知。它只使用 y 个样本。由于第一个样本的制服为零,因此当您进行卷积(或 FFT)时,宽度为 1 的零间隔被放大到其宽度的两倍。我建议在纸上绘制卷积以查看这一点(绘制原始信号,关于 y 轴的反射信号,替换后者并查看两者何时开始重叠)。因此,您需要对该x_plot行进行校正以补偿零间隔的这种增加的宽度:使用

x_plot = 2*x(1) + (0:dx:(NFFT-1)*dx);

然后plot(x_plot, y / max(y), '.')将给出正确的图表:

在此处输入图像描述

于 2013-11-21T11:02:30.163 回答