資源簡介
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? {
state[0]?=?*(data+k);
temp=0;
for?(i?=?0;?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
- 上一篇:433射頻收發參考程序C語言STM32
- 下一篇:4交通燈_STC89C52.zip
評論
共有 條評論