Я пытаюсь понять, как работает дискретное преобразование Фурье (ДПФ).Я генерирую некоторые данные
n<-5
set.seed(100)
x<-rnorm(n)
и ортогональную матрицу, которую я использую для расчета ДПФ
omega<-exp(-2*pi*1i/n)
E<-n^(-1/2)*omega^(0:(n-1)*matrix(0:(n-1),n,n,byrow=TRUE))
round(Re(crossprod(E,Conj(E))),15)
ДПФ задается как
x%*%t(E)
Действительно, мымогу проверить, что это совпадает с результатом, данным fft
round(n^(-1/2)*fft(x),10)==round(x%*%t(E),10)
Теперь я смогу восстановить x
, используя
Re(colSums(c(x%*%t(E))*E))
, но это дает
[1] -0,50219235 0,11697127 0,88678481 -0,07891709 0,13153117
, в то время как x
равно
[1] -0,50219235 0,13153117 -0,07891709 0,88678481 0,116971226
* *
x
но порядок записей изменен.Первая запись по-прежнему является первой, но другие записи смешаны.Кто-нибудь может объяснить, почему это происходит или что я делаю неправильно?
Любая помощь очень ценится!