|
#include
#include
#include "fdacoefs.h"
//*********************************************
//fs=1000000,fpass=10000,fstop=50000(-80db)
//butterworth iir-df1
//*********************************************
#define fs 1000000
#define f1 4000//测试正弦频率1
#define f2 50000//测试正弦频率2
#define f_rec 5000//测试方波频率
#define Impulse 1
#define Sine 2
#define Rect 3
#define pi 3.1415926
#define STG_NUM (MWSPT_NSEC-1)/2
#define DAT_NUM 800
float IIR_out[DAT_NUM];
float input_step[STG_NUM+1][3];// n; n-1; n-2
void iir_filter_init(float *ptr,int num)
{
int i;
for(i=0;i
{
*ptr++=0;
}
}
float iir_filter(float in)
{
int i;
float temp;
input_step[0][0] = in;
for(i=0;i
{
temp =NUM[i*2][0]*(input_step[0]*NUM[i*2+1][0]+input_step[1]*NUM[i*2+1][1]+input_step[2]*NUM[i*2+1][2])-
input_step[i+1][1]*DEN[i*2+1][1]-input_step[i+1][2]*DEN[i*2+1][2];
temp *= DEN[i*2+1][0];
input_step[2]=input_step[1];
input_step[1]=input_step[0];
input_step[i+1][0]=temp;
}
return temp*NUM[MWSPT_NSEC-1][0];
}
float x;
int main()
{
int i,Test_type;
printf("请选择测试类型:1、冲击测试 2、正弦测试 3、方波测试\n");
scanf("%d",&Test_type);
while(1){
iir_filter_init(input_step[0],sizeof(input_step)/sizeof(input_step[0][0]));
switch(Test_type)
{
case Rect://方波输入
for(i=0;i
{
if(((2*f_rec*i/fs)%2)==0)
x=5000;
else
x=-5000;
IIR_out=iir_filter(x);
}
break;
case Impulse://冲激输入
IIR_out[0]=iir_filter(5000);
for(i=1;i
IIR_out=iir_filter(0);
break;
case Sine://正弦输入
for(i=0;i
{
//***************************************************************
x=500*(cos(2*pi*f1*i/fs)+cos(2*pi*f2*i/fs)); //正弦测试
IIR_out=iir_filter(x);
}
break;
}
//请在printf前设置断点,以便停止运行 查看输出结果 否则,看不到输出
printf("请选择测试类型:1、冲击测试 2、正弦测试 3、方波测试\n");
scanf("%d",&Test_type);
}
while(1);
}
|
|