gpt4 book ai didi

c - 绘制双二阶滤波器的频率响应

转载 作者:太空宇宙 更新时间:2023-11-04 08:37:16 27 4
gpt4 key购买 nike

这是一个很难的问题,虽然我能想到一些拼凑的方法,但我觉得有一个干净的数学方法,尽管我自己发明它有困难。

我有许多参数可以控制(软件)音频双二阶滤波器。本质上只有 3 个参数,频率、增益和 Q(或带宽)。在音频方面,频率代表滤波器的中心频率。增益表示此频率是被提升还是被削减(增益为 0 不会导致通过滤波器的音频发生变化)。 Q 表示滤波器的宽度 - 即,非常宽的滤波器可能会影响远离中心频率的频率,而窄(低 Q)滤波器只会影响靠近中心频率的频率。滤波器采用钟形曲线的形式,或者至少这是一个近似值,我不确定它在数学上是否准确。

我想以图形方式显示这些滤波器的特性 - 显示增益与频率的关系图。有几个这样的过滤器应用于音频 channel ,我希望能够添加不同的结果图,以生成一个整体图(IE 汇总组合过滤器的所有组件的图)。但我也希望能够访问各个过滤器图表。

我可以处理将组件图添加到单个“总”图中,但我不知道如何从过滤器参数生成原始 x-y 图。我将绘制位图,所以我所需要的只是能够创建 frequency[x]=y 形式的数组。我在 C 中这样做,所以我没有 matlab 等中的数学工具。所以我可能有一个中心频率为 1000 (Hz) 的滤波器,增益为 20(db 或线性,我知道如何转换它) 和 Q 为 3。Q 因子是相对的,如果这会导致任何并发症,则不必在数学上完全正确。

这似乎是一个非常简单的数学函数,但数学不是我的强项,而且我知道的还不够——我一直在研究正弦函数等,但它不起作用,我怀疑可能是因为过度复杂化而浪费了处理能力数学(尽管我在那里可能是错的)。

TIA,皮特

最佳答案

我对双二阶滤波器、Q 值和钟形曲线之间的关系存有疑问。但我会把这些放在一边,只告诉您如何绘制钟形曲线,因为这就是您要问的。

从这里wikipedia article ,钟形曲线的方程是

enter image description here

在哪里申请

  • a对应增益
  • b 确定中心频率
  • 2c^2与Q有关(值越大曲线越宽)

下面的 C 代码计算了一个示例钟形曲线。对于此示例,数字是根据绘制到 250 像素宽 x 200 像素高的窗口中选择的,坐标系中原点 {0,0} 位于左下角。

int width  = 250;
int height = 200;

int bellCurve[width]; // the output array that holds the f(x) values

double gain = 180; // the 'a' value, determines how high the peak is from the baseline
double offset = 10; // the 'd' value, determines the y coordinate of the baseline
double qFactor = 1000; // the '2c^2' value, determines how fat the curve is
double center = 100; // the 'b' value, determines the x coordinate of the peak
double dx;

for ( int x = 0; x < width; x++ )
{
dx = x - center;
bellCurve[x] = gain * exp( -( dx * dx ) / qFactor ) + offset;
}

绘制曲线会产生这样的图像,其中峰值位于 x=100, y=10+180=190

enter image description here

关于c - 绘制双二阶滤波器的频率响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25692034/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com