用QT撸了一段代码,测试了下PC上的声卡录音(笔记本自带的声卡、mic测试)。
用8bit 8k采样率的情况下,底噪很大,fft看了下,基本是白噪声;
16bit量化下,噪声显著降低。
分析了下8bit的录音数据,数据多数是在+-1lsb跳动,少数到2lsb。
有谁知道这种噪声该如何去除??
离线
离线
或者换种思路,用16bit采,然后软件转换到8bit。
离线
至少应该用16bit录音,8bit的声音确实难听,损失太多了
离线
或者换种思路,用16bit采,然后软件转换到8bit。
这种试过,没什么用。我怀疑windows下的app访问声卡,实际就是软件转换为指定的比特率的,不然怎么实现多个设备同时访问声卡?
离线
至少应该用16bit录音,8bit的声音确实难听,损失太多了
主要是为了传语音,降低带宽。后面还要加语音压缩。
音乐用8bit是不行,动态范围、频谱都要宽很多。
离线
至少应该用16bit录音,8bit的声音确实难听,损失太多了
G711就是 8bit的,就是一张 16 <=> 8bit 映射表。
离线
这种试过,没什么用。我怀疑windows下的app访问声卡,实际就是软件转换为指定的比特率的,不然怎么实现多个设备同时访问声卡?
Windows的音频驱动分两层,硬件层和媒体层。硬件层负责操作硬件,仅支持硬件支持的采样率,而且同一时间仅支持一个采样率一个位深和一个时钟源。
媒体层负责采样率转换,用以同步不同的时钟,采样率和位深。如果同一时间只有一个应用访问硬件,且该设备以独占模式打开设备,则硬件层使用该应用选择的参数,如硬件不支持所选参数或有多个硬件打开设备,则媒体层介入,执行采样率转换。
具体参考MSDN对于KS(kernel streamer)相关的说明。
不过Windows的ASRC性能很好,Vista以后的ASRC的SNR在120dB左右,完全够一般使用。你就以16bit录,应该是没问题。转8位你还得想想怎么做。但是1个LSB的抖动是正常的,因为你要用8b表示16b,肯定存在一个量化噪声的问题,为了从概率上减小量化噪声,很定要做噪声整形,也就是dither,这时候低频误差就会转成高频抖动,然后你低通滤一遍就好了。
不在乎量化误差可以直接y=(x+128)>>8,省去dither,也就没有1LSB抖动了。
离线
@JasonWoo
@Blueskull
重新设置16bit量化,然后除256试了下,听觉效果还是改善不少。 之前可能是哪里写的不对,导致没有效果。
从采样数据上分析,
直接采用8bit量化,会有大量1LSB抖动。 这会有明显的沙沙声音,声音较大;
使用16bit量化,然后软件降低到8bit,抖动的密度降低了不少。听觉上就是哧哧的声音。
离线