OMXResult ForwardRFFT(OMX_F32* x, OMX_F32* y, OMXFFTSpec_R_F32 *fft_fwd_spec) { return omxSP_FFTFwd_RToCCS_F32_Sfs(x, y, fft_fwd_spec); }
/* Run one forward FFT test in test mode */ float RunOneForwardTest(int fft_log_size, int signal_type, float signal_value, struct SnrResult* snr) { OMX_F32* x; OMX_FC32* y; struct AlignedPtr* x_aligned; struct AlignedPtr* y_aligned; OMX_FC32* y_true; OMX_INT n; OMX_INT fft_spec_buffer_size; OMXResult status; OMXFFTSpec_R_F32 * fft_fwd_spec = NULL; int fft_size; fft_size = 1 << fft_log_size; status = omxSP_FFTGetBufSize_R_F32(fft_log_size, &fft_spec_buffer_size); if (verbose > 63) { printf("fft_spec_buffer_size = %d\n", fft_spec_buffer_size); } fft_fwd_spec = (OMXFFTSpec_R_F32*) malloc(fft_spec_buffer_size); status = omxSP_FFTInit_R_F32(fft_fwd_spec, fft_log_size); if (status) { fprintf(stderr, "Failed to init forward FFT: status = %d\n", status); exit(1); } x_aligned = AllocAlignedPointer(32, sizeof(*x) * fft_size); y_aligned = AllocAlignedPointer(32, sizeof(*y) * (fft_size + 2)); x = x_aligned->aligned_pointer_; y = y_aligned->aligned_pointer_; y_true = (OMX_FC32*) malloc(sizeof(*y_true) * (fft_size / 2 + 1)); GenerateSignal(x, y_true, fft_size, signal_type, signal_value); if (verbose > 63) { printf("Signal\n"); DumpArrayFloat("x", fft_size, x); printf("Expected FFT output\n"); DumpArrayComplexFloat("y", fft_size / 2, y_true); } status = omxSP_FFTFwd_RToCCS_F32_Sfs(x, (OMX_F32*) y, fft_fwd_spec); if (status) { fprintf(stderr, "Forward FFT failed: status = %d\n", status); exit(1); } if (verbose > 63) { printf("FFT Output\n"); DumpArrayComplexFloat("y", fft_size / 2, y); } CompareComplexFloat(snr, y, y_true, fft_size / 2 + 1); FreeAlignedPointer(x_aligned); FreeAlignedPointer(y_aligned); free(y_true); free(fft_fwd_spec); return snr->complex_snr_; }