I'm currently using the stm32f407g-disc1 and reading an audio input through PMOD I2S2. I've carried out some examples and the hardware is working fine (writing data from the rx to the tx buffer) such as the code below.
for (int i=0; i<BUFFER_LENGTH*4; i=i+4) {
txBuf[i] = rxBuf[i];
txBuf[i+1] = rxBuf[i+1];
txBuf[i+2] = 0;
txBuf[i+3] = 0;
}
I now wish to perform the FFT on this incoming buffer, manipulate it (my first aim is to implement a pitch shifting algorithm) and perform the IFFT again. Thus I've tried the following:
for (int i=0; i<BUFFER_LENGTH*4; i=i+4) {
fft_in_buf[fft_in_ptr] = (float) ((int) (rxBuf[i]<<16)|rxBuf[i+1]);
fft_in_ptr++;
}
arm_rfft_fast_f32(&fft_handler, fft_in_buf, fft_out_buf, 0);
arm_rfft_fast_f32(&fft_handler, fft_out_buf, fft_in_buf, 1);
fft_in_ptr = 0;
for (int i=0; i<BUFFER_LENGTH*4; i=i+4) {
txBuf[i] = (fft_in_buf[fft_in_ptr] >> 16) & 0xFF; // MSB
txBuf[i + 1] = fft_in_buf[fft_in_ptr] & 0xFF; // LSB
txBuf[i + 2] = 0;
txBuf[i + 3] = 0;
fft_in_ptr++;
}
In the main initialization I'm also carrying out arm_rfft_fast_init_f32(&fft_handler, BUFFER_LENGTH);
My issue is that I get a very very low output (barely audible) with the above code. I might have a scaling issue as I found in similar issues but I still can't get it to work by scaling fft_in_buf[fft_in_ptr].