15 #include "kiss_fftr.h" 46 for (
int i = 0; i <
m_n; ++i) {
48 m_kin[i].i = (ii ? ii[i] : 0.0);
55 for (
int i = 0; i <
m_n; ++i) {
64 double scale = 1.0 /
m_n;
66 for (
int i = 0; i <
m_n; ++i) {
67 ro[i] =
m_kout[i].r * scale;
68 io[i] =
m_kout[i].i * scale;
93 const double *p_lpRealIn,
const double *p_lpImagIn,
94 double *p_lpRealOut,
double *p_lpImagOut)
97 p_lpRealIn, p_lpImagIn,
98 p_lpRealOut, p_lpImagOut);
106 throw std::invalid_argument
107 (
"nsamples must be even in FFTReal constructor");
109 m_planf = kiss_fftr_alloc(m_n, 0,
NULL,
NULL);
110 m_plani = kiss_fftr_alloc(m_n, 1,
NULL,
NULL);
111 m_c =
new kiss_fft_cpx[m_n];
115 kiss_fftr_free(m_planf);
116 kiss_fftr_free(m_plani);
120 void forward(
const double *ri,
double *ro,
double *io) {
122 kiss_fftr(m_planf, ri, m_c);
124 for (
int i = 0; i <= m_n/2; ++i) {
129 for (
int i = 0; i + 1 < m_n/2; ++i) {
130 ro[m_n - i - 1] = ro[i + 1];
131 io[m_n - i - 1] = -io[i + 1];
137 double *io =
new double[m_n];
141 for (
int i = 0; i < m_n; ++i) {
142 mo[i] = sqrt(mo[i] * mo[i] + io[i] * io[i]);
148 void inverse(
const double *ri,
const double *ii,
double *ro) {
153 for (
int i = 0; i < m_n/2 + 1; ++i) {
158 kiss_fftri(m_plani, m_c, ro);
160 double scale = 1.0 / m_n;
162 for (
int i = 0; i < m_n; ++i) {
void forwardMagnitude(const double *ri, double *mo)
void inverse(const double *ri, const double *ii, double *ro)
void process(bool inverse, const double *ri, const double *ii, double *ro, double *io)
FFTReal(int nsamples)
Construct an FFT object to carry out real-to-complex transforms of size nsamples. ...
void inverse(const double *realIn, const double *imagIn, double *realOut)
Carry out an inverse real transform (i.e.
void forward(const double *realIn, double *realOut, double *imagOut)
Carry out a forward real-to-complex transform of size nsamples, where nsamples is the value provided ...
void process(bool inverse, const double *realIn, const double *imagIn, double *realOut, double *imagOut)
Carry out a forward or inverse transform (depending on the value of inverse) of size nsamples...
void forward(const double *ri, double *ro, double *io)
FFT(int nsamples)
Construct an FFT object to carry out complex-to-complex transforms of size nsamples.
void forwardMagnitude(const double *realIn, double *magOut)
Carry out a forward real-to-complex transform of size nsamples, where nsamples is the value provided ...