3033|5

91

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

FIR源程序帮忙解读,万分感谢!! [复制链接]

#include "DSP28_Device.h"     // DSP281x Headerfile Include File
//#include "DSP281x_Examples.h"   // DSP281x Examples Include File
//#include "f2812a.h"
#include"math.h"

#define FIRNUMBER 25
#define SIGNAL1F 1000
#define SIGNAL2F 4500
#define SAMPLEF  10000
#define PI 3.1415926
#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],H[102];
int nIn,nOut;
 main(void)
{
    InitSysCtrl();
    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++;
  if ( nOut>=256 )
  {
   nOut=0;  /* 请在此句上设置软件断点 */
  }
 }
}  


float InputWave()
{
 for ( i=FIRNUMBER-1;i>0;i-- )
  fXn=fXn[i-1];
// fXn[0]=sin(fSignal1)+cos(fSignal2)/6.0;  //此时为混合信号(sin 为低频信号,cos为高频信号)
// fXn[0]=cos(fSignal2)/6.0; //此时为cos 高频信号
 fXn[0]=sin(fSignal1); //此时为sin 低频信号
 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*fHn);
 }
 return(fSum);
}

 

 

这是低通滤波程序,我把它放在ccs里面运行了,结果正确,可是还是有很多问题没有解决掉,请各位高手不吝赐教!!

 

程序运行结果:

 

sin cos滤波前.jpg (36.14 KB, 下载次数: 0)

(1)、sin 和cos混合频率滤波

(1)、sin 和cos混合频率滤波

sin cos 滤波后.jpg (35.25 KB, 下载次数: 0)

(2)、sin和cos混合频率滤波后,高频滤掉

(2)、sin和cos混合频率滤波后,高频滤掉

最新回复

单独340个sina波/1024点,楼主可以看到单位非常小   [attach]83330[/attach]  详情 回复 发表于 2012-3-17 16:58
 
点赞 关注

回复
举报

91

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
现在的问题是:
(1)、当我将cos(高频信号)单独输入进去后,发现信号竟然没有被滤掉;sin(低频信号)单独输入进去后,信号也成功的恢复了,这是为什么呢?难道滤波时必须是混合信号吗?单独的高频信号不能滤掉吗?
(2)、各位高手能帮我看看,这个程序里的sin cos函数的频率值是多少吗?sin 的每次增值为2*PI/30,cos每次增值是2*PI*1.4,那是不是可以理解为二者频率相差30*1.4倍?可是根据图形,二者仅相差十倍左右,这又是为什么呢?
 
 

回复

569

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 

可以滤掉的,楼主注意看单位。CCS会把图放大的。

 

下面是正常的波10个SINA+340个sina波混合

 

 

 
 
 

回复

569

帖子

0

TA的资源

五彩晶圆(中级)

4
 

单独340个sina波/1024点,楼主可以看到单位非常小

 

赞赏

1

查看全部赞赏

 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(高级)

5
 
明白了,真的很感谢,谢谢!!
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(高级)

6
 

回复 4楼 hlx3012 的帖子

谢谢!!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表