DSP滤波程序C语言实现

通过matlab对数字信号进行滤波器的设计后,我们要将设计好的参数放到嵌入式系统中进行滤波。

IIR滤波器

FIR滤波器

#include <stdio.h>
#include <malloc.h>
//z变换转成差分方程然后迭代
//Talen @UESTC 2015.6.5

//打印数组
void print(float *x,int len);
//取后第1-n个
float* aminusone(float* a,int ar);
//差分中间值
float gtcet(float *t,float *x,int xr,int s,int d);
//主要滤波函数
float* gfilter(float *b,int br,float *a,int ar,float *x,int xr);

void print(float *x,int len)
{
	for(int i=0;i<len;i++)
	{printf("%9.3f ",x[i]);
	if((i%7)==6)
		printf("\n");}
	printf("\n");
}

float* aminusone(float* a,int ar){
	float* am = (float *)malloc((ar-1) * sizeof(float));
	for(int i=0;i<ar-1;i++)
		am[i]=a[i+1];
	return am;
}
float gtcet(float *t,float *x,int xr,int s,int d)
	//x[]数据源 r数据源长度 s开始点(0开始) d数据长度
	//t可以是a[] b[] 长度与d一样
{
	float sum=0;
	float* w = (float *)malloc(d * sizeof(float));
	for(int i=0;i<d;i++)
	{
		int temp=s-i;
		if(temp>=0&&temp<xr)
			w[i]=x[temp];
		else
			w[i]=0;
		//核心语句
		sum=sum+w[i]*t[i];
	}
	return sum;
}
float* gfilter(float *b,int br,float *a,int ar,float *x,int xr)
	//b a x br b的长度 ar a的长度 xr数据长度
	//use本程序定义的gtcet()和aminusone()
	//输入数据,b,a,x得出滤波后的y
{
	float* y = (float *)malloc(xr* sizeof(float));
	for(int ti=0;ti<xr;ti++)
		y[ti]=0;
	for(int i=0;i<xr;i++)
	{
		//最核心语句,此处迭代
		y[i]=gtcet(b,x,xr,i,br)-gtcet(aminusone(a,ar),y,xr,i-1,ar-1);
	}
	return y;
}

int main()
{
	//input 源数据 可修改
	////////////////////////////////////////////////////////////////
	float x[120]={-4, -2, 0, -4, -6, -4, -2, -4, -6, -6, -4, -4,		-6, -6, -2, 6, 12, 8, 0, -16, -38, -60, -84,		-90, -66, -32, -4, 2, -4, 8, 12, 12, 10, 6,		6, 6, 4, 0, 0, 0, 0, 0, -2, -4, 0, 0, 0, -2,		-2, 0, 0, -2, -2, -2, -2, 0, -2, -4, -2, 0,		-2, -4, -4, 2, 0, 0, -2, -4, -2, 0, 0, -2,		-4, -2, 0, 0, -4, -4, -2, -2, -4, -6, -6,		-4, -4, 8, -10, -8, -6, -6, -8, -12, -10,		-8, -8, -10, -12, -10, -8, -8, -10, -10,		-8, -6, -6, -8, -8, -4, -2, -4, -4, -4,		0, 0, -2, -4, -2, -2, 0, -4};
	//参数
	float b[7]={ 0.0007,0.0044,0.0111,0.0148,0.0111,0.0044,0.0007};
	float a[7]={ 1.0000,-3.1836,4.6222,-3.7795,1.8136,-0.4800,0.0544};
	//////////////////////////////////////////////////////////////////
	//不要修改
	int xr=sizeof(x)/sizeof(float);
	int br=sizeof(b)/sizeof(float);
	int ar=sizeof(a)/sizeof(float);
	//output 滤波后数据
	float *y;

	printf("参数b:\n");print(b,br);
	printf("参数a:\n");print(a,ar);
	printf("原数据:\n");print(x,xr);

	y=gfilter(b,br,a,ar,x,xr);

	printf("滤波后数据:\n");print(y,xr);
	getchar();
	return 0;
}

  

时间: 2024-10-03 03:16:36

DSP滤波程序C语言实现的相关文章

我想要的程序开发语言特性&mdash;&mdash;之&ldquo;面向对象&rdquo;&mdash;&mdash;之&ldquo;退化&rdquo;

先从一个例子开始讲起,以下是jdk1.7中的迭代器接口的代码(去掉了注释的部分): public interface Iterator<E> {    boolean hasNext();    E next();    void remove();} 程序开发的老油条们都不太喜欢这个接口的remove方法,原因可能是: 我们为自己实现Iterator接口时,基本不需要这个方法,但我们却不得不@Override它,此时通常我们会直接在方法体中写一行throw new UnsupportedOp

基于串口通信的DSP应用程序在线升级方法

转载内容,源地址http://www.qiytech.com/jiejuefangan/gongyekz/922.html 摘  要:为解决特殊场合DSP程序升级困难的问题,以TMS320F28035为例,介绍了一种基于串口通信的适合于TMS320C2000系列DSP实现程序更新的在线升级方法.描述了该在线升级方法的基本思想和实现步骤,给出了关键部分的程序代码.实验证明,该方法简单可靠,可用于嵌入式设备软件程序的升级更新中. 关键词: 在线升级: DSP:串口通信: Flash TMS320C2

iOS 优化内存(三)iOS应用程序多语言本地化解决方案

iOS应用程序多语言本地化解决方案 最近要对一款游戏进行多语言本地化,在网上找了一些方案,加上自己的一点点想法整理出一套方案和大家分享! 多语言在应用程序中一般有两种做法: 一.程序中提供给用户自己选择的机会: 二.根据当前用户当前移动设备的语言自动将我们的app切换对应语言. 第一种做法比较简单完全靠自己的发挥了,这里主要讲第二种做法,主要分一下几点: 1.本地化应用程序名称 2.本地化字符串 3.本地化图片 4.本地化其他文件 1.本地化应用程序名称 (1)点击"new file"

作业1: 通过百度、CDSN、新浪微博、知乎等互联网资源了解以下“程序开发语言”的应用领域。....

通过百度.CDSN.新浪微博.知乎等互联网资源了解以下“程序开发语言”的应用领域: C和C++ 一般用于服务端的服务程序开发,硬件编程开发,系统等等大量框架要用到的.JAVA,学好这个可以开发移动设备程序,JSP网页程序.C#,学了这个可以开发Winform,WPF,ASP.NET,等等..即.NET的一个系.VB:Windows窗口应用程序开发.Delphi:强大的窗口编程软件,执行效率很高.Matlab:这个是数学软件,一般作为开发股票软件. 通过海峡人才网.拉勾网了解相关程序语言在什么岗位

引导图滤波算法C语言实现

引导图滤波(导向图滤波, guided Filter)是一种图像滤波技术,能够根据引导图来生成不同的权重,对原图进行加权平均,实现滤波效果.在图像去雾,立体视觉等很多方面有广泛的应用. C语言实现放在我的码云上,链接在此:https://git.oschina.net/rxdj/guidedFilter.git. 输入:引导图像I,待滤波图像P,滤波半径r, 阈值eps:输出:滤波结果图. 引导图可以是单通道或者三通道,三通道必须是RGB格式:待滤波图像必须是单通道图像,数据类型为double:

mbed 程序的语言基础

mBed程序采用C++进行编写,并在此基础上添加了一些自定义的函数和常量,所以我们在这有必要简单地了解一下相应的语言基础. 常量 常量是在程序运算过程中不变的量,常量在程序中经常直接出现,如数字1768:字符‘m’:字符串“mbed”等,此时只要求它们符合相应类型数据的表示方法.相应于各种数据类型,有整型常量.浮点型常量.字符型常量及字符串常量.有时为了代码编写的方便,我们会用一个标识符来代表一个常量,通过宏定义预处理指令来实现,这就是常量定义,格式如下:#define 标识符常量 由用户命名的

在使用Qt5.8完成程序动态语言切换时遇到的问题

因为之前了解过一些Qt国际化的东西,所以在写程序的时候需要显示给用户的字符都使用了 tr(" ")的形式,然后使用 Qt Linguist得到相应的 qm(Qt message)文件,再通过网上介绍的方式,在 main函数中使用 installTranslator,即可让程序在启动时自动判断语言环境,加载相应语言. 至此,静态语言切换已经完成,下面要做的是动态切换(即不需要重启软件). 1.首先,令语言能够切换的 GUI组件用的是 QComboBox,信号是 currentIndexC

[转]iOS应用程序多语言本地化解决方案

最近要对一款游戏进行多语言本地化,在网上找了一些方案,加上自己的一点点想法整理出一套方案和大家分享! 多语言在应用程序中一般有两种做法:一.程序中提供给用户自己选择的机会:二.根据当前用户当前移动设备的语言自动将我们的app切换对应语言. 第一种做法比较简单完全靠自己的发挥了,这里主要讲第二种做法,主要分一下几点: 1.本地化应用程序名称2.本地化字符串3.本地化图片4.本地化其他文件 1.本地化应用程序名称 (1)点击“new file”然后在弹出窗口左侧选择IOS的resource项,在右侧

Eric Raymond对于几大程序开发语言的评价

Eric Raymond是开源运动的领袖人物,对于UNIX开发有很深的造诣,主持开发了fetchmail.他的<大教堂与集市>被奉为开源运动的经典之作.下面对几大开发语言的评价非常中肯,是我近年来看到的比较出色的评论.特别是他评价中抱有的那种"简单就是好"的思想,很值得我们深思.我特别选译出一些段落,供大家阅读思考.Raymond此文不是在泛泛地去谈语言的优劣,而是要回答一个问题:在UNIX下开发开源项目,如何选择开发工具?我翻译的很零散,建议大家去看原文. 参考:http