注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mr.Right

不顾一切的去想,于是我们有了梦想。脚踏实地的去做,于是梦想成了现实。

 
 
 

日志

 
 
关于我

人生一年又一年,只要每年都有所积累,有所成长,都有那么一次自己认为满意的花开时刻就好。即使一时不顺,也要敞开胸怀。生命的荣枯并不是简单的重复,一时的得失不是成败的尺度。花开不是荣耀,而是一个美丽的结束,花谢也不是耻辱,而是一个低调的开始。

网易考拉推荐

2阶IIR滤波器C语言实现  

2015-11-04 00:21:57|  分类: 编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
/*
The numerator coefficients are b=[1 0 -1];

The Denominator Coeffs are a=[1 -2rcos(\theta) r^2]; r=.8; th=pi/3;

For implementation in integer arithmetic the coeffs become:

b=[127 0 -128];    a=[ 127 -110 104];
*/

//
// Example C code for 2nd order IIR filter
//


#include <stdio.h>

int main( void )
{
    int yint;    // temp variable for 16 bit multiply result
    char b0 = 127, b1 = 0, b2 = -128, a1 = -111, a2 = 82;
    char x = 50, x1 = 0, x2 = 0, y = 0, y1 = 0, y2 = 0;

    int bit_shift = 7;
    int dc_shift = 128;

    char datain[13] = {128 + 50, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128};
    char dataout[13];

    int i = 0;

// Operating Loop
    while ( i <= 12 )
    {
        x = datain[i] - dc_shift;    // Remove DC level from a/d i/p
//Implement the filter and crudely update the 'past' input and output x and y values
        yint = ( int )b0 * x + ( int )b1 * x1 + ( int )b2 * x2 - ( int )a1 * y1 - ( int )a2 * y2;
        y = ( char )( yint >> bit_shift );  //  8- bit result from filter. Note type casting
        y2 = y1;
        y1 = y;
        x2 = x1;
        x1 = x;
        dataout[i] = y;  // Save output; this will be output to D/A
   printf("i=%d\t y=%d\n", i, dataout[i]);
        x = 0;
        i = i + 1;

    }
}

/*
% Simulation of integer operation of IIR filter
% The aim is to 'exactly match the integer behaviour
% of the microcontroller
clear all
b0=127; b1=0; b2=-127; a1=-111; a2=82;
x1=0; x2=0;  y1=0; y2=0;
x=50;
i=0;
for i=0:20
yint(i+1) = b0*x + b1*x1 + b2*x2  - a1*y1 - a2*y2    ;
y(i+1)=floor(yint(i+1)/(128));
y2 = y1;y1 = y(i+1);    x2 = x1;x1 = x;
x=0;
i=i+1;
%pause
end
i=0:20;
subplot(2,1,1);stem(i,y)
subplot(2,1,2);stem(i,yint)
MATLAB Output:
49,42,-45,-66,-29,17,33,17,-7,-17,-11,1,7,5,-1,-5,-4,-1,1,1,0,…
*/
  评论这张
 
阅读(291)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016