新手上路
- 积分
- 39
- 金钱
- 39
- 注册时间
- 2014-4-19
- 在线时间
- 0 小时
|
5金钱
如题,我要实现的功能为:
信号经过AD转换后进行DFT,然后找出频谱中最大的项并显示出来
由于头一次进行STM32的编程,写的程序可能存在各种问题,但是编译能通过,我就不知道怎么改了,求大神指点、、、
不说废话了,上程序:
int main(void)
{
u16 adcx;
int j;
SystemInit();
delay_init(72); //延时初始化
NVIC_Configuration();
uart_init(9600);
LED_Init();
while(1)
{
for(j=0;j<128;j++)
{
Adc_Init();
adcx=Get_Adc(ADC_Channel_0);
buffer[j]=(float)(adcx*3.3/4096);
}
printf("\r\n采集信号中\r\n");
Dft(buffer,NPT);
fun(A,128);
printf("\r\n频率最大值为:k=");
printf("%d",k);
printf("\n\n");
LED0=0;
delay_ms(300);
LED0=1;
delay_ms(300);
}
}
程序老是显示k=0,灯也不亮、、、
void Dft(float x[], int m)
{
int i,j;
for(i=0;i<m;i++)
{
AR=0;AI=0;
for(j=0;j<m;j++)
{
AR=AR+(float)cos(-2*PI*i*j/m)*x[j];
AI=AI+(float)sin(-2*PI*i*j/m)*x[j];
}
A=(float)(sqrt(pow(AR,2)+pow(AI,2)));
}
}
void fun(float a[],int n)
{
int i;
float max;
max = a[0];
for(i = 1;i < n;i++)
{
if(a > max)
k=i;
}
}
|
|