标签:std lte text amp images 数字信号处理 style cti 数据
首先,FIR滤波器的输出公式为:
(具体的话可以查看数字信号处理书籍,都忘得差不多了。。。)
假设:输入的信号是x(n) = sin(2*pi*f1*n/fs) + sin(2*pi*f2*n/fs)
所设计的滤波器是一个低通FIR滤波器,使用的是hamming窗,阶数为10
则可以使用MATLAB 的滤波器设计工具来设计滤波器:

然后可以通过设计滤波器,生成C头文件来获取所需要的数值:

FIR滤波器的C程序如下:
#include <stdio.h>
#include <math.h>
#define pi 3.1415
#define N 11 //N为滤波器的阶数+1
#define LEN 512
int inputdata[LEN]; //假设数据的长度为512
int outputdata[LEN];
long int yn; //yn为int的话,在运算中数据可能会溢出,从而滤波失败
const int B[N] = {166, 0, -1374, 0, 9453, 16279, 9453, 0, -1374, 0, 166} //FIR滤波器的参数,由MATLAB生成
void main()
{
int f1,f2,fs,i,j;
int *a;
f1=100; //频率分量1(Hz)
f2=300; //频率分量2(Hz)
fs=800; //采样频率(Hz)
for(i=0;n<LEN;n++)
{
inputdata[n]=sin(2*pi*f1*n/fs) + sin(2*pi*f2*n/fs); //产生信号
}
for(j=0;j<LEN;j++) //根据公式来进行滤波
{
a=&inputdata[j];
yn=0;
for(i=0;i<N;i++)
{
yn=yn+B[i]*(*a++);
}
outputdata[j]=yn>>16; //滤波后信号
}
while(1);
}
在CCS环境下运行,并且通过Graph来观察inputdata和outputdata的时域和频域图(这里就不上图了,在学校的实验课上测试过了。。。)
其CMD文件为:
-e start
MEMORY {
PAGE 0:
PARAM: org = 3000h len = 4000h
PAGE 1:
DARAM: org = 100h len=4000h
}
SECTIONS{
.text : > PARAM PAGE 0
stack : > DARAM PAGE 1
filter_vars : > DARAM PAGE 1
.bss : > DARAM PAGE 1
.data : > DARAM PAGE 1
}
标签:std lte text amp images 数字信号处理 style cti 数据
原文地址:http://www.cnblogs.com/Recca/p/8011093.html