|
发表于 2013-7-30 13:44:59
|
显示全部楼层
#include "dsp.h"
#define FIR_N 128
#define FIR_M 32
Complex signal[signal_N]; //信号
float signal1[signal_N];
float signal1_out[signal_N];
Complex signal_out[signal_N];
int16_t signal_real[signal_N];
int16_t signal_img[signal_N];
int32_t signal2[signal_N];
int32_t signal2_out[signal_N];
int32_t Y[signal_N];
int16_t FIR_in[FIR_N+FIR_M-1];
int32_t FIR_out[FIR_N];
COEFS fir_coefs;
void Signal_Init()
{
u16 i,j;
u16 fs=8192;
u16 f1=100;
u16 f2=200;
float V1=60.0;
float V2=20.0;
for(i=0;i<signal_N;i++)
{
signal_real[i]=V1*sin((float)f1/fs*i*2.0*PI)+V2*sin((float)f2/fs*i*2.0*PI);
signal2[i] = (((int16_t)(signal_real[i])) | ((int32_t)(signal_img[i]<<16)));
//signal[i].img =0;
}
for(i=0;i<FIR_N+FIR_M-1;i++)
{
FIR_in[i]=V1*sin((float)f1/fs*i*2.0*PI);//+V2*sin((float)f2/fs*i*2.0*PI);
}
}
void Display_Dsp()
{
u16 i,j;
for(i=1;i<FIR_N+FIR_M-1;i++)
{
TFT_DrawLine(i-1,300-FIR_in[i-1],i,300-FIR_in[i],BLACK);
}
for(i=0;i<FIR_N;i++)
{
TFT_DrawLine(i-1,150-FIR_out[i-1],i,150-FIR_out[i],BLUE);
}
}
void MY_FIR()
{
u16 i;
u16 h[FIR_M]={
90,358,794,1138,2100,2923,3821,4762,5712,6635,
7500,8274,8930,9444,9797,9977,9977,9797,9444,8930,
8274,7500,6635,5712,4762,3821,2923,2100,1381,794,
358,90, //汉宁窗
/*
540, 231, 276, 323, 371, 419, 467, 513, 558,
598, 635, 667, 694, 714, 728, 735, 735, 728,
714, 694, 667, 635, 598, 558, 513, 467, 419,
371, 323, 276, 231, 540 */
} ;
for(i=0;i<FIR_M;i++)
{
h[i]/=2;
}
fir_coefs.nh = FIR_M;
fir_coefs.h = h;
fir_16by16_stm32(FIR_out,FIR_in,&fir_coefs,FIR_N);
for(i=0;i<FIR_N;i++)
{
FIR_out[i]/=160000;
}
}
int main(void)
{
Signal_Init() ;
//cr4_fft_256_stm32(signal2_out, signal2, signal_N);
MY_FIR();
Display_Dsp();
while(1)
{
}
} |
|