This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TLV320AIC3110:使用驻极体电容式麦克风录制人的语音时遇到问题 — 主要是白噪声(嘶嘶声)

Guru**** 2501515 points
Other Parts Discussed in Thread: TLV320AIC3101

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1557464/tlv320aic3110-trouble-recording-human-voice-with-an-electret-condenser-microphone---mostly-white-noise-hiss

器件型号:TLV320AIC3110


工具/软件:

我使用 TLV320AIC3101 芯片和音频运行良好、为 Raspberry Pi 5 制作了一个 PCB HAT。 根据文档、我 将驻极体电容式麦克风直接连接到 MIC1RP

我使用的是 Ubuntu Linux 发行版、它具有用于此芯片的内置驱动程序(使用特定于 RPi 的设备树)、这就是我选择该组件的原因。

长话短说、我可以录制音频、但我必须将增益 (Mic PGA) 提升到存在大量嘶嘶声(增益约为 20bB)的程度。
人类的声音几乎没有被记录下来,看起来很远,很不清晰。 我尝试了从我的桌面上从 200Hz 到 8kHz 的正弦声音,它清晰的录制,即使有点消声. 我做的定期捕捉是完美的声音. 我已经记录了记录内容的频率图(我尽了最大努力)。 人类的声音——说话、大声唱歌——在任何地方都不明显。

   

我已经转向 ChatGPT 通过一些建议和它提供的最好的(在很多假导联后)是使用 MIC1LM 而不是让如果 LOAT 并在它上放置一个平衡电容器:



在 Linux 中,您不能直接更改 I2S 页面参数(您可以,但必须覆盖驱动程序和强制值),但不能正常工作,也不需要。

我希望有人有更多的经验可以给我指路。 采用新设计重新固定 PCB 既耗时又成本高昂。 我已经完成了 5 次(处理音频播放等问题)、因此我宁愿在花费资源之前获得明确的答案。

Thnaks

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉、上面有一些拼写错误。 明显的例子:
    我说的是 I2C 命令、而不是 I2S。
    MIC1LM 是*float*ing

    并认真感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jacques:

    您能否在器件录制时提供寄存器转储、以便我可以检查它当前的配置情况? 然后、我们可以确定如何使用驱动程序更改设置。 提供您的 amixer 控件和您正在进行的任何其他配置(dts 文件?) 也可能有所帮助。 通常最好将任何未使用的麦克风输入接地、但我们可以确保它们在软件中已关闭、因此您无需更换电路板。 此外、我看到您的光谱图中有~9.8k 恒定音调 — 您知道这是什么吗?

    此致、
    Mir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    希望这能帮助他人:

    我尝试使用 i2cset 命令来覆盖器件驱动程序/器件树设置。 我更改了一些值并使用 i2cget 设置它们状态监视 结果,第二次你启动 ALSA 命令(如 arecord/aplay )驱动程序重置音频芯片,你基本上失去了任何你已经改变,

    这意味着我必须在 alsamixer(和 amixer)或.dts 中找到解决我的问题的方法 — 或者有硬件黑客。  

    我真的不想触摸“simple-audio-card"dts 驱动“ 驱动程序来公开更多必要的设置。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jacques:

    是的、驱动程序在播放和录制期间更改了寄存器、因此如果您有“全局“更改、我建议您使用默认值设置编辑驱动程序本身。 DTS 文件定义了它如何与驱动程序交互、但驱动程序应为.c 文件。  

    为了解决您的“低通滤波器“问题 — 您能否检查器件发出的 WCLK 和 BCLK 是什么? 让我们确保它们符合我们的期望。

    此致、
    Mir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mir:

    该芯片非常小、我没有提供调试引脚来使用示波器进行测试。
    但是、我可以完美地播放、芯片是 I2S 主模式、外部振荡器的频率为 12MHz。 从.dts 中:

    target = <&i2s_clk_consumer>;
    i2s-controller = <&i2s_clk_consumer>;
    simple-audio-card,bitclock-master = <&snd_codec>;
    simple-audio-card,frame-master = <&snd_codec>;
    
    dailink0_master: simple-audio-card,cpu {
                    sound-dai = <&i2s_clk_consumer>;
                };
                
    snd_codec: simple-audio-card,codec {
                    sound-dai = <&tlv320aic3110>;
                    clocks = <&mclk_external>;
                    system-clock-direction-out = "out";
                    system-clock-frequency = <12000000>; //*** added LAX
                    mclk-frequency = <12000000>;
                    // mclk-fs = <272>; //*** added LAX disabled here
                };
                
    mclk_external: mclk_external {
                    compatible = "fixed-clock";
                    #clock-cells = <0>;
                    clock-frequency = <12000000>; // 12 MHz
                    mclk-frequency = <12000000>;
                    frequency = <12000000>;
                    clock-output-names = "mclk";
                };


    这是物联网消费设备的一部分、因此真的不希望自定义驱动程序在任何内核更改时失败、或者需要 dkms 并在设备上编译! 我更喜欢放弃语音界面、而不是处理内核/驱动程序。

    我会说一些我讨厌的东西,当我的客户对我说:
    “我不知道,我不会骗你的。“
    显然,我触摸了 ALSA 设置,并通过添加一个神奇的高通滤波器摆脱了嘶嘶声 — 这也杀死了人类的声音范围。 只是不知道我做了什么或者为什么它这样工作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    长话短说:
    WCLK 来自 GPIO18 PCM_CLK(引脚 12)
    BCLK 来自 GPIO19 PCM_FS(引脚 35)
    MCLK 是一个外部振荡器  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您能否提供一个您说声音听起来好像已被过滤的音频示例? 您做了哪些更改来消除嘶嘶声? 此外、我的意思是您可以检查时钟的频率。 12MHz 很好、只需要确保 WCLK 和 BCLK 频率符合预期。 如果采样率低于预期、听起来可能像低通滤波器。

    此致、
    Mir

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../demo_5F00_sine.wav

    有趣的事实,当我把音频移动到我的 Mac Studio,音频播放更好! 声音仍然模糊、但非常清晰。 我现在可能在使用 TI 芯片的 RPi 上播放时有一个高通滤波器!!!
    上帝保佑我。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我一直在使用各种录制选项,并在我的个人桌面 (Mac Studio m4) 上进行回放 — 这是 Mir 先生的暗示 — 而不是在设备本身上播放。

    惊人的不同结果:
    arecord 具有格式-f 和 rate -r 的选项

    -f S24_LE 让我在设备上播放、但在桌面上却有可怕的嘶嘶声
    -f S32_LE 不在设备上播放、但在桌面上完全干净的输出(如上所示)


    24 位
    -r 44100 无法在设备上回放  
    -r 48000 可在设备上播放(即使音量增大也非常微弱)  

    基本上,似乎即使我不能播放我录制的内容,创建的实际文件包含正确的记录与-f S32_LE 和-r 44100

    AGP(自动增益?)有什么问题?

    我只需要通过可传递的清晰语音来达到一个清晰的录制点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您能否测量器件发送的时钟 (BCLK 和 WCLK 频率以及 MCLK)、以便我们更好地了解它们不同的原因? 似乎芯片需要的时钟设置与您提供的时钟设置不同、并且因计算机而异。  

    -米尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对于记录、这是我可以获得的最佳结果、并且我有可操作的设置:

    1、我使用的是 12MHz 振荡器,因此以 48kHz (48,000) 的频率录制和播放是最自然的速率。 它完全可以整除、因此 TI 芯片无需进行卷积计算。 现在、该设置位于我的.dts 文件和/etc/asound.conf 文件中

    2.有很多格式选择用于录制(因此回放)。 即使 chpi 本身是一个 24 位的芯片,使用 32 位会触发芯片中完全消除嘶嘶声的东西。 所以*NOT*使用 S16_LE 或 S24_LE, US S32_LE 和芯片自动过滤嘶嘶声。

    有了这 2 个变化,我完全消除了嘶嘶声和录制和回放的人的声音现在是.. 可行。 如果我理解正确、这是自动增益控制 (AGP) 的一项功能。

    不过:

    无论用于自动增益 (AGP) 的机制/算法是什么、都会对较低的频率范围产生负面影响。 Himan Voice 的声音非常模糊。 纯正弦波清晰可闻。

    我经常使用“Mic PGA“和“ADC",“,并、并意识到、在我的情况下、它们只会影响存在实际嘶嘶声的较低频率。 增加其中任何一个都没有帮助录制,但只是增加了检测和放大嘶嘶声的音量。 录制的声音始终围绕着可在 vumeter 上看到的最低嘶嘶声级别。
    我将两者都保持在 0 dB、并且录制和回放没有明显的变化。 在 PCB 的下一个版本中、我将尝试通过一个等于 MICRP 的电容器将 MIC1 左侧-(MIT1LM) 接地。 这被认为有助于处理嘶嘶声。 因此、如果 AGP 不需要工作、它可以*在较低的范围内提供更多的容量  

    我在这项功能上花费了太多的时间、我会略过一段时间、因为我可以录制和播放可用的(但非常模糊)人类语音。 目标是在应用程序上有一个常量、用于侦听一些关键字并采取一些操作。  除非有人知道如何提高人类的声音范围频率。

    感谢您的帮助

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我还有一个注意事项是、您的“demo_sene"是“是 44.1kHz、而我们的光谱图中有这些水平线、几乎为 10k、15k、几乎为 20k。 您是将这些 提示音放在测试文件中、还是它们存在伪影? 如果它们是伪影、可能会提示我们发生了什么。 此外、您发送的录音似乎具有清晰的声音范围、在较高频率下噪声更大。  

    您可以使用录制线路更改录制频率。 您可能需要在 DTS 文件中将采样率设置为 48K 以帮助实现这一点。 32 位正常。

    自动增益控制 (AGC) 应该只调整 输入端的 PGA 增益。 因此、如果麦克风中的信号有噪声、PGA 更改增益电平将改变噪声电平、但也会改变信号电平。 除此之外、如果输入端存在恒定的低频噪声、PGA 就会改变噪声的体积、以此类推、这与频率无关。 AGC 使用信号平均功率电平来调节音量、而不是基于信号的滤波子部分、因此它与 频率无关。 我建议在 M 和 P 引脚上使用相同的电容器、 如果噪声是由接地的共模噪声或噪声导致的、这应该会有所帮助。

    此致、
    Mir