搜索
bottom↓
回复: 24

FIR数字低通滤波器,在2812上实现FIR低通滤波,还带本人(baby_cwl)调试过程视频。

[复制链接]

出0入0汤圆

发表于 2008-7-2 06:07:38 | 显示全部楼层 |阅读模式
FIR数字低通滤波器,在2812上实现FIR低通滤波,还带本人(baby_cwl)调试过程视频,来自本贴地址:http://www.hellodsp.com/bbs/viewthread.php?tid=4634。
点击此处下载 ourdev_334383.rar(文件大小:3.22M) (原文件名:DSP2812_FIR.rar)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2008-7-3 14:09:32 | 显示全部楼层
谢谢楼主

出0入0汤圆

发表于 2008-7-3 22:28:25 | 显示全部楼层
good!

出0入0汤圆

发表于 2009-1-5 14:07:16 | 显示全部楼层
 好,看看。

出0入0汤圆

发表于 2010-1-23 18:54:02 | 显示全部楼层
正在找这个,太感谢lz

出0入0汤圆

 楼主| 发表于 2010-1-23 19:49:51 | 显示全部楼层
我也想请教楼上几位,那个系数怎么算,我还没有使用过那个软件,或有哪些捷径学习,谢谢!

出0入0汤圆

发表于 2010-1-25 14:39:16 | 显示全部楼层
系数?是不是h(N)的值?用matlab的计算就可以。
贴一段实例代码供参考
order=51;                           %FIR低通滤波器阶数
wc=2*pi*300/6800;                   %滤波器截止频率点
n=0:order-1;
r=(order-1)/2;
hdn=sin(wc*(n-r))/pi./(n-r);        %理想响应函数
if rem(order,2)~=0                  %判断N是否为奇数
    hdn(r+1)=wc/pi;                 %处理n=r时分母为0的情况
end
wn=hamming(order);                  %海明窗
hn=hdn.*wn.';                       %加窗

出0入0汤圆

 楼主| 发表于 2010-1-25 17:16:27 | 显示全部楼层
回楼上,我没有学习过matlab,我计算机也安装了这个软件,不知道怎么去使用,学习哪些书可以快速入门,可以推荐一本吗?谢谢!

网上找了一个例子:

#define PI  3.1415926
#define NUM  200
/**********************************************/
const int length=NUM;
#define COUNT  162  
const int h[COUNT]={
        0,      0,     -1,     -1,     -1,     -1,     -2,     -2,     -3,
       -3,     -3,     -3,     -3,     -3,     -2,     -2,     -1,      1,
        3,      5,      7,     10,     13,     17,     21,     24,     28,
       31,     34,     36,     38,     38,     37,     35,     31,     26,
       19,      9,     -2,    -15,    -30,    -46,    -64,    -83,   -102,
     -121,   -139,   -157,   -172,   -184,   -193,   -198,   -198,   -192,
     -180,   -162,   -135,   -101,    -59,     -9,     49,    115,    188,
      268,    353,    444,    539,    637,    736,    835,    933,   1028,
     1118,   1203,   1281,   1350,   1410,   1459,   1496,   1522,   1534,
     1534,   1522,   1496,   1459,   1410,   1350,   1281,   1203,   1118,
     1028,    933,    835,    736,    637,    539,    444,    353,    268,
      188,    115,     49,     -9,    -59,   -101,   -135,   -162,   -180,
     -192,   -198,   -198,   -193,   -184,   -172,   -157,   -139,   -121,
     -102,    -83,    -64,    -46,    -30,    -15,     -2,      9,     19,
       26,     31,     35,     37,     38,     38,     36,     34,     31,
       28,     24,     21,     17,     13,     10,      7,      5,      3,
        1,     -1,     -2,     -2,     -3,     -3,     -3,     -3,     -3,
       -3,     -2,     -2,     -1,     -1,     -1,     -1,      0,      0
        };
        
static int x1[NUM+COUNT];

int indata[NUM];
void filter(uint xin[],uint xout[],int n,const int h[])
{
   int i,j;
   long sum;
   for(i=0;i<length;i++)
   x1[n+i-1]=xin;
   for(i=0;i<length;i++)
    {
     sum=0;
     for(j=0;j<n;j++)
     sum+=(long)h[j]*x1[i-j+n-1];
     xout=sum>>15;
    }
    for(i=0;i<(n-1);i++)
    x1[n-i-2]=xin[length-i-1];
}

很想搞清楚几个问题:
1,为什么要进行FIR滤波,FIR滤波算法一般用在哪些地方,这种算法好象在普通单片机(51,AVR)上运行可能困难?
2,计算系数就是按6楼的代码吧。
3,这个阶数一般怎么选取,我看有的选的小,有的大。

6楼可否留个联系方式,方便跟你学习一下matlab,谢谢!

出0入0汤圆

发表于 2010-1-26 09:18:49 | 显示全部楼层
简单回答楼上的:
1.因为要去掉不需要信号而留下感兴趣的信号,所以要滤波。至于为什么要用FIR,除了FIR本省的优点外,还要根据实际情况决定使用哪种滤波方式。总之是一个比较令人头疼的数学知识,书上有很多介绍,自己去补吧。
2.代码千变万化,上面仅仅是一个设计51阶低通FIR的例子,加窗设计(使用海明窗),仅供参考。
3.阶数的选取,主要是根据所要设计的滤波器参数决定。一般情况下阶数越高,滤波器频率响应曲线越好。但是不能做的太高,原因很简单,一是没必要,二是处理器可能处理不过来(阶数越高,乘加法计算越多)。一般的单片机不擅长浮点数乘法运算,本身的运行速度也不够快,所以就别妄想了。

我用matlab就两星期,半道出家,也不懂。资料一本没有,网上大把的资料,随手一抓一个来看就是。

出0入0汤圆

发表于 2010-1-26 09:30:57 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-1-26 18:17:07 | 显示全部楼层
谢谢8楼lzlym182,我这几天也在玩STM32F103VBT6,会玩了就可以做一下FIR。

出0入0汤圆

发表于 2010-4-20 13:56:39 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-4 17:03:28 | 显示全部楼层
为什么在我的CCS上运行不出来滤波后的正弦波呢??想不通了。。一模一样的程序

出0入0汤圆

发表于 2010-6-8 13:03:32 | 显示全部楼层
回复【6楼】lzlym182  
系数?是不是h(n)的值?用matlab的计算就可以。
贴一段实例代码供参考
order=51;                           %fir低通滤波器阶数
wc=2*pi*300/6800;                   %滤波器截止频率点
n=0:order-1;
r=(order-1)/2;
hdn=sin(wc*(n-r))/pi./(n-r);        %理想响应函数
if rem(order,2)~=0                  %判断n是否为奇数
    hdn(r+1)=wc/pi;                 %处理n=r时分母为0的情况
end
wn=hamming(order);                  %海明窗
hn=hdn.*wn.';                       %加窗
-----------------------------------------------------------------------

请教,在这段代码中,滤波器截止频率点是指那一个?300还是6800?:通带边缘频率、阻带边缘频率、阻带衰减、采样频率又分别对应代码中的什么内容?谢谢!

出0入0汤圆

发表于 2010-6-9 16:51:30 | 显示全部楼层
MK

出0入0汤圆

发表于 2010-7-21 09:42:58 | 显示全部楼层
这个滤波对相位的滞后怎么校正?

出0入0汤圆

发表于 2010-7-23 10:53:56 | 显示全部楼层
谢谢,正在学习。

出0入0汤圆

发表于 2010-12-4 11:34:12 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-19 15:25:54 | 显示全部楼层
TI有官方的FIR汇编代码啊,运行时间很短的。
STM32的也有的。TI官方的FIR和IIR汇编程序都已经被我应于与产品中了。自己用C写的感觉时间比较长。

出0入0汤圆

发表于 2010-12-19 21:29:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-19 22:09:13 | 显示全部楼层
STM32官方代码似乎不能处理连续数据流,阶数也不是任意的

出0入0汤圆

发表于 2011-4-28 15:42:43 | 显示全部楼层
mark

出420入0汤圆

发表于 2011-5-30 16:39:59 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-21 00:39:22 | 显示全部楼层
回复【楼主位】hetao7241
-----------------------------------------------------------------------

很好,谢谢

出0入0汤圆

发表于 2011-12-23 14:19:15 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-14 16:45

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表