(免责声明:我考虑在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
不会感。
我知道我可以找到,例如高峰并将其转移到适当的位置,但看起来很讨厌且容易出错...
很高兴任何想法!
答案 0 :(得分:1)
问题是你的x原点是-1而不是0.你希望三角形pdf的中心是.5,因为它是统一pdf中心值的两倍。但是,正确的推理是:均匀pdf的中心比最小x高1.25,并且你得到三角形的中心在最小x(即1.5)之上2 * 1.25 = 2.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), '.')
会给出正确的图表: