从麦克风插头访问原始信号

dat*_*ata 5 c hardware signal-processing

我需要从笔记本电脑上的麦克风插头获取原始信号流。由于我在编写与硬件直接交互的代码方面的经验几乎没有,因此我欢迎任何可能的参考资料。

我正在使用 Linux - Ubuntu 14.04。

Mar*_*ler 4

理想情况下,我会获得以给定速率采样的电流读数

恭喜,这就是声卡的作用(通常,它们采样电压,但具有固定电阻,相当于电流)。

你必须意识到一些事情:

  • 当对任何信号进行采样时,您必须限制信号的带宽;奈奎斯特定理在数学上描述了这一点。在实际采样情况下,该限制是采样率的一半。因此,大多数声卡都只有一个模拟低通滤波器,可以滤除任何高于可听频率的声音。不要指望上面的输入能得到很好的体现。11kHz。
  • 声卡设计为交流耦合至其输入;这意味着您的麦克风插头和模数转换器 (ADC) 之间有一个电容器。这意味着只有频率显着高于 0Hz(具体多少取决于声卡)的信号才能到达 ADC,而 DC 则不会。
    • 您可以获得便宜的 USB 声卡,您可以在其中桥接该电容器。但我实际上已经就这个话题联系了一家声卡 IC 制造商,他们无法保证 DC 精度或串扰。
  • 您必须意识到,如果您的信号也符合上面提到的重采样率的“半采样率”标准,那么重采样器中使用的数字滤波器不应该真正扭曲它。因此,请采用最简单的方法将音频信号输入到您的应用程序中。

我常用的段落:Ceterum ceneo GNU Radium esse proliferandem。因此,看看 GNU Radio 的“音频源”可以为您做什么。GNU Radio 是一个完整的框架,用于构建具有许多有用处理块的信号处理流程图。看一下指导教程,尤其是简介,它对上面的要点进行了更多说明。也许您可以看看它是否适合您的问题。如果您想轻松尝试,请使用GNU Radio Live DVD/USB 映像

除此之外,在 Linux 下,常用的系统声音 API 称为“ALSA”,如果您以前使用过类似的 C API,那么实际上并非不可能使用 - 话虽如此,它并不美观。如果您已经使用具有多媒体功能的框架(例如 SDL),您可能想继续使用它。