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) 谢谢楼主 good! 好,看看。 正在找这个,太感谢lz 我也想请教楼上几位,那个系数怎么算,我还没有使用过那个软件,或有哪些捷径学习,谢谢! 系数?是不是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.'; %加窗 回楼上,我没有学习过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,谢谢! 简单回答楼上的:
1.因为要去掉不需要信号而留下感兴趣的信号,所以要滤波。至于为什么要用FIR,除了FIR本省的优点外,还要根据实际情况决定使用哪种滤波方式。总之是一个比较令人头疼的数学知识,书上有很多介绍,自己去补吧。
2.代码千变万化,上面仅仅是一个设计51阶低通FIR的例子,加窗设计(使用海明窗),仅供参考。
3.阶数的选取,主要是根据所要设计的滤波器参数决定。一般情况下阶数越高,滤波器频率响应曲线越好。但是不能做的太高,原因很简单,一是没必要,二是处理器可能处理不过来(阶数越高,乘加法计算越多)。一般的单片机不擅长浮点数乘法运算,本身的运行速度也不够快,所以就别妄想了。
我用matlab就两星期,半道出家,也不懂。资料一本没有,网上大把的资料,随手一抓一个来看就是。 mark 谢谢8楼lzlym182,我这几天也在玩STM32F103VBT6,会玩了就可以做一下FIR。 mark 为什么在我的CCS上运行不出来滤波后的正弦波呢??想不通了。。一模一样的程序 回复【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?:通带边缘频率、阻带边缘频率、阻带衰减、采样频率又分别对应代码中的什么内容?谢谢! MK 这个滤波对相位的滞后怎么校正? 谢谢,正在学习。 mark TI有官方的FIR汇编代码啊,运行时间很短的。
STM32的也有的。TI官方的FIR和IIR汇编程序都已经被我应于与产品中了。自己用C写的感觉时间比较长。 mark STM32官方代码似乎不能处理连续数据流,阶数也不是任意的 mark mark 回复【楼主位】hetao7241
-----------------------------------------------------------------------
很好,谢谢 mark
页:
[1]