ADI 技术
直播中

刘晓红

7年用户 255经验值
私信 关注
[问答]

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

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

回帖(6)

刘娟

2019-3-5 10:48:48
Hi,
您的Peaking 滤波器实现也和我所看到的文档(打开SigmaStudio 按F1进Help界面)不一致,请参考一下文档。

 
Thanks,
Jun
举报

刘晓红

2019-3-5 10:55:04
引用: lin364884292 发表于 2019-3-5 10:48
Hi,
您的Peaking 滤波器实现也和我所看到的文档(打开SigmaStudio 按F1进Help界面)不一致,请参考一下文档。

您好:
您看的是文档里的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公式,谢谢!
举报

刘娟

2019-3-5 11:33:56
Hi,
不好意思,根据文档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;
 
Thanks,
Jun
举报

刘晓红

2019-3-5 11:50:28
引用: lin364884292 发表于 2019-3-5 11:33
Hi,
不好意思,根据文档A1的确要反转。公式有所更新,我已经做过验证,请参考下列代码:
        double f0 = 1000;

General 1st-Order Filters  Highpass 更新后验证通过,但Peaking 滤波器更改后结果也还是不对,还请再帮我看看Peaking 滤波器。非常感谢您的帮助!另外我想在SHARC实现大部分常用的滤波器和其他一些功能,能否麻烦您发一些最新的算法参考资料给我参考,谢谢!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分