hetao7241 发表于 2008-7-2 06:07:38

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

FIR数字低通滤波器,在2812上实现FIR低通滤波,还带本人(baby_cwl)调试过程视频,来自本贴地址:http://www.hellodsp.com/bbs/viewthread.php?tid=4634。
点击此处下载 ourdev_334383.rar(文件大小:3.22M) (原文件名:DSP2812_FIR.rar)

andanlandian 发表于 2008-7-3 14:09:32

谢谢楼主

FlashNuk 发表于 2008-7-3 22:28:25

good!

shian0551 发表于 2009-1-5 14:07:16

 好,看看。

baiya 发表于 2010-1-23 18:54:02

正在找这个,太感谢lz

hetao7241 发表于 2010-1-23 19:49:51

我也想请教楼上几位,那个系数怎么算,我还没有使用过那个软件,或有哪些捷径学习,谢谢!

lzlym182 发表于 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.';                     %加窗

hetao7241 发表于 2010-1-25 17:16:27

回楼上,我没有学习过matlab,我计算机也安装了这个软件,不知道怎么去使用,学习哪些书可以快速入门,可以推荐一本吗?谢谢!

网上找了一个例子:

#define PI3.1415926
#define NUM200
/**********************************************/
const int length=NUM;
#define COUNT162
const int h={
      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;

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

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

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

lzlym182 发表于 2010-1-26 09:18:49

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

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

ksniper 发表于 2010-1-26 09:30:57

mark

hetao7241 发表于 2010-1-26 18:17:07

谢谢8楼lzlym182,我这几天也在玩STM32F103VBT6,会玩了就可以做一下FIR。

myhonour 发表于 2010-4-20 13:56:39

mark

lgyao 发表于 2010-6-4 17:03:28

为什么在我的CCS上运行不出来滤波后的正弦波呢??想不通了。。一模一样的程序

crom 发表于 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?:通带边缘频率、阻带边缘频率、阻带衰减、采样频率又分别对应代码中的什么内容?谢谢!

sdmmqy 发表于 2010-6-9 16:51:30

MK

lgyao 发表于 2010-7-21 09:42:58

这个滤波对相位的滞后怎么校正?

demoxie 发表于 2010-7-23 10:53:56

谢谢,正在学习。

myfriend6042 发表于 2010-12-4 11:34:12

mark

lylatyou 发表于 2010-12-19 15:25:54

TI有官方的FIR汇编代码啊,运行时间很短的。
STM32的也有的。TI官方的FIR和IIR汇编程序都已经被我应于与产品中了。自己用C写的感觉时间比较长。

AG17 发表于 2010-12-19 21:29:53

mark

warmonkey 发表于 2010-12-19 22:09:13

STM32官方代码似乎不能处理连续数据流,阶数也不是任意的

n104391455 发表于 2011-4-28 15:42:43

mark

asma 发表于 2011-5-30 16:39:59

mark

yaowujun123 发表于 2011-8-21 00:39:22

回复【楼主位】hetao7241
-----------------------------------------------------------------------

很好,谢谢

bingshuihuo888 发表于 2011-12-23 14:19:15

mark
页: [1]
查看完整版本: FIR数字低通滤波器,在2812上实现FIR低通滤波,还带本人(baby_cwl)调试过程视频。