西西河

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

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

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

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

    那么究竟是怎么回事呢?

    • 家园 DC不会影响AC啊

      我把某一个wav的data chunk里所有采样点都减少或者增加一个常量后生成新的wav

      这就只是给你的信号加了一个直流偏置而已,只要这个信号还是在D/A的下一级放大的线性区,就不会有什么区别吧。如果是交流耦合,那就一点影响没有。

    • 家园 答黑猫的问题,说说我的看法

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

      按这个假设的数据,就是以44.1K的采样频率对源信号进行采样,然后把每一个采样点的采样结果,用一组16bit长的数字码来表示它的大小(幅度),这个过程称为数字编码,也可称作量化.采样频率的大小决定了采样过程中对高次谐波成分丢失的程度(如按44.1K采样就会丢掉源信号中22.05K以上的谐波成分),而编码的码元长度则决定了编码的精度,也就是码元越长,精度越高.这两者共同决定了采样编码过程中产生的失真的大小.

      幅度采样的过程,简单地说,就是用一系列等幅度等间隔的脉冲,与源信号相乘,得到一系列幅度高低不同(按源信号变化规律变化)的脉冲.其波形就如前面njdy所说的"直方图"的样子(找不到相应的图片,只好干说了).这还不算真正的"数字信号",还要进行编码,也就是量化.量化的过程就是把这些高低不同的脉冲分别用一组组的二进制码元替代,每一组(16位)表示一个脉冲的大小,也就是把脉冲的幅度用一组16位的二进制数字表示了出来,这样得到的信号才是数字编码信号,在调制之前,称为数字基带信号.

      所以,所谓量化就是把采样点的信号幅度,用二进制数字表达出来.量化的依据,当然就是源信号的被采样点的幅度了.

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

      那么究竟是怎么回事呢?

      把每一个采样点的编码数值,都增加或减少一个常数,在线性编码的前提下,这个过程的物理含义就是:在源信号上叠加了一个直流信号.这个直流信号的大小,取决于你加上的那个常数的大小.在后面经过D/A还原成模拟信号后,再进行放大,均衡...等等处理的过程中,如果信号的变化幅度,还在电路的动态允许范围以内,也就是不会对它产生新的失真的话,被还原后的信号将"跟原来的听上去没什么区别",也就是,与你不加减那个常数完全一样,因为直流是听不出来的.

      但是你若"裁减得太狠了",超出了后续电路的动态允许范围,那么还原出来的信号幅度将被电路切割("削顶"),也就是产生失真,听起来就大不一样了,什么都听不到了也是有可能的.

      D/A转换以后的信号是还原的连续波模拟信号,当然"不是一个点一个点独立的"。

      说得不对的地方欢迎砸砖.

      关键词(Tags): #采样 编码
    • 家园 居然绕到采样频率上了,难怪楼主越看越糊涂

      楼主的问题其实很简单:

      wav文件里每个数据点里到底存的是什么?为什么加一点减一点听不出区别?

      这单纯就是声音波形曲线如何离散量化的问题。44.1k的意思就是每1/44100秒做一次a/d。16bit就是每个a/d结果得到的数字是16位长,也就是说总共有2^16个也就是65536个离散量化级(也可能是2^15个,我忘了正负数如何处理的了,不过反正就是这意思)。

      如果不做其他处理,那么这16位数据就是wav数据块里每个数据点里存的数。当然wav允许几种不同的存法,有PCM,alaw, ulaw等。这样文件里每个数据点里存的就是最初的16位原始数据再经过处理的结果(比如alaw,ulaw是原始数的log)。

      至于为什么每个数据点加点减点听不出多大区别,可能有好几个原因。比如有的播放器自带normalizer,这样就把加的减的量等于过滤掉了。还有就是既然有那么多量化级,每次到底加多少减多少合适?人耳的敏感度不是线性的,有可能加的减的部分正好不敏感。还有溢出问题等等。

      • 家园 44.1K不就是在采样吗。

        也就是你那个多少秒做一次a/d。

        • 家园 但楼主问的是如何“量化”啊

          他都已经在wav文件找到每个数据点了,所以他感兴趣的不是采样频率该多少吧。

          • 家园 大家不过是把那些参数都解释了一遍。

            因为lz说了并不理解包络的复原。下面曾经的帖子也说了

            D/A转换可不是"把这些离散的点连起来变成连续波形的模拟电信号"这么简单啊!

            而且lz自己在下面说了

            理解困难不在于将曲线数字化,而在于将声音曲线化。

            我看就是对麦克风和D/A输出部分的不理解。

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

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

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

      • 家园 不用什么电声学

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

        • 家园 实际上

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

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

          • 家园 幅度采样只涉及幅度,与其他东西无关

            一般的音频采样就是幅度采样.也就是用一定频率的等幅脉冲与源信号相乘,让这一系列脉冲变成幅度按照源信号变化方式变化的不等幅脉冲.脉冲的幅度变化方式就是包络线的形状,与源信号的包络线是是一样的.

          • 家园 实际上你说的这些是一回事。

            这些个采样点是如何还原成既有声强又有频率还有包络的声波?

              最后的声波要的就是包络线,硬件中用电容滤去直流成份就得到包络线。

              这条包络线中就包含了声强和频率,声强是变化幅度,频率是变化速度。

          • 家园 声强就要牵涉电路的工作状态了。

            声音通过麦克风转换成电信号,不知道你能不能理解。如果能理解这个,看你修过的课程,示波器应该会用吧。那么njyd说的就可以理解了啊。

            假设最简单的一个正弦波,示波器里周期为10 (sin (0.2*pi*X))。现在对这个波采样,如果你用10个点,那么每个点的幅度不就知道了么?你把这些离散点连接起来,这个波形的包络/周期不就出来了?如果我增加采样率,用20个点甚至100个点来描述这个周期为10的正弦波,相应得到的包络就会越光滑准确。这个就是采样率的问题。

            在每个采样点得到的振幅,再离散化,比如njyd 说的16比特,就可以表达65536个振幅值,已经非常精细了。这就是编码。当播放的时候就需要解码,按照16比特一组还原出信号。最后通过功放输出,也就是你需要的一定声强。

            至于三极管为什么能放大,嘿嘿,还是不说了,免得彻底晕菜了。

          • 家园 很简单的,直观的说

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

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

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


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

Copyright © cchere 西西河