• 大小: 3KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-06-18
  • 语言: C/C++
  • 标签: STM32  滤波器  

资源简介

19阶FIR滤波器c语言算法实现,系数根据需要用matlab可以设计计算,数据的数据量为512点或256点

资源截图

代码片段和文件信息

/*
 * ADfilter.c
 *
 *  Created on: Aug 29 2018
 *      Author: Administrator
 */
#include “ADfilter.h“


//去直流,1024个点的直流,注意输入的数据为整形
void De_DC(int a[]float b[])
{
double sum;
unsigned int i;
for(i=0;i<1024;i++)
{
sum = sum +(float)(*(a+i));
}
sum = sum/1024;
for(i=0;i<1024;i++)
{
*(b+i)=*(a+i)-sum;
}
}


//18阶fir滤波器,处理1024个点的数据
void fir_filter(float data[]float h[]int fird_lenfloat result[])
{
//这里的临时数组state必须赋初始值,不然初始值不为0,导致前几个数据计算错误。
float state[19]={0000000000000000000};
float temp = 0.0;   
int ijk; 
for (k = 0; k < fird_len; k++)
{
state[0] = *(data+k);
temp=0;
for (i = 0; i < firc_len; i++)
temp = temp + *(h+i) * *(state+i);
result[k] = temp;
for (j = (firc_len-2); j > -1 ; j--)
state[j+1] = state[j];
}
}

//抽样函数,1024个点,抽取512个
void fir_512samp(float data[]float result[])
{
unsigned int i;
for(i=0;i<512;i++)
{
result[i]=data[i*2];
}
}

//抽样函数,512个点,抽取256个
void fir_256samp(float data[]float result[])
{
unsigned int i;
for(i=0;i<256;i++)
{
result[i]=data[i*2];
}
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件         361  2018-08-31 18:03  ADfilter.h
     文件        3367  2018-09-03 11:14  main.c
     文件        1212  2018-09-03 10:54  ADfilter.c

评论

共有 条评论