我使用了 AVAudioRecorder 和 AVAudioSession,它们给出了 0(非常响亮)到 -160(接近静音)范围内的分贝值。在应用程序中,我必须为从 iPhone 麦克风接收到的实时音频测量绘制 A 级即 dB(A) 曲线。
我正在实现以下程序 -
从 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
获取正dB值,float posdBValue = dbValue+160; 例如,如果 dbValue=-100,则 posdBValue = -110+160 = 50dB
通过为不同的 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
在图表上绘制 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/