{"action":"created","issue":{"url":"https://api.github.com/repos/FFTW/fftw3/issues/105","repository_url":"https://api.github.com/repos/FFTW/fftw3","labels_url":"https://api.github.com/repos/FFTW/fftw3/issues/105/labels{/name}","comments_url":"https://api.github.com/repos/FFTW/fftw3/issues/105/comments","events_url":"https://api.github.com/repos/FFTW/fftw3/issues/105/events","html_url":"https://github.com/FFTW/fftw3/issues/105","id":250564035,"number":105,"title":"Suggestion for an alternative \"halfcomplex\" format","user":{"login":"mreineck","id":898507,"avatar_url":"https://avatars2.githubusercontent.com/u/898507?v=4","gravatar_id":"","url":"https://api.github.com/users/mreineck","html_url":"https://github.com/mreineck","followers_url":"https://api.github.com/users/mreineck/followers","following_url":"https://api.github.com/users/mreineck/following{/other_user}","gists_url":"https://api.github.com/users/mreineck/gists{/gist_id}","starred_url":"https://api.github.com/users/mreineck/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mreineck/subscriptions","organizations_url":"https://api.github.com/users/mreineck/orgs","repos_url":"https://api.github.com/users/mreineck/repos","events_url":"https://api.github.com/users/mreineck/events{/privacy}","received_events_url":"https://api.github.com/users/mreineck/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2017-08-16T09:26:26Z","updated_at":"2017-08-16T19:38:42Z","closed_at":"2017-08-16T18:52:08Z","body":"I'm sorry if this is not the right place to present such a suggestion, or if this topic has actually already been discussed somewhere else ... I couldn't find any mention of it on the net even after extensive searching.\r\n\r\nOur group has been looking for a storage scheme to hold the result of an FFT transform with real-valued input data, with the requirements that the resulting array is also real-valued and has the same dimensions as the input.\r\n\r\nFor 1D transforms, FFTW's \"halfcomplex\" format is a good candidate, but unfortunately it does not generalize well to higher dimensions.\r\n\r\nSo we have come up with the following approach:\r\n\r\n- when transforming a real-valued array f_x in position space to harmonic space: perform the FFT, but instead of the full complex result F_k just store the sum of real and imaginary parts of the result in a real-valued array (i.e. F2_k = F_k.re+F_k.im). This operation does not lose any information, because F_k can be reconstructed from F2_k using the fact that F_k has Hermitian symmetry.\r\n\r\n- Transforming F2_k back to position space is done by simply performing a real FFT on it, resulting in the complex-valued array f2_x. The original f_x is then given by f2_x.re-f2_x.im (ignoring normalization for the moment).\r\n\r\nAs a consequence, simply storing the sum or real and imaginary parts on the harmonic side fulfills all our requirements. Admittedly it is not a direct representation of the actual Fourier coefficients, but\r\n- the Fourier coefficients can be easily calculated from this representation if needed, and\r\n- common operations like convolution can be done in this representation in exactly the same way they would be done with the complex Fourier coefficients, so in may situations there will be no need to compute them explicitly.\r\n\r\nMy questions are:\r\n- has this suggestion already been made in the past (I'm quite sure it must have been, but as I said I haven't found any mention of it online)?\r\n- if not, could this be of interest as a storage format for FFTW?\r\n\r\nThank you very much for any comments!\r\n\r\n"},"comment":{"url":"https://api.github.com/repos/FFTW/fftw3/issues/comments/322876925","html_url":"https://github.com/FFTW/fftw3/issues/105#issuecomment-322876925","issue_url":"https://api.github.com/repos/FFTW/fftw3/issues/105","id":322876925,"user":{"login":"mreineck","id":898507,"avatar_url":"https://avatars2.githubusercontent.com/u/898507?v=4","gravatar_id":"","url":"https://api.github.com/users/mreineck","html_url":"https://github.com/mreineck","followers_url":"https://api.github.com/users/mreineck/followers","following_url":"https://api.github.com/users/mreineck/following{/other_user}","gists_url":"https://api.github.com/users/mreineck/gists{/gist_id}","starred_url":"https://api.github.com/users/mreineck/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mreineck/subscriptions","organizations_url":"https://api.github.com/users/mreineck/orgs","repos_url":"https://api.github.com/users/mreineck/repos","events_url":"https://api.github.com/users/mreineck/events{/privacy}","received_events_url":"https://api.github.com/users/mreineck/received_events","type":"User","site_admin":false},"created_at":"2017-08-16T19:38:42Z","updated_at":"2017-08-16T19:38:42Z","body":"Ouch! Thanks a lot for that info ... and sorry for the noise!\r\n"}}
{"actor":{"display_login":"mreineck"}}