淘客熙熙

主题:哪位搞音频或者语音的,请教一个基本概念 -- 黑猫夜行

共:💬46 🌺36 新:
全看树展主题 · 分页首页 上页
/ 4
下页 末页
家园 哪位搞音频或者语音的,请教一个基本概念

wav文件,或者pcm文件里面每个采样点的数据究竟是什么啊,为了把问题简化,我们假设,44.1k、16bit的线性pcm。我狗了一通,没找到详细解释,人人都说那是个采样后“量化”的数据,依靠什么量化的,怎样量化的呢?

我把某一个wav的data chunk里所有采样点都减少或者增加一个常量后生成新的wav,要么裁减得太狠了干脆不出声要么就跟原来的听上去没什么区别。所以我想wav在经过声卡D/A转换再到speaker时一定不是一个点一个点独立的。

那么究竟是怎么回事呢?

家园 你问的问题我没看太懂,不过随便说说看看有帮助没。

声音信号有两种分析方法,时域上的和 频域上的。

人的声音是个模拟信号。 它在频域上的带宽是无限的。就是说你想用数字

方法储存,---- 单论理论上说是存储空间是要求无限大的。

其次上其实用不了那么大。因为人耳能听到的带宽是 50Hz -22000Hz,

其他的频率分量是无用的。所以基本只要储存这些模拟信号即可。

根据香农(不是咖啡的香浓)定理,保存这些模拟信号,可以通过数字

抽样的数据保存,但必须比它的最大频率大两倍,即是要求数字抽样信号

的频率是 44kHz。否则会有叠频的问题。造成差错。

大于 44khz,就可以把这个模拟的声音信号在每一 1/44000 秒的声值

大小抽取出来保存成数字信号,以便用于恢复模拟声音信号。这叫抽样。

数字抽样是如何抽呢? 就是说,在某一瞬间抽样取得声音大小分级数

也是问题,分级太多,储存量极大,分级太少,大小声音无法区分,

16bit 是个权衡值,相当于是2 的16 次方,取了1024 个级别。

声音可能是 1 级,2 级,7 级, 19 级,一直到 1024 为最大音量。

线形 pcm 就是指这些分级是线形的,而非某些优化算法非线性。

7级和8级的区别 和 1022 和 1023 的区别是一样大的。

这样抽出来数字抽样信号带有了模拟信号的信息,是一连串的 7, 9 ,

1022, 13, 989,。。。。。等等等等的数字。它记录的是一秒钟

44K 次,记录的是声音每前进 1/44000 秒的声强大小。用它就可以完整

记录声音的信息,而且因为 44000 >= 2*22000,不会出现差错。

你把每个声音采样点都减少或者增加一个常量确实感觉怪怪的,这

相当于是频域增加了无数的随机信号,频域的变化是-------

我且要算上一会儿看看表示是什么呢。不过一般是不这么做的。

你要想把信号减小或者增大,应该在时域--- 采样点都按比例的

减小或者增大,才是音量等比例减小或增大,--- 而音调不变,否则

频域比例一变,肯定是变调了。

家园 这是电子通信的一门基础课叫做数字信号处理。

你拿本教材就看到了。放狗是很难搜出来的。因为这些

有图的话你就看的更清楚了。可是图很难上网。

家园 一段音乐色彩的丰富是由音乐的频率宽度决定的

信息理论的一个基本定理是nyquist thereom,当数据采样以后,再恢复出来的信号,其频率最高只能是采样频率的一半, 也就是说,如果要保留带宽为 2k, 那么理论上的采样频率至少要是 4k.

Wiki的简介

外链出处

家园 依靠采样后的电平值量化
家园 你改变采样频率后

是很难用耳朵听出区别的, 建议你使用高精度的数字采集卡然后配上Matlab或者NI的Labview来分析. 哈哈, 看起来一时半会也凑不齐这些装备来.

家园 俺没搞过音频,搞过类似的波形处理。

  上过大学物理应该做过示波器实验,音频就相当于示波器屏幕上显示的波形。

  这个波形X轴是时间,Y轴是电压。

  采样频率的高低决定了时间采样的精细度,频率越高能还原出的音频频率就越高;

  每个采样点的数值代表了这个时间点的电压值(相对值),位数越多还原出的电压值就越准确。

  数字音频就等于用直方图来代替曲线图,很明显,直方图每一个长方条越细,高度的分辨率越高,长方条的顶点连成的曲线与原曲线就越接近。

  16bit就是每个采样点量化(用A/D转换器)后的数值是个16位二进制数,分辨率为65536。楼下说的1024是10位二进制数。

  音频电压是交流的,正负电压都有,所以这个16位数要能表示出正负来。为了处理方便,一般使使数值向上平移。

  为表示方便以下以10位为例:

  音频瞬间电压的绝对值并不重要,重要的是相对值,所以以下的具体电压变一下可无妨,只要所有点按同样比例变就行。

  10位二进制数分辨率为1024,如果表示一个0-10V的电压,数值0=0V,512=5V,1024=10V,其他按比例算。

  如果表示一个-5-+5V的电压,可以把512定为0V,1024就是+5V,0就是-5V。其他同样按比例算。

  因为是交流信号,我们要还原的是各点数值在X、Y值上连成的相对曲线,所以这个曲线只要不变形,向上、下平移一段距离对还原没有影响,就象示波器看波形上下移动扫描基线一样。你把某一个wav的data chunk里所有采样点都减少或者增加一个常量后生成新的wav,实际上就是把音频曲线向下(减少)或向上(增加)平移一点。而实际把音频电压量化成数字信号时为了保证不失真都不会用满,所以少量平移不会影响原来的音质。但移的多了造成超出范围(就象示波器把波形一部分移出屏幕外),所有超出范围的点都变成最低电压或最高电压(这有个术语叫削顶,在示波器上看就是最高的部分或最低的部份变成平直线),这就造成失真,如果移的太多就会变成最高电压或最低电压的一条直线,还原出就是直流电压,这就没了声音。

家园 有一些播放器是可显示波形和频谱的

你看起来是个软件专家,所以对电路什么的有点晕。

所以你在改变数据以后,可以用播放器看看效果,当然那个比较粗糙。

另外WAV文件的数据结构我估计是有的,你看一些编程的书里面应该提及,或者是与WAV相关的函数什么的。

我离开技术已经很远了,从常识上说些想法供参考。

44.1K是取样速率,就是每一秒钟取44.1k个数据,每一个数据是16bit,左右两个声道数据量就加倍。由于动态范围的原因,可能还有一个常数来描述音量的基准值或峰值。另外也可能先把信号标准化,再取样,就是先变成峰值1V的信号。

你可以先在data chunk里把左右声道先分开,看哪些数据是哪个声道的,然后注意每一个点是16bit,有两个Bytes。

也不知道帮不帮得上忙,凑合看看吧。

家园 你问的是PCM的编码规则吧?找ITU-T G.711即可

里面告诉你每个取样的那16bit是怎么安排的。。。

如果你的编码不同,找到相应的标准即可。

家园 感谢楼下诸位,每人一花

njyd老兄的平移的说法能够解释我的疑问。

再深究下去,恐怕得跑到电声学去了。各位的回答都很有启发,我埋头学习一阵子再说。

家园 不用什么电声学

就是信号系统的基础概念。找一本信号系统的教材,把采样以及相关的时域和频域的关系看看就差不多了。楼下 landkid 已经解说了一些。njyd 给出了时域上的分析。不牵涉到电路什么的,都是些数学的东西,变来变去的。只要你有一定的数学底子,不是太难的。

家园 实际上

时域、频域;加窗、过零率、mfcc、fft、hmm之类的也略有耳闻。但是我就是对一个采样点数据对应实际振动的过程感到理解困难,这些个采样点是如何还原成既有声强又有频率还有包络的声波?所以我猜可能涉及到电声学。

就像电路、数字电路课一样,当年也算学过,可是我从来就没明白过三极管怎么就能放大。

家园 很简单的,直观的说

一个周期为 1s 的正弦波(想象一个以时间为x轴的正弦波形, 其周期为一秒),如果你一秒钟只采样一个点(均匀采样),那么你在时域得到的波形将是一条直线,如果要恢复这个波形(即便你已经知道是正弦波),你至少要在一个周期内采样稍多于两个点, 也就是说采样频率要大于你要恢复的频率的两倍.

这里面的确都是数学的东西,可以完全不要懂电路.

家园

我对采样率没有疑问,两倍采样率,为了不发生漏掉的情况。

这个跟我理解困难的地方有点不一样啊。

家园 采样点本身代表的是信号在某个时间点

信号的强度, 恢复成声波的办法就是滤波阿,

最简单的情形, 如果在采样点t1的幅度是 A1, 采样点t2的幅度是A2, 那么系统设置 t1-t2时间段的幅度为 A1 + (t-t1)/(t2-t1) * (A2-A1) , 这是线形插值,当然实际的情形要更复杂一些.

至于取得包络的方法也是滤波, 滤掉高频成分就可以了.

全看树展主题 · 分页首页 上页
/ 4
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河