2932|3

91

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

FIR滤波程序(求解答) [复制链接]

大家好,因项目需要,我需要做个FIR滤波器程序,可是根据参考程序,自己设计的还是不行,今天实在没有办法了,把程序重要部分贴上来,大家帮我解答一下吧,谢谢了!!

 

#include "DSP28_Device.h"

#include"math.h"

//FIR相关参数初始化

#define Pi          3.1415926    //圆周率系数

#define  SampleNum   200       //AD采样个数

#define WindowNum   25         //窗函数长度为25    τ(延迟时间)=25-1/2

#define DelayTime   WindowNum/2       //即专业术语   τ(延迟时间)

 

//下面这个函数就是求FIR系数的函数,我定义是25阶的滤波(WindowNum),加汉明窗了

void firdes(int DelayTime1,int WindowNum1, double npass1)

  {

      int n;

     for (n=0; n<WindowNum1; n++)

      {

  H[n]= sin((n-DelayTime1)*npass1*2*Pi)*(0.54-0.46*cos(2*n*Pi/(WindowNum1-1)))
/(Pi*(n-DelayTime1));         

 

//此处即是冲击响应函数公式,(汉明窗), npass是数字截止频率=截止频率/采样频率

  

  if (n==WindowNum1/2) H[n]=npass1*2;

      }

   }

 

系数.jpg (69.14 KB, 下载次数: 1)

这是我自己设计的FIR系数

这是我自己设计的FIR系数
 
点赞 关注

回复
举报

91

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

//主函数(简化后)

void main(void)

{

   int i,j,p;

   double fs,fstop,npass;

   fs=100000;       //采样频率为100KHZ  

   fstop=4000;       //截止频率为4KHZ

   npass=fstop*1.0/fs; //根据课本npass是数字截止频率=截止频率*2*Pi / 采样频率

      

for(;;)          //这个函数是FIR滤波函数,将接收到数据与FIR低通系数相乘

       {

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

              {

                x1 =   a1;        //数组a1表示从AD接收到的数据

                x2 = x1*3.0/4096.0;  

//此处x2为了进行滤波乘积运算,将接收数据变小(因F2812参考电压为3V,采样位数为12位,故这样处理,此处是否需要修改?有资料为x2=x1/1024   

          

for (p=1; p<WindowNum; p++)

        {

               Wind[WindowNum-p] = Wind[WindowNum-p-1];

          }

    Wind[0] =x2;       

         r1 = 0;

         rm1= 0;      

           for (j=0; j<WindowNum; j++)   //做卷积相乘

                { 

                   r1  =Wind[j] * fHn[j];

                     rm1 = rm1 + r1;     

             }    

             a2[i]= rm1*4096.0/3;//此数组a2里面放的是 对该信号进行FIR滤波的结果          

           }           

       }

}    

[ 本帖最后由 小喇叭 于 2012-3-20 23:07 编辑 ]
 
 

回复

91

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
输入波形是经过F2812的AD进入到DSP中,然后我想通过FIR滤波程序,将输入波形4KHZ以上的噪音去掉。我设计的采样频率fs是100KHZ(就是说我控制F2812的AD,每隔1/100KHZ采集一次数据,截止频率fstop是4KHZ)。根据ccs软件自带图形显示,我做的FIR滤波图形很不稳定,低频信号有时没问题,可是高频的不但没有滤掉,还在图形上显示为前移了(即本来单独10KHZ信号,可是滤掉后10KHZ图形上没有数据,8KHZ处却有图形,实际上我觉得就是没有滤掉)
自己有很多不太懂,现在对FIR有些混淆,看书也没看出出路,下面是自己重点疑点,请大家帮我解答一下吧,谢谢啦!!
1、        项目需要滤掉4KHZ以上的波,我打算做一个低通滤波,请问首先我将滤波阶数设为多少合适? (本打算设计WindowNum=101阶,此处WindowNum=25)
2、        程序中x2那样处理合适吗?我使用F2812自带的AD接收模块(参考电压为3V,12位)
3、        滤波函数我使用的是汉明窗函数,各位感觉应该使用哪种更好?

4、采样频率100KHZ,截止频率是4KHZ,这样合适吗?是不是采样频率不能太大?我这样求出来的系数见图形(系数没有负的,全是正的,请问这是怎么回事?)


   //此处是FIR参考系数 ,这个系数表没有公式,所以我不知道怎么求的,带进我的程序中也不怎么正确,不过它的系数很明显有正负
Float fHn[25]={ 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
                     };
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(高级)

4
 
求解啊……
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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