Skip to content

Commit 7bee4f4

Browse files
committed
Fix incorrect FFT results for 16-bit inputs
1 parent 30a1b0f commit 7bee4f4

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

src/FFTAnalyzer.cpp

+7-2
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,12 @@ int FFTAnalyzer::read(int spectrum[], int size)
6262
}
6363

6464
if (_bitsPerSample == 16) {
65-
arm_q15_to_q31((q15_t*)_spectrumBuffer, (q31_t*)spectrum, size);
65+
q31_t* dst = (q31_t*)spectrum;
66+
q15_t* src = (q15_t*)_spectrumBuffer;
67+
68+
for (int i = 0; i < size; i++) {
69+
*dst++ = *src++;
70+
}
6671
} else {
6772
memcpy(spectrum, _spectrumBuffer, sizeof(int) * size);
6873
}
@@ -183,7 +188,7 @@ void FFTAnalyzer::update(const void* buffer, size_t size)
183188
if (_bitsPerSample == 16) {
184189
arm_rfft_q15(&_S15, (q15_t*)_sampleBuffer, (q15_t*)_fftBuffer);
185190

186-
arm_cmplx_mag_q15((q15_t*)_spectrumBuffer, (q15_t*)_fftBuffer, _length);
191+
arm_cmplx_mag_q15((q15_t*)_fftBuffer, (q15_t*)_spectrumBuffer, _length);
187192
} else {
188193
arm_rfft_q31(&_S31, (q31_t*)_sampleBuffer, (q31_t*)_fftBuffer);
189194

0 commit comments

Comments
 (0)