資源簡介
19階FIR濾波器c語言算法實現(xiàn),系數(shù)根據(jù)需要用matlab可以設(shè)計計算,數(shù)據(jù)的數(shù)據(jù)量為512點或256點

代碼片段和文件信息
/*
?*?ADfilter.c
?*
?*??Created?on:?Aug?29?2018
?*??????Author:?Administrator
?*/
#include?“ADfilter.h“
//去直流,1024個點的直流,注意輸入的數(shù)據(jù)為整形
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個點的數(shù)據(jù)
void?fir_filter(float?data[]float?h[]int?fird_lenfloat?result[])
{
//這里的臨時數(shù)組state必須賦初始值,不然初始值不為0,導(dǎo)致前幾個數(shù)據(jù)計算錯誤。
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];
}
}
//抽樣函數(shù),1024個點,抽取512個
void?fir_512samp(float?data[]float?result[])
{
unsigned?int?i;
for(i=0;i<512;i++)
{
result[i]=data[i*2];
}
}
//抽樣函數(shù),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
評論
共有 條評論