最近我一直在試圖對我的STM32F4-Discovery評估板進行FFT計算,然後將它發送到PC。我研究過我的問題 - 我認爲我在製造商提供的FFT功能上做了一些錯誤。DSP庫 - RFFT - 奇怪的結果
我正在使用CMSIS-DSP庫。 現在我已經用代碼生成了樣本(如果這樣做正確,我將通過麥克風進行採樣)。
我使用arm_rfft_fast_f32
我的數據將是在未來的花車,但結果我得到了我的輸出數組是瘋了(我認爲) - 我得到0以下
number_of_samples = 512; (l_probek in code)
dt = 1/freq/number_of_samples
頻率
這裏是我的代碼
float32_t buffer_input[l_probek];
uint16_t i;
uint8_t mode;
float32_t dt;
float32_t freq;
bool DoFlag = false;
bool UBFlag = false;
uint32_t rozmiar = 4*l_probek;
union
{
float32_t f[l_probek];
uint8_t b[4*l_probek];
}data_out;
union
{
float32_t f[l_probek];
uint8_t b[4*l_probek];
}data_mag;
union
{
float32_t f;
uint8_t b[4];
}czest_rozdz;
/* Pointers ------------------------------------------------------------------*/
arm_rfft_fast_instance_f32 S;
arm_cfft_radix4_instance_f32 S_CFFT;
uint16_t output;
/* ---------------------------------------------------------------------------*/
int main(void)
{
freq = 5000;
dt = 0.000000390625;
_GPIO();
_LED();
_NVIC();
_EXTI(0);
arm_rfft_fast_init_f32(&S, l_probek);
GPIO_SetBits(GPIOD, LED_Green);
mode = 2;
//----------------- Infinite loop
while (1)
{
if(true)//(UBFlag == true)
for(i=0; i<l_probek; ++i)
{
buffer_input[i] = (float32_t) 15*sin(2*PI*freq*i*dt);
}
//Obliczanie FFT
arm_rfft_fast_f32(&S, buffer_input, data_out.f, 0);
//Obliczanie modulow
arm_cmplx_mag_f32(data_out.f, data_mag.f, l_probek);
USART_putdata(USART1, data_out.b, data_mag.b, rozmiar);
//USART_putdata(USART1, czest_rozdz.b, data_mag.b, rozmiar);
GPIO_ToggleBits(GPIOD, LED_Orange);
//mode++;
//UBFlag = false;
}
}
}
你有沒有確認您輸入SA對你的測試來說,mples是正確的?另外,l_probek的價值是什麼?它是512嗎? –
@DaveS他似乎在計算'buffer_input'中的測試正弦波。 – tofro
關於這條線 - 你如何確定15的幅度? buffer_input [i] =(float32_t)15 * sin(2 * PI * freq * i * dt); –