一种二阶Biquad滤波器
创始人
2024-05-20 05:03:54
0

一、首先给出biquad的Z变换函数为:
在这里插入图片描述
为了计算方便可对上式进行归一化处理,分子分母同时除以a0,则得出如下:
在这里插入图片描述
对应的差分方程为:
在这里插入图片描述
二、用户定义参数如下
#ifndef LN2
#define LN2 0.69314718055994530942
#endif
#ifndef PI
#define PI 3.14159265358979323846
#endif
Fs:采样率
f0:中心频率
dbGain:即dbBoost,增益
bandwidth:带宽
三、中间变量如下:
A = pow(10, dbGain /40);
omega = 2 * PI * f0/Fs;
sin = sin(omega);
cos=cos(omega);
alpha = sin * sinh(LN2 /2 * bandwidth * omega /sin);
beta = sqrt(A + A);

四、系数计算:
4.1、低通滤波器
H(s) = 1 / (s^2 + s/Q + 1)

b0 = (1 - cos) /2;
b1 = 1 - cos;
b2 = (1 - cos) /2;
a0 = 1 + alpha;
a1 = -2 * cos;
a2 = 1 - alpha;

4.2、高通滤波器
H(s) = s^2 / (s^2 + s/Q + 1)

b0 = (1 + cos) /2;
b1 = -(1 + cos);
b2 = (1 + cos) /2;
a0 = 1 + alpha;
a1 = -2 * cos;
a2 = 1 - alpha;
4.3、带通滤波器
H(s) = s / (s^2 + s/Q + 1)//(constant 0 dB peak gain)

b0 = alpha;
b1 = 0;
b2 = -alpha;
a0 = 1 + alpha;
a1 = -2 * cos;
a2 = 1 - alpha;
4.4、NOTCH滤波器—Sigma中未介绍,可参考该公式
H(s) = (s^2 + 1) / (s^2 + s/Q + 1)

b0 = 1;
b1 = -2 * cos;
b2 = 1;
a0 = 1 + alpha;
a1 = -2 * cos;
a2 = 1 - alpha;
4.5、peaking滤波器—尖峰滤波,Sigma中未介绍,可参考该公式
H(s) = (s^2 + s*(A/Q) + 1) / (s^2 + s/(A*Q) + 1)

b0 = 1 + (alpha * A);
b1 = -2 * cos;
b2 = 1 - (alpha * A);
a0 = 1 + (alpha /A);
a1 = -2 * cos;
a2 = 1 - (alpha /A);
4.6、低架滤波
H(s) = A * (s^2 + (sqrt(A)/Q)s + A)/(As^2 + (sqrt(A)/Q)*s + 1)

b0 = A * ((A + 1) - (A - 1) * cos + beta * sin);
b1 = 2 * A * ((A - 1) - (A + 1) * cos);
b2 = A * ((A + 1) - (A - 1) * cos - beta * sin);
a0 = (A + 1) + (A - 1) * cos + beta * sin;
a1 = -2 * ((A - 1) + (A + 1) * cos);
a2 = (A + 1) + (A - 1) * cos - beta * sin;
4.7、高架滤波
H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A)

b0 = A * ((A + 1) + (A - 1) * cos + beta * sin);
b1 = -2 * A * ((A - 1) + (A + 1) * cos);
b2 = A * ((A + 1) + (A - 1) * cos - beta * sin);
a0 = (A + 1) - (A - 1) * cos + beta * sin;
a1 = 2 * ((A - 1) - (A + 1) * cos);
a2 = (A + 1) - (A - 1) * cos - beta * sin;

参考来源:https://www.cnblogs.com/fellow1988/p/9136346.html

五、频响曲线
var phi=pow((sin(2.0PIf0/(2.0*FS))),2);

var r=pow(b0+b1+b2,2.0)-4.0*(b0b1+4.0b0b2+b1b2)phi+16.0b0b2phiphi(pow(1.0+a1+a2,2.0)-4.0(a1+4.0a1a2)phi+16.0a2phiphi);
r=(r<0)?0:r;

return sqrt( r );

上一篇:[Vulnhub] DC-5

下一篇:php xss攻击

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...