这是我手头的问题:
我根本不理解如何将PCM编码的缓冲区转换回示波器 View 中显示的波形。我想对振幅进行分析之前正是此波。
在我的回调中,当我分析缓冲区时,它只有0和-1-使用NSLog(@“%d”)时。我猜这是有道理的,因为它是PCM。
我无法在aurioTouch中找到将0/-1流转换为波形的神奇地方:-((
同样,一旦将波形存储在内存中,我该如何分析幅度以及如何将读数转换为dB?
我不想使用FFT,因为我对频率不感兴趣,希望有其他方法。
干杯
垫
最佳答案
一旦在内存中保存了一部分波形,就可以很容易地计算出以dB为单位的幅度值(尽管您需要确定0 dB的幅度引用值是多少)。通常,如果您想要在VU仪表上显示的短期幅度值,则需要校正波形的瞬时值(可以使用abs),然后将这些校正后的值通过简单的低通滤波器传递时间常数约为100毫秒。要将值转换为dB,您将执行以下操作:amplitude_dB = 20 * log10(amplitude) + calibration_dB;
其中幅值是经过校正和滤波后的幅值,而calibration_dB是一个偏移量,可为您提供0 dB的正确幅值,无论您的特定应用是什么(例如dB满刻度,或已校准的dBV或dBm值)。
一个简单但有效的低通滤波器可以如下实现。这将是一个单极IIR(递归)滤波器。每个输出取决于先前的输出值和当前输入值。我们有一个常数因子α,它可以有效地确定该低通滤波器的时间常数或截止频率。
y = alpha * x + (1.0 - alpha) * y_old;
y_old = y;