(Отказ от ответственности: Я думал об этой публикации на math.statsexchange, но нашел подобные вопросы там, которые были перемещены так, поэтому я здесь)«Частота» сдвиг в дискретной FFT в MATLAB
Контекст:
Я использую 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
не имеют смысла.
Я знаю, что мог найти, например. пик и сдвинуть его в нужное место, но кажется неприятным и подверженным ошибкам ...
Рад о любых идеях!
Awesome! Так как приложение должно быть более общим - действительно ли '2' просто соединяется с числом сверток, а значит, и с pdf-файлами в моем случае? Сначала это кажется так, но просто чтобы быть уверенным ...Едва ли я работал со сверткой, я пока не совсем понял, должен попытаться что-то прочитать. И да, я знал, что fft не знает мои значения «x». Проблема в том, что pdf-файлы не начинаются с первого входа ?! – sebastian
@sebastian Да. Для трех переменных вы должны использовать 'x_plot = 3 * x (1) + (0: dx: (NFFT-1) * dx)' и т. Д. Но: не забудьте увеличить верхний предел оси x, например 'x = linspace (-1, 4, 1e5); '. Причина в том, что свернутый pdf расширяется по мере увеличения числа случайных величин. Это в сочетании с тем фактом, что БПФ является циркулярной сверткой (т. Е. Предполагает, что ваши сигналы являются периодическими), может дать странные результаты (своего рода псевдонимы во временной области). Например, с 3 переменными вы увидите 'x = linspace (-1, 2, 1e5)' дает неправильные результаты. Увеличьте до 'linspace (-1, 4, 1e5)', и вы получите его правильно –
Да, я заметил, что - сигнал обернут вокруг. Реализация продукта fft - это «просто» свертка, возможно, это был бы более легкий подход:> Хотя это кажется значительно медленнее ... – sebastian