基于DSP的C语言来实现FIR滤波器

首先,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
        }

  

时间: 2024-10-29 19:11:11

基于DSP的C语言来实现FIR滤波器的相关文章

基于Perfect用Swift语言编写Slack聊天机器人

基于Perfect用Swift语言编写Slack聊天机器人 本项目是专门为Slack聊天机器人定制的模板服务器. 完整的源代码下载在Github https://github.com/PerfectServers/SlackBot 在本项目模板中,一个聊天机器人可以加入授权频道,读取频道内所有用户发送的"曲奇"并记录在案,而且可以直接答复用户的有关曲奇饼干的问题. 预备知识 在您决定编译.测试或者部署您自己的基于Perfect软件框架体系的聊天机器人之前,以下基础知识??不可或缺??:

基于 Web 的 Go 语言 IDE - Wide 1.1.0 公布!

公布 1.1.0 这个版本号改进了非常多细节,已经全然能够用于正式项目的开发 同一时候我们上线了 Wide 在线服务 到眼下,我们提供了 Wide 和 Solo 两个在线服务,详情请看这里. Wide 是什么 Wide 是一个基于 Web 的 Go 语言团队 IDE. 在线开发:打开浏览器就能够进行开发.全快捷键 智能提示:代码自己主动完毕.查看表达式.编译反馈.Lint 实时执行:极速编译.实时结果输出 团队协同:统一开发环境,分布式开发.代码分享 DevOps! 另外,除了使用上面我们提到的

基于 Web 的 Go 语言 IDE - Wide 1.5.0 发布!

Wide 是什么 Wide 是一个基于 Web 的 Go 语言团队 IDE. 在线开发:打开浏览器就可以进行开发.全快捷键 智能提示:代码自动完成.查看表达式.编译反馈.Lint 实时运行:极速编译.实时结果输出 团队协同:统一开发环境,分布式开发,代码分享 DevOps! 大家可以使用我们提供的 Wide 在线服务,也可以自行下载并在本地环境运行 Wide 私服! Playground Wide 提供了运行单文件的 Playground,可以看作是 golang.org 的 Go Playgr

基于Eclipse的Go语言可视化开发环境

http://jingyan.baidu.com/article/d7130635032e2f13fdf475b8.html 基于Eclipse的Go语言可视化开发环境 | 浏览:2924 | 更新:2013-12-21 18:24 | 标签:eclipse 1 2 3 4 5 6 7 分步阅读 搭建与使用一个基于Eclipse的Go语言可视化开发环境. 注意: 在阅读此片经验前,先确保必要工具已经安装或打开 工具/原料 搭建好Go语言开发环境,详细步骤见经验: http://jingyan.b

基于redis和R语言构建并行计算平台(yiyou)

最近研究gearman时发现不少问题,关于队列持久化的问题搞了半个月还是没能解决,并且国内可以参考的资料太少,所以考虑换一种方案试试.如下贴出gearman集群的架构: 可以看到该架构存在的问题,当持久化不起作用时,只能通过多台JobServer同时运行的方式保证集群的正常运作.另外client和worker这间的数据传输需要通过JobServer,不能一步到位.这个在数据量大时不能突显优势. 本人搞R语言有些时间了,并且该语言近几年比较火,用于统计.分析.建模.可视化,效率很高.为了承接前期研

基于 Web 的 Go 语言 IDE - Wide 1.2.0 发布!

Wide 是什么 Wide 是一个基于 Web 的 Go 语言团队 IDE. 在线开发:打开浏览器就可以进行开发.全快捷键 智能提示:代码自动完成.查看表达式.编译反馈.Lint 实时运行:极速编译.实时结果输出 团队协同:统一开发环境,分布式开发,代码分享 DevOps! 大家可以使用我们提供的 Wide 在线服务,也可以自行下载并在本地环境运行 Wide 私服! Playground Wide 提供了运行单文件的 Playground,可以看作是 golang.org 的 Go Playgr

基于 Web 的 Go 语言 IDE - Wide 1.1.0 发布!

发布 1.1.0 这个版本改进了很多细节,已经完全可以用于正式项目的开发 同时我们上线了 Wide 在线服务 到目前,我们提供了 Wide 和 Solo 两个在线服务,详情请看这里. Wide 是什么 Wide 是一个基于 Web 的 Go 语言团队 IDE. 在线开发:打开浏览器就可以进行开发.全快捷键 智能提示:代码自动完成.查看表达式.编译反馈.Lint 实时运行:极速编译.实时结果输出 团队协同:统一开发环境,分布式开发,代码分享 DevOps! 另外,除了使用上面我们提到的 Wide

基于DSP的FCM图像分割

基于DSP的FCM图像分割 一.目标 利用VisualDSP++ 5.0.仿真器.EBF-561实验平台实现该算法,并通过该聚类算法实现图像的不同区域的聚类结果. 二.实现方案 实验原理 FCM 聚类算法目标函数为 如果 p表示每一个样本x_j的维数0,X={x_1,x_2,-x_j,-x_N}是一个p×N矩阵:N表示样本数目,通常表示图像像素数:C表示聚类数目:u_ij?U(p×N×C)是矢量x_j隶属于第i类的隶属度函数,满足u_ij∈[0,1]且∑_(i=1)^C?u_ij =1:聚类中心

转载论文关于fir滤波器的fpga实现

摘 要 本文讨论的FIR滤波器因其具有严格的线性相位特性而得到广泛的应用.在工程实践中,往往要求信号处理具有实时性和灵活性,本论文研究FIR的FPGA解决方案正体现了电子系统的微型化和单片化. 本论文主要讨论了以下的问题: 首先,以FIR滤波器的基本理论为依据,研究适应工程实际的数字滤波器的设计方法,确定了直接型网络结构.窗函数设计法的设计方案: 然后,讨论了FPGA的原理与结构特点,总结FPGA的设计流程与设计原则,并用Verilog HDL语言根据设计方案编写出FIR滤波器程序: 接着,采用