搜索
bottom↓
回复: 21

请教一阶二阶低通滤波器

[复制链接]

出0入0汤圆

发表于 2020-2-19 09:15:25 | 显示全部楼层 |阅读模式
请教一下,这个滤波器的代码在下面,是根据什么公式写出的代码?滤波器是什么类型的滤波器?原理是什么?
typedef struct
{
        double PrevOut;
        double PrevIn;

       
        double Frequency;
       
       
        double delta;
        double par;
}FIRST_ORDER_FILTER;



typedef struct
{
        double PreIn1;
        double PreIn2;
        double PreOut1;
        double PreOut2;

        double fWn;
        double fKesai;
        double k, k1, k2, k3, k4, k5, k6;
}SECOND_ORDER_FILTER;
void ResetFirstOrderFilter(FIRST_ORDER_FILTER *pFilter, double Frequency)
{
        double delta, par;

        delta = 1.0/(2.0*PI*Frequency);

        par = 1.0/(2.0*delta + Ts);

        pFilter->Frequency = Frequency;
        pFilter->delta = delta;
        pFilter->par = par;

        pFilter->PrevIn = 0.0;
        pFilter->PrevOut = 0.0;
}

void ResetSecondOrderFilter(SECOND_ORDER_FILTER *pFilter, double ffWn, double ffKesai)
{
        double k;

        pFilter->PreIn1 = 0.0;
        pFilter->PreIn2 = 0.0;
        pFilter->PreOut1 = 0.0;
        pFilter->PreOut2 = 0.0;

        pFilter->fWn = ffWn;
        pFilter->fKesai = ffKesai;

        k = ffWn * ffWn;

        pFilter->k = k;

        pFilter->k1 = 4.0 - 4.0*ffWn*Ts*ffKesai + Ts*Ts*ffWn*ffWn;
        pFilter->k2 = 2.0*Ts*Ts*ffWn*ffWn - 8.0;
        pFilter->k3 = 4.0 + 4.0*ffWn*Ts*ffKesai + Ts*Ts*ffWn*ffWn;

        pFilter->k4 = k*Ts*Ts;
        pFilter->k5 = 2.0*k*Ts*Ts;
        pFilter->k6 = k*Ts*Ts;
}

double FirstOrderFilterOutput(FIRST_ORDER_FILTER *pFilter, double fIn)
{
        double fPrevOut, fPrevIn;
        double delt, par;
        double fOut;

        delt = pFilter->delta;
        par = pFilter->par;

        fPrevIn = pFilter->PrevIn;
        fPrevOut = pFilter->PrevOut;

        fOut = par*((2.0*delt - Ts)*fPrevOut + Ts*fPrevIn + Ts*fIn);

        pFilter->PrevIn = fIn;
        pFilter->PrevOut = fOut;

        return fOut;
}

double SecondOrderFilterOutput(SECOND_ORDER_FILTER *pFilter, double fIn)
{
        double mfOut;

               
        mfOut = (pFilter->k4 * pFilter->PreIn2 +
                pFilter->k5 * pFilter->PreIn1 +
                pFilter->k6 * fIn -
                pFilter->k1 * pFilter->PreOut2 -
                pFilter->k2 * pFilter->PreOut1)/pFilter->k3;

        pFilter->PreOut2 = pFilter->PreOut1;
        pFilter->PreOut1 = mfOut;

        pFilter->PreIn2 = pFilter->PreIn1;
        pFilter->PreIn1 = fIn;

        return  mfOut;
}

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

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入10汤圆

发表于 2020-2-19 11:18:50 | 显示全部楼层
我最近在看二阶低通滤波模拟电路,想用FPAG实现。后面又看到FIR滤波器,也可以做低频滤波。
想知道二阶低通滤波和FIR滤波器,哪个好?

出0入0汤圆

发表于 2020-2-19 12:50:06 来自手机 | 显示全部楼层
围观一下,搬凳子

出0入4汤圆

发表于 2020-2-19 13:26:09 | 显示全部楼层
水平不够,关注一下,

出0入0汤圆

 楼主| 发表于 2020-2-23 20:53:03 | 显示全部楼层
没人愿意回答一下吗?

出10入23汤圆

发表于 2020-2-23 21:52:48 | 显示全部楼层
iir滤波器

出105入79汤圆

发表于 2020-2-23 21:53:28 | 显示全部楼层
matlab里面可以直接设计滤波器(低通,高通,带通等), 生成C代码以及代码里面的参数.

出10入23汤圆

发表于 2020-2-23 22:17:09 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出10入23汤圆

发表于 2020-2-23 22:18:58 | 显示全部楼层
楼主位的一阶滤波器就是把模拟的RC一阶滤波器通过双线性变换得到的数字一阶IIR滤波器,转换过程如上图所示

出10入23汤圆

发表于 2020-2-23 22:23:31 | 显示全部楼层
1,先求出滤波器的s域传递函数
2,把s域转换成z域(双线性变换/冲激响应不变法/阶跃响应不变法)
3,把z域方程转换成时域差分方程
4,时域差分方程的本质就是该滤波器的程序代码实现,体现的是out(n)与in(n)  in(n-1) out(n-1)之间的代数关系

出675入8汤圆

发表于 2020-2-24 08:52:24 来自手机 | 显示全部楼层
zouzhichao 发表于 2020-2-23 22:23
1,先求出滤波器的s域传递函数
2,把s域转换成z域(双线性变换/冲激响应不变法/阶跃响应不变法)
3,把z域 ...

学习了哦  

出0入0汤圆

发表于 2020-2-24 12:30:09 来自手机 | 显示全部楼层
了解一下,不懂。

出0入0汤圆

发表于 2020-2-24 13:23:50 | 显示全部楼层

我X,大神。
最近常感基础不稳……正打算把大学的课程复习一遍。

出0入0汤圆

发表于 2020-2-24 14:03:41 | 显示全部楼层
zouzhichao 发表于 2020-2-23 22:23
1,先求出滤波器的s域传递函数
2,把s域转换成z域(双线性变换/冲激响应不变法/阶跃响应不变法)
3,把z域 ...

牛!学习了,改天得复习一下了!

出0入0汤圆

 楼主| 发表于 2020-3-6 20:45:53 | 显示全部楼层
谢谢大神回复~

出0入0汤圆

发表于 2020-3-7 14:17:58 | 显示全部楼层
zouzhichao 发表于 2020-2-23 22:23
1,先求出滤波器的s域传递函数
2,把s域转换成z域(双线性变换/冲激响应不变法/阶跃响应不变法)
3,把z域 ...

讲的很透彻,学习了

出10入23汤圆

发表于 2020-3-7 14:37:37 来自手机 | 显示全部楼层
kms2hh 发表于 2020-3-7 14:17
讲的很透彻,学习了

数字信号处理和计控的基础知识

出0入0汤圆

发表于 2020-3-7 15:35:22 | 显示全部楼层
基础知识,好难的,现在想想主要是老师的问题,我们的教自控的那家伙滔滔不绝,但是从没用过示波器或C代码

推荐几本书
epdf.pub_robert-lacostes-the-darker-side-practical-applicat.pdf

出0入0汤圆

发表于 2020-6-29 11:04:40 | 显示全部楼层
zouzhichao 发表于 2020-2-23 22:23
1,先求出滤波器的s域传递函数
2,把s域转换成z域(双线性变换/冲激响应不变法/阶跃响应不变法)
3,把z域 ...

这个回复得好详细,学习了,谢谢

出95入100汤圆

发表于 2020-6-29 21:27:18 | 显示全部楼层
用的都是double 这个是matlab自动生成的函数吧。

出0入0汤圆

发表于 2020-6-30 08:28:44 来自手机 | 显示全部楼层
8楼好厉害啊!

出200入657汤圆

发表于 2020-6-30 09:16:43 | 显示全部楼层
第二个也是IIR。
有个疑问:为什么不直接根据截止频率直接计算IIR的系数,设计一个一阶IIR,而要双线性变换,双线性变换有什么好处
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-28 11:19

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

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