承接上篇 https://www.ebaina.com/articles/140000012936
2. 混音控件 name=I2S4 codec master mode可以通过AlsaMixer读取和更改“I2S4编解码器主模式”。 它有两个值“cbs-cfc”(可以在麦克风上看到I2S时钟) 和“cbm-cfm”(任何不存在的时钟)
此外,当选择低采样率FS=8KHz和 输入设备“Tegra-snd-t210ref-mobile-rt565x: – (hw: 1,0)”时, 可以得到信号 就像正常的麦克风声音(在时域),但它只是类似 它没有声音信息,只是随机的脉冲音:
Fsck值高于正常,超过3MHz
3. Fsck问题根据麦克数据表
从串口数据端口的格式是I²S, 24位,二补。 每个WS立体帧必须有64个SCK周期, 或者每个数据字必须有32个SCK周期。所以认想用S32_LE作为样本量,而不是S16_LE。
sync高于3MHz是什么意思? 如果fsync正确的速率在8kHz? 它应该是正确的频率在44.1kHz。 能测量位钟和fsync频率吗?
样本大小和采样率的任何变化都不能改善记录信号的质量。 我认为这是因为Fsck比可能的要高。 对于采样率8kHz,看到Fsck=3.26Mhz,但假设32位数据,2ch,和采样率8000Hz,我们得到Fsck= 32x2x8000= 512kHz,而不是3.26Mhz。
然而,信号Fsck是由Jetson Nano板产生的,而不是由mic产生的, 并且取决于44100的采样率变化,其中Fsck=19.4Mhz。
当尝试设置采样率为88400时,也得到Fsck=18Mhz (arecord -D hw:tegrasndt210ref,0 -c 2 -r 88400 -f S32_LE -D 100 cap.wav)。 不知道如何降低Fsck
4.分析每个麦克风数据表的样本大小必须是S32_LE S16_LE不工作 Fsck应该是抽样率 位时钟应该是采样速率采样大小通道数。 所以在8kHz @ 32位有2个频道,期待8kHz fsck和512kHz比特时钟。
默认情况下,aud_mclk(40引脚头上的引脚7)的工作频率为256*fs, 但在8kHz时,只有2.048MHz和3.26MHz。 所以不清楚3.26MHz从何而来。
5.查看工作频率可以转储时钟频率,看看它们应该在什么频率工作 sudo grep “aud_mclk|i2s” /sys/kernel/debug/clk/clk_summary
$ sudo grep “aud_mclk\|i2s” /sys/kernel/debug/clk/clk_summary [sudo] password for dim: i2s4_sync 0 0 24576000 24576000 0 0 i2s3_sync 0 0 24576000 24576000 0 0 i2s2_sync 0 0 24576000 24576000 0 0 i2s1_sync 0 0 24576000 24576000 0 0 i2s0_sync 0 0 24576000 24576000 0 0 i2s4 0 0 45158334 11289600 0 0 i2s3 0 0 18063334 18345600 0 0 i2s2 0 0 6021112 1536000 0 0 i2s1 0 0 45158334 11289600 0 0 i2s0 0 0 45158334 11289600 0 0 arecord -D hw:tegrasndt210ref,0 -c 2 -r 8000 -f S32_LE -d 100 cap.wav Recording WAVE cap.wav : Signed 32 bit Little Endian, Rate 8000 Hz, Stereo