打印

DSP设计滤波器 代码求解释

[复制链接]
1971|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用汇编写过?

使用特权

评论回复
5
kdurant| | 2012-4-8 09:58 | 只看该作者
关键是要理解滤波器的结构,实现方式

使用特权

评论回复
6
renjie| | 2012-4-29 09:18 | 只看该作者
1 如果总喜欢使用内联表述 个人觉得你的系统还有很多提升的空间 可以告诉你如果我设计一个模型,肯定核心处理算法的很多部分使用自己写的汇编 这不很稀奇,对于经常用dsp而言,这很常见。否则说明理解dsp还有待于提高。
2 lf 结构目前常用的就是那么几种 需要你调试的不过就是实际上参数设置完了哪一个效果最好
3 fir本身是一个有限抽样序列的卷积 很多论文对此权参数细节作用描述得够多了 其实并不难理解。我有时候特别奇怪总是有人喜欢反复讨论那么几个很常用的问题。

使用特权

评论回复
7
MOZATE| | 2012-4-29 09:38 | 只看该作者
FIR IIR的程序都用C写, 关键这个 使用打开这个魔术盒子,是把钥匙,
就是滤波器的参数。 源程序公开的。没有什么难理解。
难理解的就是,这个程序  使用 不同的 滤波参数表,就可以做到不同的滤波器参数。
就是不同频率,各个滤波点等等。
参数如何设计,根据什么来设计。 咱们数学没有学过,
我曾经 分析过 一个 滤波器参数软件。 但是看不明白! 很郁闷。

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

大学里把这些东西 搞得与  核弹技术如此 保密! 难怪这个国家的技术如此的落后!
学术太过保守、垄断、没有自由。。。。

使用特权

评论回复
8
Horse_JD| | 2012-4-29 09:43 | 只看该作者
我现在也在学习IIR滤波器的设计,我尝试的是用MATALAB,这样滤波器的系数放到一个文件,主程序就很简单了。

使用特权

评论回复
9
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

粉丝