SigmaStudio之二阶滤波换算官方bug问题

1、lowpass换算公式,如下图,缺少括号在这里插入图片描述

2、Bessel HP如下图,第一个红框应该写成sqrt(3),第2,3红框符号位取反改正。
在这里插入图片描述

3、Bessel LP的如下图红框应该改为Sqrt(3)在这里插入图片描述
举例:附上源码
///
/// 获取BesselLP的系数
///
///
///
private filterAlgoParm write_filter_BesselLP_control(int freq, float dBGain,bool bypass)
{
filterAlgoParm algparm;
//限定频点范围
if (bypass)
{
algparm.a0 = SIGMA_READ_REGISTER_FLOAT2INT(0);
algparm.a1 = SIGMA_READ_REGISTER_FLOAT2INT(1) << 8;
//temp = Convert.ToSingle(-2 * Math.Cos(w0));
algparm.a2 = SIGMA_READ_REGISTER_FLOAT2INT(1) << 8;
// temp = 1 - alpha / A;
algparm.b0 = SIGMA_READ_REGISTER_FLOAT2INT(1);
// temp = (1 + alpha * A) * gainLinear;
algparm.b1 = SIGMA_READ_REGISTER_FLOAT2INT(1);
// temp = Convert.ToSingle((-2 * Math.Cos(w0)) * gainLinear);
algparm.b2 = SIGMA_READ_REGISTER_FLOAT2INT(0);
}
else
{
double w0 = getW0(freq);
double alpha = Math.Sin(w0) / 2 * Math.Sqrt(3);
double gainLinear = getGainLinear(dBGain);
double a0 = 1 + alpha;
double a1 = (2 * Math.Cos(w0) / a0);
double a2 = Convert.ToSingle((alpha - 1) / a0);
double b0 = ((1 - Math.Cos(w0)) * gainLinear / (2 * a0));
float b1 = Convert.ToSingle(((1 - Math.Cos(w0)) * gainLinear) / a0);
float b2 = Convert.ToSingle(b0);
//获取滤波系数
Console.WriteLine(“b0:{0},b1:{1},b2:{2},a1:{3},a2:{4}\n”, b0, b1, b2, a1, a2);
algparm.a0 = SIGMA_READ_REGISTER_FLOAT2INT(Convert.ToSingle(a0));
algparm.a1 = SIGMA_READ_REGISTER_FLOAT2INT(Convert.ToSingle(a1));
algparm.a2 = SIGMA_READ_REGISTER_FLOAT2INT(Convert.ToSingle(a2));

            algparm.b0 = SIGMA_READ_REGISTER_FLOAT2INT(Convert.ToSingle(b0));
            algparm.b1 = SIGMA_READ_REGISTER_FLOAT2INT(b1);
            algparm.b2 = algparm.b0; //SIGMA_READ_REGISTER_FLOAT2INT(Convert.ToSingle((1 - Math.Cos(w0)) * gainLinear / (2* a0)));

        }
        return algparm;
    }
    /// <summary>
    /// 获取BesselLP的Freq和Gain
    /// </summary>
    /// <param name="a0"></param>
    /// <param name="a1"></param>
    /// <param name="a2"></param>
    /// <param name="b0"></param>
    /// <param name="b1"></param>
    /// <param name="b2"></param>
    private filterAppParm read_filter_BesselLP_control(int B2, int B1, int B0, int A2, int A1)
    {
        filterAppParm appParm;
        float b2 = SIGMA_READ_REGISTER_INT2FLOAT(B2);
        float b1 = SIGMA_READ_REGISTER_INT2FLOAT(B1);
        float b0 = SIGMA_READ_REGISTER_INT2FLOAT(B0);
        float a2 = SIGMA_READ_REGISTER_INT2FLOAT(A2);
        float a1 = SIGMA_READ_REGISTER_INT2FLOAT(A1);
        appParm.boost = 0;
        if (1==b0 && 0==b1 && 0==b2 && 0==a1 && 0==a2)
        {
            appParm.freQ = 20;
            appParm.dbGain =0;//获取增益
            appParm.Q = 0;
            appParm.bypass = true;
        }
        else
        {
            float alpha = (1 + a2) / (1 - a2);
            float a0 = 1 + alpha;
            float cosw0 = a1 * a0 / 2;
            float w0 = Convert.ToSingle(Math.Acos(cosw0));
            appParm.freQ = getFreQ(w0);//获取频点
            float gainLinear =  b1 * a0 / (1-cosw0);
            appParm.dbGain = Convert.ToInt32(100*getdBGainLinear(gainLinear));//获取增益
            appParm.Q = 0;
            appParm.bypass = false;
        }
        return appParm;

    }

4、Butterworth HP,第一个红框应该写成sqrt(2),第2,3红框符号位取反改正。
在这里插入图片描述
官方换算公式网址:
http://wiki.analog.com/resources/tools-software/sigmastudio/toolbox/Filters/General2ndorder

![在这里插入图片描述](https://img-blog.csdnimg.cn/1f2f8ee4e96546b4953e3fb9a258007e.png
以上问题,是我对比sigma visial 4.6验证控件参数生成相应系数而得来。
如下修改freq及gain,根据butterworth HP公式换算得来。
PI = 3.141592653589793d
FS = 48000
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值