您的位置: OpenADSP社区论坛 -> Sigma DSP/模拟器件专区 -> 新手上路 -> General 1st-Order Filters 请教
本帖共有457个阅读者
发表帖子 发表投票 回复主题
General 1st-Order Filters 请教
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
General 1st-Order Filters 请教

SigmaStudio的帮助文档里有写到General 1st-Order Filters  Highpass 的系数计算公式为:
ω0 = 2*pi*f0/Fs
gainLinear = 10^(gain/20)
a1 = 2.7^-ω0
b0 = gainLinear * a1
b1 = -a1 * gainLinear
我用C按照上面的方法写了段计算程序,但结果却与SigmaStudio软件的计算结果不同,请帮我看看是哪里出错了?谢谢!

////(f0=1000,gain=0,fs=48000):

float omega,A;      
omega=(float)(2*3.1415926535897932384626433832795*1000/48000);
A=pow(10,(0/20));                      
a1=pow(2.7,-omega);
b0=A*a1;
b1=-a1*A;
a1=-a1;

程序运行结果:
b0=0.878081
b1=-0.878081
a1=0.878081

SigmaStudio软件计算结果(f0=1000,gain=0,fs=48000):
Param Name:  FistOrderSingle101
Param Value:  0.939040541648865

Param Name:  FistOrderSingle111
Param Value:  -0.939040541648865

Param Name:  FistOrderSingle121
Param Value:  0.878081083297729

两个结果不同,请帮忙,谢谢!


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2018/4/9 17:27:19
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
问:另外在计算PEAKING滤波器时也出现了结果不对的问题,与SigmaStudio软件的计算结果不同:

程序:

   omega=(float)(2*M_PI*fc/Fs);              

   A=pow(10,(G/20));

   alpha=sin(omega)/(2*Q);

   a0=1+alpha/A;

   a1=-2*cos(omega);

   a2=1-alpha/A;

   b0=(1+alpha*A);//*gainLinear;

   b1=-(2*cos(omega));//*gainLinear;

   b2=(1-alpha*A);//*gainLinear;

   b0=b0/a0;

   b1=b1/a0;

    b2=b2/a0;

    a1=a1/a0;

    a2=a2/a0;

请也帮忙看看,谢谢!



「该帖子被 OpenADSP 在 2018-04-09 17:28:48 编辑过」

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2018/4/9 17:27:31
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
答:您的Peaking 滤波器实现也和我所看到的文档(打开SigmaStudio 按F1进Help界面)不一致,请参考一下文档。


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2018/4/9 17:27:51
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
问:您看的是文档里的Algorithm Information里的EQ Algorithm下的Peaking滤波器资料,
而我写的是看文档里的Algorithm Information里的General 2nd-Order Filters下的Peaking滤波器资料,
好象这里有些问题:
1:同一文档里两次说到Peaking算法,但却有点不同。
2:您看的算法其实应该是Parametric EQ的算法才对,但资料里却写着是Peaking,实际上结果是和Parametric的数据一样的,我写的那个资料应该也是Parametric,只是GAIN的效果不同而已。
3:我想实现的是在SigmaStudio里(ADAU1701)的filters/second order/single precision/1 ch/general 2nd order里的Peaking算法。但我想我们看到的资料却都是Parametric的计算公式而已,所以结果也不会与SigmaStudio一样。
还请帮忙看看会不会是帮助文档有误及有没有Peaking公式,谢谢!

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2018/4/9 17:29:32
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
答:我自己并没有根据文档实现过这些滤波器,但我发现您的代码里多了行 a1 = - a1,您修改下再试试看。

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2018/4/9 17:29:45
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
问:A1=-A1,这也是文档里有要求在写入DSP时必须将A1反转,应该没错,而且现在错的是B0,B1而不是A1,谢谢!

我照文档写了General 1st-Order Filters  Low pass 是正确的,换成HIGH PASS的公式就不对了。


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2018/4/9 17:30:00
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
答:不好意思,根据文档A1的确要反转。公式有所更新,我已经做过验证,请参考下列代码:

        double f0 = 1000;

        double fs = 48000;

        double gain = 0;

//HP

            double omega = 2d * Math.PI * f0 / fs;

            double gainLinear = Math.Pow(10d, gain / 20d);

            double a1 = Math.Pow(2.7, - omega);

            //double b0 = gainLinear * a1;

            //double b1 = -a1 * gainLinear;

            double b1 = -1.0 * (1.0 + a1) * 0.5 * gainLinear;

            double b0 = -b1;


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2018/4/9 17:30:14
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
问:General 1st-Order Filters  Highpass 更新后验证通过,但Peaking 滤波器更改后结果也还是不对,还请再帮我看看Peaking 滤波器。非常感谢您的帮助!另外我想在SHARC实现大部分常用的滤波器和其他一些功能,能否麻烦您发一些最新的算法参考资料给我参考,谢谢!

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2018/4/9 17:30:52
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
8信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
答:请参考ADI wiki 上更新过的最新文档。

http://wiki.analog.com/resources/tools-software/sigmastudio/toolbox/filters


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2018/4/9 17:31:08
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
9信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
问:您好,看了连接的内容,也没有找到Peaking滤波器的公式内容哦

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2018/4/9 17:31:21
12
1
1/2
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154307 Call, 1 Queries, Processed in 0.031250 second(s),