最近我一直在试图对我的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); –