gpt4 book ai didi

iphone - 如何在 iPhone 中使用 AVAudioRecorder 计算 1/3 倍频程的 dB(A) 值

转载 作者:行者123 更新时间:2023-12-03 21:01:25 24 4
gpt4 key购买 nike

我使用了 AVAudioRecorder 和 AVAudioSession,它们给出了 0(非常响亮)到 -160(接近静音)范围内的分贝值。在应用程序中,我必须为从 iPhone 麦克风接收到的实时音频测量绘制 A 级即 dB(A) 曲线。

我正在实现以下程序 -

  1. 从 AVAudioRecorder 获取 dB 值

    NSDictionary* recorderSettings = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithInt:kAudioFormatAppleIMA4],AVFormatIDKey,
    [NSNumber numberWithInt:44100],AVSampleRateKey,
    [NSNumber numberWithInt:1],AVNumberOfChannelsKey,
    [NSNumber numberWithInt:8],AVLinearPCMBitDepthKey,
    [NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey,
    [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey,
    nil];
    float dbValue = [self.recorder averagePowerForChannel:0]; //which returns a dB value in 0 to -160 range
  2. 获取正dB值,float posdBValue = dbValue+160;例如,如果 dbValue=-100,则 posdBValue = -110+160 = 50dB

  3. 通过为不同的 1/3 倍频程频段添加 A 加权来计算 dB(A) 值A 权重值引用 - http://personal.cityu.edu.hk/~bsapplec/single.htm

      31.5Hz 的 dB(A) = 50 -39.4 = 10.6;
    • 40 Hz 的 dB(A) = 50 -34.6 = 15.4
    • 50 Hz 时的 dB(A) = 50 -30.2 = 19.8
  4. 在图表上绘制 dB(A) 值与频段的关系

问题 1. 这是从分贝中找出 dB(A) 值的正确方法吗? 2. 是否应该使用FFT?如果是,FFT 在何处以及如何融入计算? 3. 基于从averagePowerForChannel方法返回的单个dB值,我是否必须计算24个Octave频段中所有中心频率的不同dB值?如果是,怎么办? 4. 谁能推荐一个解决方案、开源库、iPhone 代码引用吗?

我完全迷失了。我觉得我错过了一些东西。请帮忙!我现在只需要弄清楚计算和逻辑。谢谢。

最佳答案

在关于通过添加一个值来获取 dB(A) 值的第一个问题中任意dB值:我认为答案是否定的,即不是正确的。在数字音频中,0dB 被视为满量程信号较低的振幅变为负值。

对于1/3倍频程分析器:让我们从倍频程的定义开始。 Octave 音阶意味着频率加倍或减半。所以 20Hz 和 40Hz 相差一个 Octave 。如果将一个 Octave 音阶对数划分为 3 个范围,这些范围称为 1/3 倍频程频带。

1/3倍频程分析仪的工作是以米的形式显示给定频率上每个频段的电平范围。选择 20Hz 至 20kHz 的范围,这是您要使用的第一个仪表有一个指示电平的条,中心频率为 20Hz,频带下限为 17.8 Hz,频带上限为 22.4 Hz赫兹。依此类推。

最常见的实现方式是通过银行带通滤波器,每个都调谐到中心之一频率。然后,您获取过滤器的输出并计算RMS,即成为该频段的电平。如果你是如果用软件来做这件事,那么就有相当数量的 DSP设计滤波器和计算所需的知识开销相当高(31 个滤波器覆盖 20Hz 至 20kHz)。

另一种方法是使用 FFT。通过这种方法,目标是将中心频率周围的 FFT bin 集中在一起并计算总能量。诀窍在于选择要合并的频段因为 FFT 箱以赫兹为单位等距分布。

我不知道你录制的采样率是多少,但它是很容易计算你的 bin 宽度和 bin 中心是多少将是:

bin 宽度等于采样率/FFT 长度。 66536分48kHz 的 FFT 给出的 bin 宽度为 0.73Hz。 Bin 24 有一个较低的垃圾箱限制为 17.58,垃圾箱中心为 17.95,这是合理的接近 1/3 倍频程滤波器的频带下限。和垃圾箱30上限为22.71,中心为22.34,合理接近22.4Hz。正如您可能注意到的,您正在介绍一些由于 FFT 的频率分辨率而产生的误差量。你可以通过增加 FFT 的大小来减少此误差。

这是我用来查找 FFT 频率和 1/3 倍频程滤波器频率的计算器: http://www.zytrax.com/tech/audio/calculator.html

关于iphone - 如何在 iPhone 中使用 AVAudioRecorder 计算 1/3 倍频程的 dB(A) 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25485805/

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