gpt4 book ai didi

objective-c - 一种检测特定频率的算法?

转载 作者:太空宇宙 更新时间:2023-11-04 06:36:43 25 4
gpt4 key购买 nike

<分区>

我使用 Goertzel 算法检测进入 iphone 麦克风的特定频率(我使用缓冲样本)。

它的工作原理,但是当值改变时它有许多奇怪的稳定性问题。 (它们在同一设备上的频谱应用程序中是恒定的,但不是 Goertzel 算法)

我想用另一种方式,在 C 中,检测某个频率,或者频率范围内的能量,(我不知道 FFT 是好的和准确的,如果是的话我需要一个好的算法)。如果您有一个仅获取样本和长度并返回频谱或某个已知频率的能量的函数,那会有所帮助。我需要一个严肃的过滤器,也许是二阶过滤器。

这是我的 Goertzel:

float goertzel_mag(int16_t* data ,int SAMPLING_RATE ,double TARGET_FREQUENCY,int numSamples )
{
int k,i;
float floatnumSamples;
float omega,sine,cosine,coeff,q0,q1,q2,magnitude,real,imag;

float scalingFactor = numSamples / 2.0; // -2

floatnumSamples = (float) numSamples;
k = (int) (0.5 + ((floatnumSamples * TARGET_FREQUENCY) / SAMPLING_RATE));
omega = (2.0 * M_PI * k) / floatnumSamples;
sine = sin(omega);
cosine = cos(omega);
coeff = 2.0 * cosine;
q0=0;
q1=0;
q2=0;

for(i=0; i<numSamples; i++)
{
q0 = coeff * q1 - q2 + data[i];
q2 = q1;
q1 = q0;
}


real = (q1 - q2 * cosine) / scalingFactor;
imag = (q2 * sine) / scalingFactor;

//double theta = atan2 ( imag, real); //PHASE
magnitude = sqrtf(real*real + imag*imag);
return magnitude;
}

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