本文主要是介绍FIR滤波器C语言代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/*******************************************************************************
** 程序名称:FIR低通滤波器
** 程序描述:50阶FIR低通滤波器,通过频率2500Hz,截止频率3000Hz
** 性能提升:
** 程序版本:V1.0
** 程序作者:syrchina
** 最后修改:2011年8月1日
*******************************************************************************/#include <stdio.h>/**********************************宏定义**************************************/
#define PI 3.1415926535
#define Size_Datas 64/*******************************数据类型构造***********************************/
typedef float DataType;int main(void)
{DataType Xin[Size_Datas], Output=0, sum=0;int n=0, i=0, nNow=0;short int h[51] = {-35, -219, -503, -494, -8, 347, 19, -348, 26,404, -103, -485, 220, 579, -398, -678, 663, 774,-1073, -859, 1769, 925, -3279, -968, 10363, 17367, 10363,-968, -3279, 925, 1769, -859, -1073, 774, 663, -678,-398, 579, 220, -485, -103, 404, 26, -348, 19,347, -8, -494, -503, -219, -35};const int ORDER = sizeof(h)/sizeof(h[0]);for(i=0; i<Size_Datas; i++)//模拟输入 {Xin[i] = ((sin(2*PI*i*2000/10000) + sin(2*PI*i*4000/10000)));}n = ORDER;while (1){//input new x[]sum = 0;for (i=0; i<ORDER; i++){nNow = n - i;if(nNow < 0){nNow = Size_Datas + nNow;}sum = sum + h[i] * Xin[nNow];}Output = sum / 32767; n = (n+1) & 0x3f; //Output}return 0;
}
整理一下:
/*******************************************************************************
** 程序名称:FIR低通滤波器
** 程序描述:50阶FIR低通滤波器,通过频率2500Hz,截止频率3000Hz
** 性能提升:
** 程序版本:V1.0
** 程序作者:syrchina
** 最后修改:2011年8月1日
*******************************************************************************/#include <stdio.h>/**********************************宏定义**************************************/
#define PI 3.1415926535
#define Size_Datas 64/*******************************数据类型构造***********************************/
typedef float DataType;int main(void)
{DataType Xin[Size_Datas], Output=0, sum=0;int n=0, i=0, nNow=0;// h[]参数使用matlab的FDAtool计算获得:50阶FIR低通滤波器,通过频率2500Hz,截止频率3000Hz short int h[51] = {-35, -219, -503, -494, -8, 347, 19, -348, 26,404, -103, -485, 220, 579, -398, -678, 663, 774,-1073, -859, 1769, 925, -3279, -968, 10363, 17367, 10363,-968, -3279, 925, 1769, -859, -1073, 774, 663, -678,-398, 579, 220, -485, -103, 404, 26, -348, 19,347, -8, -494, -503, -219, -35};const int ORDER = sizeof(h)/sizeof(h[0]);for(i=0; i<Size_Datas; i++)//模拟输入, 64个原始数据{Xin[i] = ((sin(2*PI*i*2000/10000) + sin(2*PI*i*4000/10000)));}n = ORDER;while (1)//循环演示{//input new x[]sum = 0;for (i=0; i<ORDER; i++)//FIR运算{nNow = n - i;if(nNow < 0){nNow = Size_Datas + nNow;}sum = sum + h[i] * Xin[nNow];}Output = sum / 32767; n = (n+1) & 0x3f;// 0~63循环//Output}return 0;
}
这篇关于FIR滤波器C语言代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!