DSP设计滤波器 代码求解释

[复制链接]
3221|8
 楼主| vinsonfeng 发表于 2012-4-4 17:24 | 显示全部楼层 |阅读模式
刚刚接触DSP设计  找到一个DSP设计FIR滤波器的实验  好像是TI的源程序  
可是看不太懂  有大侠帮忙解释一下嘛  
#include "myapp.h"
#include "ICETEK-VC5509-EDU.h"
#include "scancode.h"
#include <math.h>

#define FIRNUMBER 25
#define SIGNAL1F 1000
#define SIGNAL2F 4500
#define SAMPLEF  10000
#define PI 3.1415926

float InputWave();
float FIR();

float fHn[FIRNUMBER]={ 0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,
                       -0.018,0.049,-0.02,0.11,0.28,0.64,0.28,
                       -0.11,-0.02,0.049,-0.018,-0.009,0.01,
                       -0.002,-0.002,0.001,0.0,0.0
                     };
float fXn[FIRNUMBER]={ 0.0 };
float fInput,fOutput;
float fSignal1,fSignal2;
float fStepSignal1,fStepSignal2;
float f2PI;
int i;
float fIn[256],fOut[256];
int nIn,nOut;

main()
{

nIn=0; nOut=0;

f2PI=2*PI;

fSignal1=0.0;

fSignal2=PI*0.1;

fStepSignal1=2*PI/30;

fStepSignal2=2*PI*1.4;

while ( 1 )

{

fInput=InputWave();

fIn[nIn]=fInput;

nIn++; nIn%=256;

fOutput=FIR();

fOut[nOut]=fOutput;

nOut++;
/* break point */

if ( nOut>=256 )

{

nOut=0;


}

}
}

float InputWave()
{

for ( i=FIRNUMBER-1;i>0;i-- )

fXn[i]=fXn[i-1];

fXn[0]=sin((double)fSignal1)+cos((double)fSignal2)/6.0;

fSignal1+=fStepSignal1;

if ( fSignal1>=f2PI )
fSignal1-=f2PI;

fSignal2+=fStepSignal2;

if ( fSignal2>=f2PI )
fSignal2-=f2PI;

return(fXn[0]);
}

float FIR()
{

float fSum;

fSum=0;

for ( i=0;i<FIRNUMBER;i++ )

{

fSum+=(fXn[i]*fHn[i]);

}

return(fSum);
}
 楼主| vinsonfeng 发表于 2012-4-4 20:29 | 显示全部楼层
了解的大侠  可以来交流下啊  帮助下菜鸟
renjie 发表于 2012-4-7 10:09 | 显示全部楼层
这东西一般得用汇编写
kdurant 发表于 2012-4-8 09:58 | 显示全部楼层
。。。。
LS用汇编写过?
kdurant 发表于 2012-4-8 09:58 | 显示全部楼层
关键是要理解滤波器的结构,实现方式
renjie 发表于 2012-4-29 09:18 | 显示全部楼层
1 如果总喜欢使用内联表述 个人觉得你的系统还有很多提升的空间 可以告诉你如果我设计一个模型,肯定核心处理算法的很多部分使用自己写的汇编 这不很稀奇,对于经常用dsp而言,这很常见。否则说明理解dsp还有待于提高。
2 lf 结构目前常用的就是那么几种 需要你调试的不过就是实际上参数设置完了哪一个效果最好
3 fir本身是一个有限抽样序列的卷积 很多论文对此权参数细节作用描述得够多了 其实并不难理解。我有时候特别奇怪总是有人喜欢反复讨论那么几个很常用的问题。
MOZATE 发表于 2012-4-29 09:38 | 显示全部楼层
FIR IIR的程序都用C写, 关键这个 使用打开这个魔术盒子,是把钥匙,
就是滤波器的参数。 源程序公开的。没有什么难理解。
难理解的就是,这个程序  使用 不同的 滤波参数表,就可以做到不同的滤波器参数。
就是不同频率,各个滤波点等等。
参数如何设计,根据什么来设计。 咱们数学没有学过,
我曾经 分析过 一个 滤波器参数软件。 但是看不明白! 很郁闷。

我还咱们的 大学教育如此失败! 咱们想学的东西都没有的学!?

大学里把这些东西 搞得与  核弹技术如此 保密! 难怪这个国家的技术如此的落后!
学术太过保守、垄断、没有自由。。。。
Horse_JD 发表于 2012-4-29 09:43 | 显示全部楼层
我现在也在学习IIR滤波器的设计,我尝试的是用MATALAB,这样滤波器的系数放到一个文件,主程序就很简单了。
lxg9165 发表于 2012-4-30 15:04 | 显示全部楼层
关键要有书就好了 现在看不大懂~










Signature------------------------------------------------------
Where there is great love, there are always miracles.Nike Air Shox Nike Shox NZ Nike Shox R4
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

3

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部