The docs explain:
On return, the array will contain complex frequency + phase data, and can be passed to performRealOnlyInverseTransform() in order to convert it back to reals.
Nowhere in the description of this method is the order of the complex frequency + phase data specified. How is anyone supposed to know if the real and imaginary components are interleaved, or if the real components are 0->N/2-1 and the imaginary components are N/2->N?
For example, say that you provide that method with the collection [R,R,R,R]. You should get back an array of floats that is of size 2*N containing the real and imaginary frequency domain components. However, some FFT implementations would supply [R,R,R,R,I,I,I,I], while others might give you [R,I,R,I,R,I,R,I].
I realize that I can use a collection of Complex objects to avoid this ambiguity, but then what is the point of the performRealOnlyForwardTransform() and performRealOnlyInverseTransform() methods? My assumption is that these are here for the sake of computational efficiency if one wants to perform transforms in-place.
It seems to me that these methods should either be documented more thoroughly or removed, as they are frustrating at best the way they are now. If you’d like evidence of this, see this thread, where user gerudobombshell is simply instructed to avoid using these methods in favor of perform() and their inquiries regarding the arrangement of the output of performRealOnlyForwardTransform() is ignored.
TL;DR
performRealOnlyForwardTransform(): Are the real and imaginary components of the output interleaved, or is the result split into two halves, real and imaginary?