最近、私は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
以下の周波数を取得していますここで
私のコードは私のデータがで山車あることを行っているとして、私はarm_rfft_fast_f32
を使用してい
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); –