精华内容
下载资源
问答
  • 音频信号处理技术学习笔记

    千次阅读 2019-06-16 17:00:53
    音频信息处理技术主是多媒体技术的主要组成之。本文主要介绍音频信息处理技术的基本原理和应用。 1、音频基础概念 声音是由震动产生的,并以声波的形式通过介质传播。 音色的频率,两波峰(波谷)的时间间隔为...

    音频信息处理技术主是多媒体技术的主要组成之一。本文主要介绍音频信息处理技术的基本原理和应用。

    1、音频基础概念

    • 声音是由震动产生的,并以声波的形式通过介质传播。
    • 音色的频率,两个波峰(波谷)的时间间隔为周期 T T T,频率为 f = 1 / T f= 1/T f=1/T ,即每秒钟震动的次数,单位为赫兹(Hz)。
    • 声音三要素
      • 音调 反应声音的到底程度,由频率决定,频率越大,音调越高,频率越小,音调越低,
      • 音强 反映声音的强度,由振幅决定
      • 音色 反映声音的品质,由声源的材料决定,在声音信号中表现为声音的频率组合
    • 音频(Audio),指人耳可以听到的声音频率在20HZ~20kHz之间的声波。

    2、音频数字化和编码

    模拟音频:在时间和幅度上都是连续变化的。
    数字音频:在时间和幅度上都是离散、不连续的。
    计算机中使用的是数字音频。自然界的声音一般都是模拟音频,所以在计算机中需要对模拟信号进行数字化。具体过程包括采样、量化、编码。

    • 采样:指把时间域或空间域的连续量转化成离散量的过程。也就是每间隔一段时间读取一次信号的值。每秒钟的采集的样本数叫做采样频率。
    • 采样定理:在进行模拟/数字信号的转换过程中,当采样频率 f s f_s fs大于信号中最高频率 f m a x f_{max} fmax的2倍时 f s > f m a x f_s>f_{max} fs>fmax,采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的2.56~4倍;采样定理又称奈奎斯特定理。
      不同音质数字音频的常用采样频率:
    采样率音质频率范围
    8KHz电话0~4KHz
    11.025KHz低于AM广播0~5.512KHz
    22.05KHz接近于AM广播0~11.025KHz
    32KHz优于于FM广播0~16KHz
    44KHzCD-DA0~22KHz
    48KHz标准DVD0~24KHz
    96KHz高端DVD0~48KHz
    • 量化:采样得到的声音信号幅度转换为数字值,声音信号在幅度上被离散化。
    • 量化等级 : 2 n 2^n 2n
    • 动态范围: 20 l o g 10 ( V m a x / V m i n ) 20log_{10}(V_{max}/V_{min}) 20log10(Vmax/Vmin)
    量化位数音质量化等级动态范围
    8bit电话25648dB
    16bitCD65,53696dB
    24bitDVD16,777,216144dB
    32bit顶级4,294,967,296192dB
    • 声道 :单声道 双声道 多声道

    2.1 PCM(Pulse Code Modulation,脉冲编码调制)

    这种方法通过用脉冲编码量化后的值来代表模拟信号的幅度,即用二进制的大小来代表模拟信号的幅度。在接收端再将这些编码的二进制数还原为原来的模拟信号。

    %% 
    clear 
    close all
    clc
     
    %% 
    dt = 0.00001; %时间间隔
    f = 20;%信号频率
    T = 1/f;%周期
    t = 0:dt:3*T;%显示3个周期
    w = 2*pi/T;%
    A = 2 ;
    Vt = A*(cos(w*t)+1)+A*(cos(0.5*w*t)+1);%产生原始信号,随便写的
    figure;
    plot(t,Vt);%显示原始函数
    %%
    fs = 100;%采样频率 fs>= 2*f
    
    t1 = 0:1/fs:3*T;%显示3个周期
    Vs = A*(cos(w*t1)+1)+A*(cos(0.5*w*t1)+1);
    hold on; 
    stem(t1,Vs,'r');%显示采样
    hold on; 
    plot(t1,Vs,'b');%显示采样后的函数
    %%
    M=15; %0~15 4bit
    PCM=round(M*Vs/M);
    hold on; 
    plot(t1,PCM,'g');%PCM数据
    
    
    • 均匀量化
    • 非均匀量化

    一段PCM数据是需要几个参数配合使用:

    • 采样率
    • 位数
    • 通道
    • 大小端

    2.2 DM(Delta Modulation,增量调制)

    DM是继PCM后出现的又一种模拟信号数字化的方法。
    (1)在比特率较低时,增量调制的量化信噪比高于PCM的量化信噪比;
    (2)增量调制的抗误码性能好。能工作于误码率为 1 0 − 2 10^{-2} 102 ~ 1 0 − 3 10^{-3} 103的信道中,而PCM要求误比特率通常为 1 0 − 4 10^{-4} 104 ~ 1 0 − 6 10^{-6} 106
    (3)增量调制的编译码器比PCM简单。

    增量调制是用一位二进制码表示相邻抽样值相对大小的一种A/D转换方式。它对当前信号瞬时值与前一个抽样值的差值进行量化,并且是对这个差值的符号进行编码,而不是对差值的大小进行编码。

    2.3 DPCM(Differential Pulse Code Modulation,差分脉冲编码调制)

    对输入对相邻样本之差编码而不是对样本本身编码,由于相邻样本之差比实际样本幅度小,所以表示差信号需要较小的位数。

    2.4 ADPCM(Adaptive Differential Pulse Code Modulation,自适应差分脉冲编码调制)

    一种性能比较好的波形编码。它的核心想法是:1.利用自适应改变量化阶的大小,即使用小的量化阶去编码小的差值,使用大的量化阶去编码大的差值。2.使用过去的样本值估算下一个输入样本的预测值,使实际样本也预测值之间的差值总是最小。
    ##常见编码格式

    展开全文
  • 汪进进 鼎阳硬件设计与测试智库专家组成员频谱分析仪简称频谱仪,是射频工程师最熟悉的种仪器。相对于示波器作为“电子工程师的眼睛”,占据“时域第仪器”甚至“电子测试测量第仪器”之地位,频谱仪堪称是...

    汪进进 鼎阳硬件设计与测试智库专家组成员

    频谱分析仪简称频谱仪,是射频工程师最熟悉的一种仪器。相对于示波器作为“电子工程师的眼睛”,占据“时域第一仪器”甚至“电子测试测量第一仪器”之地位,频谱仪堪称是射频领域的“频域第一仪器”。

    有趣的是,长期习惯时域思维的工程师对频谱仪的原理了解很少,而长期从事射频的工程师问起示波器的问题也充满萌意。

    在多数频谱仪资料中都会提到,频谱仪从实现技术的原理上进行分类,有FFT分析仪和超外差扫频式频谱分析仪两大类;也有说法是分为FFT分析仪,超外差扫频式频谱分析仪和实时频谱仪三类。

    现在市面上能买到的频谱仪几乎都是基于“超外差扫频"技术实现的。我不确定是否有专门的FFT分析仪在卖。所谓FFT分析仪是指先采集时域信号,再用FFT算法将这个时域信号转换为频域,其实和示波器FFT分析的原理是完全一样的。任何示波器的数学运算功能中都有FFT运算功能,从这种意义上说,示波器就是一种FFT分析仪。也因为示波器有FFT功能,习惯于在时域里游走的朋友喜欢问:示波器本身就可以做频域分析,为什么还需要专门的频谱仪? 示波器和频谱仪做频域分析有什么区别? 扫频式频谱仪难道不用FFT吗……

    基于频谱仪这种仪器,仪器厂商后来又定义了新的产品品类,如信号分析仪,矢量分析仪,EMI接收机,实时频谱仪等新仪器。这些变换了名目的仪器之基本原理都是基于“超外差扫频”实现的,只是增加了比较复杂的分析软件或是功能模块的硬件细节上有所改变。

    本文将要讨论的基于全数字中频技术的频谱仪本质上也是基于“超外差扫频”的基本原理。随着数字技术特别是FPGA技术的发展,早期的全部采用模拟技术实现的频谱仪慢慢全部绝迹了,只是业界并没有将基于全数字中频技术的频谱仪称为数字频谱仪。(我没有查核目前主流频谱仪厂商在卖的频谱仪哪些型号还是全模拟实现的,诸位如果有这方面的清单,欢迎提供给我。) 数字技术为频谱仪的发展带来了很大的技术突破,其中一个集大成者就是所谓的实时频谱仪,它将Overlap FFT技术运用到了数字中频部分,结合频域模板触发,产生了新的品类也满足了一些新的测量应用,成为仪器界一度流行的风景。

    总结前面这段散侃式文字,我想强调的重点是:目前市面上所有频谱仪类产品,核心的原理都是“超外差扫频”。而理解超外差,实质就是理解混频器。

    让我们先全景式概略了解一下目前主流的基于全数字中频技术的频谱仪的基本原理。

    1、基于全数字中频技术的频谱仪原理概述

    鼎阳科技频谱仪旗舰产品SSA3000X系列正是基于全数字中频技术实现的, 如图1所示是鼎阳科技SSA3000X的基本原理框图。一般的基于全数字中频技术的频谱仪实现原理皆与此相近。

    SSA3000X由模拟部分和数字部分组成。模拟部分将输入信号转换为模数转换器(ADC)可以接受的电压范围和频率范围以实现数字化。数字部分对离散化之后的数字信号进行中频滤波、检波、视频滤波等一系列处理之后送屏幕显示。

    e0a40b034276e892bea5b62327ec0b4d.png
    图1:基于全数字中频技术的频谱仪原理框图

    SSA3032X的输入信号频率范围是9KHz-3.2GHz,但ADC的采样率是40MS/s,只能对20MHz信号带宽以内的信号进行不失真的采样。如何将输入信号很大的频率范围转换为相对较小的频率呢? 这里面涉及到频率的“搬移”是通过混频器(Mixer)实现的。

    输入信号通过衰减器前置放大器低通滤波器之后,将输入信号转换为混频器最佳工作电平送给混频器,混频器根据该输入信号和本地压控振荡器(VCO)的输出时钟信号一起进行“超外差扫频”变换,将输入信号的频率范围从9KHz-3.2GHz转换为基于一定频点(几十MHz)、能够被ADC采样的带通信号,该信号的带宽是分辨率带宽RBW的几倍。VCO的输出时钟信号的频率受数字部分的软件控制频率逐渐变化(扫频)。

    混频之后的信号再经过放大器和滤波器处理之后送给ADC进行离散化转换为数字信号,再经过混频器数字下变频转变为基带信号。该基带信号经过中频滤波器(IF Filter)或FFT分析处理,再经过检波器和视频滤波器处理之后送屏幕显示。FFT可以理解为一组中频滤波器同时进行处理。中频滤波器的带宽即非常著名的RBW。RBW和滤波器的形状将决定可以分辨的最小频率以及频谱的形状。

    混频之后的信号再经过放大器和滤波器处理之后送给ADC进行离散化转换为数字信号,再经过混频器数字下变频转变为基带信号。该基带信号经过中频滤波器(IF Filter)或FFT分析处理,再经过检波器和视频滤波器处理之后送屏幕显示。 FFT可以理解为一组中频滤波器同时进行处理。 中频滤波器的带宽即非常著名的RBW。 RBW和滤波器的形状将决定可以分辨的最小频率以及频谱的形状。

    2、“超外差扫频“:为什么要经过四级混频是理解频谱仪的难点

    上面这段概述对于之前没有任何射频领域经验的工程师朋友仍显晦涩。理解频谱仪的原理,首先要理解“超外差扫频”的概念。

    频谱仪的典型显示画面如图2所示,该图表示输入信号在不同的频率点时功率(有时纵坐标是用“电压”)的大小,横坐标表示频率,纵坐标表示每一个频率点对应的功率。设想有一个中心频率在逐渐增加的带通滤波器,输入信号经过每一个滤波器,对应产生一个被过滤的输出信号,计算被过滤的输出信号的功率。逐渐增加带通滤波器的中心频率,相应就得到功率随着频率变化的功率谱。这样设计频谱仪原理上不是更简单吗?但真实的频谱仪没有采用这种调节滤波器中心频率的方式,而是采用中心频率固定的带宽滤波器,通过“频率搬移”的方式改变输入信号的频率以使频率被改变之后的信号依此能够被中心频率固定的带通滤波器过滤,由于频率变换的关系式是确定的,从而也就获得随频率变换的功率谱。这就是采用超外差扫频方式的基本原理。在工程实践上,改变输入信号的频率比改变带通滤波器的中心频率要更容易实现。

    d52c1209b9a5e2701f75563be11be56e.png
    图2:鼎阳科技SSA3000X频谱仪的测量结果

    为了能够实现频率“搬移”,就需要用到混频器。混频器对输入混频器的两路信号进行“矢量乘法运算”,得到输入两个输入信号频率的“和”与“差”,但混频器是非线性器件,它输出信号的频率成份还包括原始输入信号的频率成份,也就是说混频器的输出包括了至少四种频率成份,如图3所示。

    872b5b869b1c46db461cc5494055fe01.png
    图3:乘法器的输入和输出信号的主要频率成分

    乘法器的数学本质是:

    。如果混频器的应用是为了利用(α+β),被称为上变频,如果是为了利用(α-β),则是下变频。在频谱仪的实现上是利用(α-β),本振频率-输入信号频率=中频频率。假如采用一级混频,输入信号频率范围是9KHz-3.2GHz,中频频率是固定的,假设是20MHz,那么对应的本振频率范围是:20.9MHz-3.22GHz。这会带来什么问题?这是一个大大的问题!拿具体化的例子来说明:例如本振频率是2.8GHz,那么2.7GHz和2.9GHz就会同时混到100M这个点上,无法区分2.7GHz和2.9GHz。

    如果频谱仪采用一级混频而且第一级输出的中频是频率比较低,当输入频率范围大于2fIF,那么被测信号范围和镜像信号范围将会重叠,如图4所示。这时即使采用低通滤波器不能将镜像频率信号滤除,所以对输入滤波器的要求在不影响主信号的情况下,应用一个可调谐带通滤波器以抑制镜像频率。为了覆盖(9kHz~3.6GHz)的频率范围,由于较宽的调谐范围(几十个倍频程)使滤波器变得极为复杂而不容易实现,因此必须采用高中频方案:第一中频频率比输入信号频率高,那么本振信号也比输入信号频率高,镜像频率和输入信号的频率间隔为2fIF,也就是镜像频率远远高于本振信号频率和输入信号的频率,因此设计一个固定的滤波器,其截止频率位于最高输入频率和中频频率之间就很容易解决镜像频率对有用信号的影响。此外,低通滤波器还可以抑制本振信号从频谱仪输入端口泄漏出去而影响被测件。

    80bb49821394199faa9781a602396551.png
    图4:混频器的中频频率选择不合适带来频率混叠

    实际上的频谱仪一般采用多级混频,现在市面上多数基于数字中频的频谱仪多是采用四级混频。模拟部分采用了三级混频,如图5所示,第一级混频器要选高频本振,例如选择第一中频3.2GHz,频率范围从3.2GHz-9kHz,那么带内没有两个信号能够在一个本振下混频到3.2GHz,处理上是合理的。但是仍然有两个缺点:第一个缺点即最近的镜像点为3.2GHz+9kHz,与3.2GHz-9kHz作为9KHz本振的镜像,镜像相距过近不容易滤除;第二个缺点为本振处在射频测量带内,会通过混频器向外反向泄露到射频口,引起输入端被内部信号干扰问题。因此,对于输入频率范围是9KHz-3.2GHz的频率仪,一般选第一级本振的频率会高达4GHz。混频器前的低通滤波器的截止频率在3.2GHz以上,在8GHz(中频镜像)的衰减必须达到输入口底噪之下,以防止高频段的能量混频到4GHz中频。理论上讲,低于第一中频的扫宽都是可以在这个结构下实现的,即频率范围指标可以达到4GHz。

    25b19405dfb539ad9010911504b7b646.png
    图5:频谱仪的模拟部分一般采用了三级混频

    模拟部分经过三级混频,可以得到公式

    ,如何选择
    ,这是有一些商业秘密色彩的数据了。在此不再细述。

    经过三级混频之后的信号是中心频率为20MHz左右(大概的一个数据,每种频谱仪的具体大小可能不一样)、带宽为5MHz左右(大概的一个数据)的带通信号,这种带通信号经过第四级变频,如图1所示中的数字混频器。这是第四级混频,是数字下变频,它将带通信号转换为基带信号。这个变换步骤和通信领域的基站、手机的实现原理完全一样了。由于完全采用数字方式实现的,这部分有个相关的技术名词叫“软件无线电”。

    “超外差扫频”的实现过程中,本地振荡器VCO的频率受到数字部分的软件控制,逐渐从低频按一定规律步进“扫描”递进到高频,再重新从低频开始扫描下一个周期。输入到频谱仪的外界信号的频率对于频谱仪的“软件算法”在一开始是“未知的”,但是中频的频率点是固定的、已知的,可以通过软件控制本振的频率,选择某个频率点,相应就得到了输入信号的频率。因此,本振信号频率变化就等于输入信号频率变化,对于全数字中频的频谱仪,“扫频”是通过软件来控制本振振频率的变化来实现输入信号在一段频率范围内的扫描的。扫描的过程如图6所示,当一个待测试的单频点信号输入到频谱仪,实际上测量到的是中频滤波器幅频特性的形状,即实际测量的结果是中频滤波器幅频特性和输入信号的卷积。

    765086f7fedff96c31c8d163dbce7396.png
    图6:频谱仪的扫描过程

    3、一个衰减器,三个放大器,四个滤波器:都是影响幅值精度的关键点,也是频谱仪使用技巧的关键

    频谱仪中使用模拟的衰减器,放大器,滤波器等器件会带来噪声和失真,这些器件的特性将影响到频谱仪可测量到的最小电平,影响频谱仪的动态范围,测量精度。这些器件的一些参数有的是用户无法改变的,有的是用户可以改变的。理解这些器件在频谱仪中的作用和性能指标将有助于更好地使用频谱仪:衰减器该不该打开,设置为多少?前置放大器什么时候需要打开?中频滤波器的带宽怎么设置是合适的……

    3.1、一个衰减器,两个放大器(前置放大器和中频放大器)是联动工作

    衰减器的作用是:1,保护混频器,输入信号电平过高会导致混频器被损坏。混频器有一个最大可接受的输入电平,被称为最大安全输入电平,输入信号不能超过该安全电平。2,改善匹配,获得最佳动态范围,减少增益压缩和失真。混频器有一个最佳输入电平,通过衰减器和前置放大器的配合工作,以使混频器工作在最佳输入电平,也就是所谓的获得“最佳匹配”,提高测量的准确度。混频器是非线性器件,当混频器输入信号电平较高时,输出会产生很多频率成份,而且电平太高会干扰测试结果,使无互调范围减小。当输入信号电平在混频器1dB压缩点以上时,测试结果会不准确。通过设置步进衰减器调节进入混频器的电平,可以得到较大的动态范围。但是,衰减器设置过大,仪器的本底噪声被抬高。衰减大,失真小,噪声大。因此,混频器的设置是用户要慎重考虑的。

    为了防止直流信号损坏混频器,在衰减器电路中包含了一个隔直电容。如图7所示,这使频谱仪的输入信号频率并不能从0Hz开始的,多数是从9KHz开始的。

    6fe331d4d0a199fa572c1761180ee3ce.png
    图7:频谱仪输入衰减电路

    衰减器和前置放大器配合工作,使得混频器获得最佳输入电平,它们和混频器之后的中频增益放大器也是联动工作的。衰减器和前置放大器调节信号电平达到适合混频器的最佳匹配,但并不一定能使ADC获得最佳动态范围,需要再和增益放大器配合,以最小化ADC的量化误差。这和示波器中通过探头衰减和改变垂直增益使被测信号占满示波器的栅格,使得示波器的ADC获得最小量化误差是一个道理。

    前置放大器对于有些频谱仪不是标配,需要通过外置的方式实现。输入信号先连接到外置放大器,再从放大器连接到频谱仪的RF输入端。鼎阳科技SSA3000X标配有前置放大器,为测量极微弱的小信号,譬如EMI测量带来了很大的便利性。

    3.2、对数放大器:数字方式实现时不过是一个量纲转换的关系式

    对数放大器并不太影响对频谱仪原理的理解,在有些频谱仪的原理框图中干脆没有画出来。由于频谱仪可测量的动态范围很大,如果用电压作为垂直量程,将使得显示结果的垂直轴的波形“被压缩”,“挤"在一起影响观察。因此,传统的纯模拟频谱仪需要通过硬件的“对数放大器”电路将频谱仪的测量结果显示为对数表示后的结果。这在数字方式实现时,不过是将量纲转换一下的一个关系式而已。但是在EMI测量中,又特别要求用电压作为垂直量单位。

    3.3、四个滤波器,除了中频滤波器是带通,其它都是低通的

    顾名思义,低通滤波器的目的都是为了过滤掉截止频率点以上的高频成分。在SSA3000X频谱仪的实现上,使用了三个低通滤波器和一个带通滤波器:

    (1)混频器之前的低通滤波器

    阻止一些无用的频率成份进入混频器,和本振信号一起产生“不需要”的多余的信号。对于SSA3000X频谱仪,该滤波器的截止频率在3.2GHz以上,在8GHz(中频镜像)的衰减必须达到输入端口底噪之下,以防止高频段的能量混频到4GHz中频。理论上讲,低于第一中频的扫宽都是可以在这个结构下实现的,即频率范围指标可以达到4GHz。

    用户无法通过改变任何设置来改变这个滤波器的截止频率点。

    (2)中频增益放大器之后的低通滤波器

    在纯模拟的频谱仪示意图中,这个滤波器一般就是中频滤波器了,但在基于全数字中频的频谱仪中,该低通滤波器是为了过滤掉混频器输出得到的镜向频率成份。

    用户也无法通过改变任何设置来改变这个滤波器的截止频率点。

    (3)视频滤波器

    视频滤波器的作用就有点像在示波器中的带宽限制,就是对输入的信号进行了低通滤波使得波形看起来更加光滑一些。视频滤波器的带宽在频谱仪中标识为VBW(Video BandWidth)。减小VBW将使得频谱仪显示的频谱的“旁瓣”看起来更加光滑,抑制了随机噪声,可以提高小信号的测量精度。

    在频谱仪的操作中,需要适当调节VBW以获得更佳测量结果。这是一个常用的设置。

    (4)数字方式实现的中频滤波器(IF Filter)和FFT是并行的:这也许比较难以理解的

    中频滤波器及其带宽分辨率带宽(RBW,Resolution BandWidth)是频谱仪中极其重要的概念和指标。

    中频滤波器是一个带通滤波器。在纯模拟的频谱仪中采用的模拟滤波器,分辨率带宽和形状因子都很难做到很小,譬如模拟滤波器的RBW一般从100kHz—10MHz,其选择性依赖于滤波电路阶数,一般频谱仪为4级滤波电路,也有5级滤波电路的产品,这样可分别得到14和10的形状因子。但是理想的高斯滤波器的形状因子为4.6,不能用模拟滤波器实现。基于全数字中频技术的频谱仪采用数字方式实现中频滤波器,可以获得更灵活的滤波器形状因子和更小的分辨率带宽。鼎阳科技SSA3000X的最小分辨率带宽只有10Hz。

    RBW越小,可以分辨的相邻两个频率的间隔就越小,譬如可以精确分辨出100MHz和100.01MHz两种频率的分量。

    RBW越小,噪声带宽就越窄,进入频谱分析仪的噪声就越小,那么接收灵敏度就越高,频谱仪测量到的本底噪声就越低。

    但是,RBW越小,频谱仪的扫描时间很长,此时切换为FFT的方式进行滤波,测量速度更快。 FFT的物理意义就是窗函数形状的一组滤波器对输入信号进行滤波,滤波之后的结果就是包含了很多频率点的频谱。因此,这里的FFT理解为一排并行的RBW滤波器(窗函数),相当于一次性跨了N个频点,检测了N个峰值。所以FFT比单纯扫频理论上快N倍。

    在频谱仪的操作中,需要适当调节RBW以获得更佳测量结果。这是一个更常用的设置。

    4、一个基本时钟Ref产生两个参考时钟:VCO和NCO

    图1所示的Ref是频谱仪内部由一个温控晶振(TCXO)产生的时钟信号,频率一般是10MHz。这是频谱仪的“心脏”。为了增加频率精度与长期的稳定性,对大多数频谱仪来说,广泛采用恒温控制晶振(OCXO)。可以从频谱仪后面板REF OUT得到该参考时钟信号, 也可以应用外部时钟来作为频谱仪的参考时钟。该参考时钟作为ADC采样的时间基准,同时作为模拟部分的VCO的时基和数字部分的NCO的时基。VCO和NCO都是基于PLL倍频技术将10MHz频率提升到更高频率。

    和时基相关的频谱仪的一种重要指标是相位噪声,是本地振荡器Ref短时间稳定度的度量参数。相位噪声通常是以一个单载波的幅度为参考,并偏移一定的频率下的单边带相位噪声。这个数值是指在1Hz带宽下的相对噪声电平,故其单位为dBc(1Hz)或dBc/Hz,c指的是载波,由于相位噪声电平比载波电平低,所以为负值。频谱分析仪的本振信号的相位噪声经过混频器混频,将在输入信号上产生相应的相位噪声,这就意味着即使输入的是一个理想的正弦信号,频谱仪的本振相位噪声也将在显示的谱线上叠加,如果输入信号夹带相位噪声(实际上常有这种情况),频谱仪的显示轨迹就包含了输入信号和本振信号合成的相位噪声。本振的相位噪声太差,在输入信号邻近的小信号就无法检测出来。相位噪声主要影响频谱仪的分辨率和动态范围。

    使用频谱仪来准确分析被测信号相位噪声条件:频谱仪的相位噪声要比被测信号的相位噪声明显好很多。为了测试频谱分析仪的相位噪声指标,必须用一个相位噪声比频谱仪相位噪声好得多的源来测试。鼎阳科技SSA3000X的相位噪声<-98dBc/Hz,在10KHz偏移处。

    5、检波器:全数字中频的实现方式和模拟电路实现方式大不一样

    输入信号幅度的信息包含在中频信号的幅度中,通过使用模拟或者数字滤波器,在滤除高的中频信号之后,可以得到中频信号的包络,如图8所示。

    c38c51a2d468e09393ed847e2deddafb.png
    图8:模拟频谱仪中的检波器的实现

    现代频谱仪使用液晶显示器来代替阴极射线管来显示记录频谱,相应地,幅度和频率显示的分辨率都受到限制。幅度分辨率的限制可用曲线处理来弥补,这样即可在很高分辨率的情况下来确定幅度。特别当显示大的频率跨度时,一个象素点包含了相对较大子段的频谱信息,由于频谱仪第一级本振的调整步长取决于分辨率带宽,这样多个取样点(测试结果值)会落在一个象素点上,象素点显示什么样的数值取决于检波器的检波方式。举个例子,当测试100MHz~3.1GHz的频谱时,RBW等于10MHz,频率跨度为3GHz,频谱仪只显示300点,实际上一个显示点(象素点)代表了10MHz信号带宽内的频谱。假设本振以RBW/10为步进,那么每10MHz带宽的输入信号测试了10次,在整个带宽内一共测试了3000次,中心频率分别为110MHz、120MHz、130MH、……、3.1GHz,但是显示点只有300个,那么一个显示点代表这10MHz频带内的10次测量结果值,到底代表哪一次或者哪几次结果的合成就由检波器来决定。

    因此,数字方式的“检波”就是采用一定的算法从N个样本点之间产生1个样本点,上例中就是从10个样本点中产生1个样本点。目前这些算法有7种,如图9所示:

    508536ad1937b4e9fb5172b18863635c.png
    图9:检波器的多种检波算法

    1、最大峰值检波器:从分配到每个像素点的取样点中取一个最高电平并显示出来,如上例,将第9个点和第13个点的测试结果值显示出来,其它的无效。

    2、最小峰值检波器:从分配到每个像素点的取样点中取一个最小电平并显示出来,如上例,将第5个点和第17个点的测试结果值显示出来,其它的无效。

    3、自动峰值检波:同时显示最高电平和最小电平,两点之间用垂线相连。

    4、取样检波:从分配到每个像素点的取样点中取固定位置的电平并显示出来,如图,将第1个点和第11个点的测试结果值显示出来,其它的无效。在频率跨度远远大于RBW的情况下,输入信号将不再被可靠检测。

    5、RMS检波器(均方根):计算分配到每个像素点的所有取样值的均方根值,结果为像素点对应频宽内的信号功率。在RMS计算时,包络的取样值要求采用线性值来计算。

    6、平均值检波:计算分配到每个像素点所有取样点的线性平均值。

    7、准峰值检波:这是一种用于干扰测量应用并定义了充放电时间的峰值检波器,用于EMC方面的测试。

    6、容易引起误解的词:超外差的“超”,中频滤波器的“中频”,视频滤波器的“视频”,对数放大器的“对数”

    频谱仪的很多专业词语,从字面上理解起来很费劲。例如“超外差”为什么叫“超”?“中频滤波器”为什么叫“中频”?“视频滤波器”为什么“视频”?“对数放大器”为什么是“对数”?

    外差就是混频的一种说法,加个“超”字是指“超音频频率或高于音频的频繁范围”。不清楚为什么频谱仪早前是和音频频率相关联的。

    中频是指一种中间频率的信号形式。中频是相对于基带信号和射频信号来讲的,中频可以有一级或多级,它是基带和射频之间过渡的桥梁。

    视频滤波器实质是一个低通过滤波器,但在传统纯模拟的频谱仪中,滤波之后的信号直接送给显示,该滤波器决定了驱动显示器垂直偏转系统的视频电路带宽。可能是因此将这个滤波器称为视频滤波器。

    对数放大器,前面已经说明,传统上采用“对数放大器”这样的模拟器件实现量纲转换,现在只是数字方式实现上的一个简单的算术表达式了。


    版权声明:鼎阳硬件设计与测试智库发表的所有文章皆为鼎阳硬件设计与测试智库专家呕心沥血之原创。希望我们的经验总结能够帮助到更多的硬件人,欢迎转载!我们鼓励分享,但也坚决捍卫我们的权益。引用请注明出处——“鼎阳硬件设计与测试智库”微信号(SiglentThinkTank)。鼎阳硬件设计与测试智库将保留追究文章非法盗用者法律责任的权利!

    展开全文
  • 如果你想先看看最终效果再决定看不看文章 -> bilibili示例代码下载本文是系列文章中的第二篇,上篇讲述了音频...根据FFT的原理, N个音频信号样本参与计算将产生N/2数据(2048/2=1024),其频率分辨率△f=Fs/N = ...

    4858f1ff19d98bb9c930b3871ab1afa2.png

    如果你想先看看最终效果再决定看不看文章 -> bilibili

    示例代码下载

    本文是系列文章中的第二篇,上篇讲述了音频播放和频谱数据计算,本篇讲述数据处理和动画的绘制。

    前言

    在上篇文章中我们已经拿到了频谱数据,也知道了数组每个元素表示的是振幅,那这些数组元素之间有什么关系呢?根据FFT的原理, N个音频信号样本参与计算将产生N/2个数据(2048/2=1024),其频率分辨率△f=Fs/N = 44100/2048≈21.5hz,而相邻数据的频率间隔是一样的,因此这1024个数据分别代表频率在0hz、21.5hz、43.0hz....22050hz下的振幅。

    那是不是可以直接将这1024个数据绘制成动画?当然可以,如果你刚好要显示1024个动画物件!但是如果你想可以灵活地调整这个数量,那么需要进行频带划分。

    严格来说,结果有1025个,因为在上篇文章的FFT计算中通过fftInOut.imagp[0] = 0,直接把第1025个值舍弃掉了。这第1025个值代表的是奈奎斯特频率值的实部。至于为什么保存在第一个FFT结果的虚部中,请翻看第一篇。

    频带划分

    频带划分更重要的原因其实是这样的:根据心理声学,人耳能容易的分辨出100hz和200hz的音调不同,但是很难分辨出8100hz和8200hz的音调不同,尽管它们各自都是相差100hz,可以说频率和音调之间的变化并不是呈线性关系,而是某种对数的关系。因此在实现动画时将数据从等频率间隔划分成对数增长的间隔更合乎人类的听感。

    3534164 图1 频带划分方式

    打开项目AudioSpectrum02-starter,您会发现跟之前的AudioSpectrum01项目有些许不同,它将FFT相关的计算移到了新增的类RealtimeAnalyzer中,使得AudioSpectrumPlayer和RealtimeAnalyzer两个类的职责更为明确。

    如果你只是想浏览实现代码,打开项目AudioSpectrum02-final即可,已经完成本篇文章的所有代码

    查看RealtimeAnalyzer类的代码,其中已经定义了 frequencyBands、startFrequency、endFrequency 三个属性,它们将决定频带的数量和起止频率范围。

    public var frequencyBands: Int = 80 //频带数量 public var startFrequency: Float = 100 //起始频率 public var endFrequency: Float = 18000 //截止频率 复制代码

    现在可以根据这几个属性确定新的频带:

    private lazy var bands: [(lowerFrequency: Float, upperFrequency: Float)] = { var bands = [(lowerFrequency: Float, upperFrequency: Float)]() //1:根据起止频谱、频带数量确定增长的倍数:2^n let n = log2(endFrequency/startFrequency) / Float(frequencyBands) var nextBand: (lowerFrequency: Float, upperFrequency: Float) = (startFrequency, 0) for i in 1...frequencyBands { //2:频带的上频点是下频点的2^n倍 let highFrequency = nextBand.lowerFrequency * powf(2, n) nextBand.upperFrequency = i == frequencyBands ? endFrequency : highFrequency bands.append(nextBand) nextBand.lowerFrequency = highFrequency } return bands }() 复制代码

    接着创建函数findMaxAmplitude用来计算新频带的值,采用的方法是找出落在该频带范围内的原始振幅数据的最大值:

    private func findMaxAmplitude(for band:(lowerFrequency: Float, upperFrequency: Float), in amplitudes: [Float], with bandWidth: Float) -> Float { let startIndex = Int(round(band.lowerFrequency / bandWidth)) let endIndex = min(Int(round(band.upperFrequency / bandWidth)), amplitudes.count - 1) return amplitudes[startIndex...endIndex].max()! } 复制代码

    这样就可以通过新的analyse函数接收音频原始数据并向外提供加工好的频谱数据:

    func analyse(with buffer: AVAudioPCMBuffer) -> [[Float]] { let channelsAmplitudes = fft(buffer) var spectra = [[Float]]() for amplitudes in channelsAmplitudes { let spectrum = bands.map { findMaxAmplitude(for: $0, in: amplitudes, with: Float(buffer.format.sampleRate) / Float(self.fftSize)) } spectra.append(spectrum) } return spectra } 复制代码

    动画绘制

    看上去数据都处理好了,让我们捋一捋袖子开始绘制动画了!打开自定义视图SpectrumView文件,首先创建两个CAGradientLayer:

    var leftGradientLayer = CAGradientLayer()

    var rightGradientLayer = CAGradientLayer()

    复制代码

    新建函数setupView(),分别设置它们的colors和locations属性,这两个属性分别决定渐变层的颜色和位置,再将它们添加到视图的layer层中,它们将承载左右两个声道的动画。

    private func setupView() { rightGradientLayer.colors = [UIColor.init(red: 52/255, green: 232/255, blue: 158/255, alpha: 1.0).cgColor, UIColor.init(red: 15/255, green: 52/255, blue: 67/255, alpha: 1.0).cgColor] rightGradientLayer.locations = [0.6, 1.0] self.layer.addSublayer(rightGradientLayer) leftGradientLayer.colors = [UIColor.init(red: 194/255, green: 21/255, blue: 0/255, alpha: 1.0).cgColor, UIColor.init(red: 255/255, green: 197/255, blue: 0/255, alpha: 1.0).cgColor] leftGradientLayer.locations = [0.6, 1.0] self.layer.addSublayer(leftGradientLayer) } 复制代码

    接着在View的初始化函数init(frame: CGRect) 和 init?(coder aDecoder: NSCoder)中调用它,以便在代码或者Storyboard中创建SpectrumView时都可以正确地进行初始化。

    override init(frame: CGRect) {

    super.init(frame: frame) setupView() } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) setupView() } 复制代码

    关键的来了,定义一个spectra属性对外接收频谱数据,并通过属性观察didSet创建两个声道的柱状图的UIBezierPath,经过CAShapeLayer包装后应用到各自CAGradientLayer的mask属性中,就得到了渐变的柱状图效果。

    var spectra:[[Float]]? {

    didSet {

    if let spectra = spectra { // left channel let leftPath = UIBezierPath() for (i, amplitude) in spectra[0].enumerated() { let x = CGFloat(i) * (barWidth + space) + space let y = translateAmplitudeToYPosition(amplitude: amplitude) let bar = UIBezierPath(rect: CGRect(x: x, y: y, width: barWidth, height: bounds.height - bottomSpace - y)) leftPath.append(bar) } let leftMaskLayer = CAShapeLayer() leftMaskLayer.path = leftPath.cgPath leftGradientLayer.frame = CGRect(x: 0, y: topSpace, width: bounds.width, height: bounds.height - topSpace - bottomSpace) leftGradientLayer.mask = leftMaskLayer // right channel if spectra.count >= 2 { let rightPath = UIBezierPath() for (i, amplitude) in spectra[1].enumerated() { let x = CGFloat(spectra[1].count - 1 - i) * (barWidth + space) + space let y = translateAmplitudeToYPosition(amplitude: amplitude) let bar = UIBezierPath(rect: CGRect(x: x, y: y, width: barWidth, height: bounds.height - bottomSpace - y)) rightPath.append(bar) } let rightMaskLayer = CAShapeLayer() rightMaskLayer.path = rightPath.cgPath rightGradientLayer.frame = CGRect(x: 0, y: topSpace, width: bounds.width, height: bounds.height - topSpace - bottomSpace) rightGradientLayer.mask = rightMaskLayer } } } } 复制代码

    其中translateAmplitudeToYPosition函数的作用是将振幅转换成视图坐标系中的Y值:

    private func translateAmplitudeToYPosition(amplitude: Float) -> CGFloat { let barHeight: CGFloat = CGFloat(amplitude) * (bounds.height - bottomSpace - topSpace) return bounds.height - bottomSpace - barHeight } 复制代码

    回到ViewController,在SpectrumPlayerDelegate的方法中直接将接收到的数据交给spectrumView:

    // MARK: SpectrumPlayerDelegate

    extension ViewController: AudioSpectrumPlayerDelegate { func player(_ player: AudioSpectrumPlayer, didGenerateSpectrum spectra: [[Float]]) { DispatchQueue.main.async { //1: 将数据交给spectrumView self.spectrumView.spectra = spectra } } } 复制代码

    敲了这么多代码,终于可以运行一下看看效果了!额...看上去效果好像不太妙啊。请放心,喝杯咖啡放松一下,待会一个一个来解决。

    3534164 图2 初始动画效果

    调整优化

    效果不好主要体现在这三点:1)动画与音乐节奏匹配度不高;2)画面锯齿过多; 3)动画闪动明显。 首先来解决第一个问题:

    节奏匹配

    匹配度不高的一部分原因是目前的动画幅度太小了,特别是中高频部分。我们先放大个5倍看看效果,修改analyse函数:

    func analyse(with buffer: AVAudioPCMBuffer) -> [[Float]] { let channelsAmplitudes = fft(buffer) var spectra = [[Float]]() for amplitudes in channelsAmplitudes { let spectrum = bands.map { //1: 直接在此函数调用后乘以5 findMaxAmplitude(for: $0, in: amplitudes, with: Float(buffer.format.sampleRate) / Float(self.fftSize)) * 5 } spectra.append(spectrum) } return spectra } 复制代码

    3534164 图3 幅度放大5倍之后,低频部分都超出画面了

    低频部分的能量相比中高频大许多,但实际上低音听上去并没有那么明显,这是为什么呢?这里涉及到响度的概念:

    响度(loudness又称音响或音量),是与声强相对应的声音大小的知觉量。声强是客观的物理量,响度是主观的心理量。响度不仅跟声强有关,还跟频率有关。不同频率的纯音,在和1000Hz某个声压级纯音等响时,其声压级也不相同。这样的不同声压级,作为频率函数所形成的曲线,称为等响度曲线。改变这个1000Hz纯音的声压级,可以得到一组等响度曲线。最下方的0方曲线表示人类能听到的最小的声音响度,即听阈;最上方是人类能承受的最大的声音响度,即痛阈。

    3534164 图4 横坐标为频率,纵坐标为声压级,波动的一条条曲线就是等响度曲线(equal-loudness contours),这些曲线代表着声音的频率和声压级在相同响度级中的关联。

    原来人耳对不同频率的声音敏感度不同,两个声音即使声压级相同,如果频率不同那感受到的响度也不同。基于这个原因,需要采用某种频率计权来模拟使得像人耳听上去的那样。常用的计权方式有A、B、C、D等,A计权最为常用,对低频部分相比其他计权有着最多的衰减,这里也将采用A计权。

    3534164 图5 蓝色曲线就是A计权,是根据40 phon的等响曲线模拟出来的反曲线

    在RealtimeAnalyzer类中新建函数createFrequencyWeights(),它将返回A计权的系数数组:

    private func createFrequencyWeights() -> [Float] { let Δf = 44100.0 / Float(fftSize) let bins = fftSize / 2 //返回数组的大小 var f = (0..

    更新analyse函数中的代码:

    func analyse(with buffer: AVAudioPCMBuffer) -> [[Float]] { let channelsAmplitudes = fft(buffer) var spectra = [[Float]]() //1: 创建权重数组 let aWeights = createFrequencyWeights() for amplitudes in channelsAmplitudes { //2:原始频谱数据依次与权重相乘 let weightedAmplitudes = amplitudes.enumerated().map {(index, element) in return element * aWeights[index] } let spectrum = bands.map { //3: findMaxAmplitude函数将从新的`weightedAmplitudes`中查找最大值 findMaxAmplitude(for: $0, in: weightedAmplitudes, with: Float(buffer.format.sampleRate) / Float(self.fftSize)) * 5 } spectra.append(spectrum) } return spectra } 复制代码

    再次运行项目看看效果,好多了是吗?

    3534164 图6 A计权之后的动画表现

    锯齿消除

    接着是锯齿过多的问题,手段是将相邻较长的拉短较短的拉长,常见的办法是使用加权平均。创建函数highlightWaveform():

    private func highlightWaveform(spectrum: [Float]) -> [Float] { //1: 定义权重数组,数组中间的5表示自己的权重 // 可以随意修改,个数需要奇数 let weights: [Float] = [1, 2, 3, 5, 3, 2, 1] let totalWeights = Float(weights.reduce(0, +)) let startIndex = weights.count / 2 //2: 开头几个不参与计算 var averagedSpectrum = Array(spectrum[0.. [(a,x), (b,y), (c,z)] let zipped = zip(Array(spectrum[i - startIndex...i + startIndex]), weights) let averaged = zipped.map { $0.0 * $0.1 }.reduce(0, +) / totalWeights averagedSpectrum.append(averaged) } //4:末尾几个不参与计算 averagedSpectrum.append(contentsOf: Array(spectrum.suffix(startIndex))) return averagedSpectrum } 复制代码

    analyse函数需要再次更新:

    func analyse(with buffer: AVAudioPCMBuffer) -> [[Float]] { let channelsAmplitudes = fft(buffer) var spectra = [[Float]]() for amplitudes in channelsAmplitudes { let weightedAmplitudes = amplitudes.enumerated().map {(index, element) in return element * weights[index] } let spectrum = bands.map { findMaxAmplitude(for: $0, in: weightedAmplitudes, with: Float(buffer.format.sampleRate) / Float(self.fftSize)) * 5 } //1: 添加到数组之前调用highlightWaveform spectra.append(highlightWaveform(spectrum: spectrum)) } return spectra } 复制代码

    3534164 图7 锯齿少了,波形变得明显

    闪动优化

    动画闪动给人的感觉就好像丢帧一样。造成这个问题的原因,是因为频带的值前后两帧变化太大,我们可以将上一帧的值缓存起来,然后跟当前帧的值进行...没错,又是加权平均! (⊙﹏⊙)b 继续开始编写代码,首先需要定义两个属性:

    //缓存上一帧的值

    private var spectrumBuffer: [[Float]]?

    //缓动系数,数值越大动画越"缓" public var spectrumSmooth: Float = 0.5 { didSet { spectrumSmooth = max(0.0, spectrumSmooth) spectrumSmooth = min(1.0, spectrumSmooth) } } 复制代码

    接着修改analyse函数:

    func analyse(with buffer: AVAudioPCMBuffer) -> [[Float]] { let channelsAmplitudes = fft(buffer) let aWeights = createFrequencyWeights() //1: 初始化spectrumBuffer if spectrumBuffer.count == 0 { for _ in 0..(repeating: 0, count: frequencyBands)) } } //2: index在给spectrumBuffer赋值时需要用到 for (index, amplitudes) in channelsAmplitudes.enumerated() { let weightedAmp = amplitudes.enumerated().map {(index, element) in return element * aWeights[index] } var spectrum = bands.map { findMaxAmplitude(for: $0, in: weightedAmplitudes, with: Float(buffer.format.sampleRate) / Float(self.fftSize)) * 5 } spectrum = highlightWaveform(spectrum: spectrum) //3: zip用法前面已经介绍过了 let zipped = zip(spectrumBuffer[index], spectrum) spectrumBuffer[index] = zipped.map { $0.0 * spectrumSmooth + $0.1 * (1 - spectrumSmooth) } } return spectrumBuffer } 复制代码

    再次运行项目,得到最终效果:

    3228efdfedb7adf6c17633d9a923ee0f.gif

    结尾

    音频频谱的动画实现到此已经全部完成。本人之前对音频和声学毫无经验,两篇文章涉及的方法理论均参考自互联网,肯定有不少错误,欢迎指正。

    参考资料

    [1] 维基百科, 倍频程频带, en.wikipedia.org/wiki/Octave…

    [2] 维基百科, 响度, zh.wikipedia.org/wiki/%E9%9F…

    [3] mathworks,A-weighting Filter with Matlab,www.mathworks.com/matlabcentr…

    [4] 动画效果:网易云音乐APP、MOO音乐APP。感兴趣的同学可以用卡农钢琴版音乐和这两款APP进行对比^_^,会发现区别。

    展开全文
  • 数字音频原理

    千次阅读 2018-12-27 22:57:35
    笔者最近正好做和声音处理有关的项目,突然对音频数字化感兴趣,想了解一下基本原理。可网上文章知识都很散、排版也不美观。因此笔者便决定自己写篇文章,整合一下数字音频的基本知识。 本篇博客为面向大众的...

    笔者博客:mwhitelab.com

    笔者公众号:技术杂学铺


    前言


    笔者最近正好在做和声音处理有关的项目,突然对音频数字化感兴趣,想了解一下基本原理。可网上文章知识都很散、排版也不美观。因此笔者便决定自己写一篇文章,整合一下数字音频的基本知识。


    本篇博客为面向大众的科普性文章。涉及声音原理、音频文件属性、音频格式等方面。预计阅读时间为10分钟。


    1.何为声音


    中学物理中我们知道,声音是物体振动产生的声波。声音通过介质(空气、固体、液体)传入到人耳中,带动听小骨振动,经过一系列的神经信号传递后,被人所感知。


    声音是一种波。物体振动时会使介质(如空气)产生疏密变化,从而形成疏密相见的纵波。


    既然声音是波,那么我们就可以用图的形式来表示它。


    给定空间中某一点,该点的空气疏密随时间的变化如下:


    下图是一个正弦波,其周期为0.002s,频率为500HZ。


    该声音很像视频中的“消音”处理。


    频率(音调):声音1秒内周期性变化的次数


    人耳的听觉范围在20Hz-20kHz。 低频的声音沉闷厚重,高频的声音尖锐刺耳。 高于 20kHz的声音为超声波。


    振幅(响度):声音的大小


    有的时候,我们用分贝(dB)形容声音大小。值得注意的是,dB是一个比值,是一个数值,没有任何单位标注。(功率强度之比的对数的10倍)

     


    2.声音采集与存储


    采样,指把时间域或空间域的连续量转化成离散量的过程 。


    对声音的采样常用麦克风等设备将声音信号转换成电信号,再用模/数转换器将电信号转换成一串用1和0表示的二进制数字(数字信号)。


    我们每秒对声音采样上万次,获得上万个按照时间顺序排列的二进制数字。于是,我们就将连续变化不断的声音转化成了计算机可储存并识别的二进制数字。


    如win10的关机音效音由84700个不同的数字组成。 其中的一段数字如下:(二进制数字已转换为十进制)


    ... 413, 263, 137, 15, -124, -253, -369, -463, -511, -545, -587, -632, -678, -701, -687, -659, -623, -579, -539, -473, -380, -282, -162, -35, 78, 211, 341, 430, 499, 548, 551, ...


    如果用图像的形式表示该音频,则图像如下:(横轴是时间,纵轴为振幅,两个图像分别代表左右声道。由于声音频率较大,所以在图像中的信号不是“正弦”,而是实心的。)

    2.1 采样频率

    采样频率指录音设备在一秒钟内对声音信号的采样次数。采样频率越高,声音的还原就越真实越自然。


    目前主流的采样频率有22.05KHz、44.1KHz、48KHz三种。


    22.05 KHz为FM广播的声音品质,44.1KHz为理论上的CD声音品质。48KHz为人耳可辨别的最高采样频率。


    直观理解:一段连续的声音如下

     

    我们等间隔地对其采样

    最终,我们真正采样到的音频如下

    如下图可见,采样频率越高,我们获得的声音品质越好。


    2.2 量化位数


    我们不可能获得所有时间下声音的强度,因此声音是等时间间隔、离散采样的。同样,采样获得的数据不可能无限的精确,如数字为63.2222222....,这无法在计算机中储存。因此,采样获得的数据同样也是离散的。


    量化位数是音频文件的另一个参数。量化位数越大,声音的质量越高。常用的量化位数有8位、16位和32位。


    量化位数指用几位二进制数来存储采样获得的数据。量化位数为8即指用8位二进制数来存储数据,如00010111


    还是之前的例子,有一段正弦声波,假设量化位数为3,即存储的数据只有000/001/010/011/100/101/110/111这8种可能。


    现在,还是等距离采样,不过采样的点只能落在最近的红线上。

    此时,每个点纵坐标的取值只有二的三次方,即只有8中可能。

    由下图可见,量化位数越大,声音效果越好。


    另外值得注意的是,不同量化位数存储的数据不可直接比较。


    如4位量化位数存储的1111,其十进制是15,8位量化位数存储的10000000,其十进制是64。不是因为64>15,所以后者对应的声音比前者大。而是应该二者分别除以其总取值范围后在比较。


    前者对应的声音比后者大。


    2.3 声道数


    声道分为单声道与双声道。


    单声道即为左右耳听到的声音相同。


    双声道两耳听到的信息不同。相同的声音时间、采样频率和比特率的情况下,双声道文件的存储空间是单声道的两倍。但其会给人空间感,游戏和电影中常采用双声道,可达到“听声辨位”的效果。


    示例声音如下:

    声音可在笔者的博客原文章中听到数字音频原理 - M小白实验室


    3.音频格式


    常见的音频格式有WAV,MP3,ACC等


    3.1 WAV音频格式

    WAV是微软开发的音频格式,支持音频压缩 ,但其常用来存放未经压缩的无损音频。由于未压缩,文件尺寸往往比较大,多用于存储简短的声音片段。

    3.2 MP3音频格式

    MP3是一种音频文件的有损压缩技术,用来大幅度地降低音频数据量。其可在没有明显声音品质受损的情况下,将音频文件压缩成其原文件的十分之一甚至是十二分之一。

    3.3 AAC音频格式

    相对于MP3,AAC格式的音质更佳,文件更小。可压缩至原文件的十八分之一。


    3.4 其他

    • APE 无损压缩,可将文件压缩为原来的一半
    • FLAC 无损压缩


    4. 额外资料

    使用python实现对WAV音频文件的处理

    展开全文
  • 基于MFCC的音频特征的语音关键词识别 参考链接 ##1 引言 梅尔倒谱系数(Mel-scale FrequencyCepstral Coefficients,简称MFCC)。依据人的听觉实验结果来分析语音的频谱,MFCC分析依据的听觉机理有两
  • 一文看懂音频原理

    2021-01-15 03:37:57
    因此笔者便决定自己写篇文章,整合一下数字音频的基本知识。本篇博客为面向大众的科普性文章。涉及声音原理、音频文件属性、音频格式等方面。预计阅读时间为10分钟。1.何为声音中学物理中我们知道,声音是物体振动...
  • 音频均衡器原理及实现

    千次阅读 2021-06-01 17:28:02
    尽管有很多的库可以实现这个功能,但是作为移动端开发者可能对其内在的实现机制并不了解,这篇文章将一步一步构造一个简单的均衡器。 对于均衡器,我们可以选择使用FIR滤波器或者IIR滤波器实现,两者的实现
  • 【通讯原理】Ch.4:数字信号调制

    千次阅读 2020-09-28 19:59:49
    当前使用的最多的是数字信号到模拟信号的转化(如LTE,WIFI,5G),而模拟信号到数字信号的转变实际应用中比较老旧。因为之前模拟信号到数字信号的转变过程就是完全按照1:1进行变化,芯片构造简单,通信效率低。 ...
  • 如果你想先看看最终效果再决定看不看文章 -> 示例代码下载 第篇:一步一步教你实现iOS音频频谱动画() 本文是系列文章中的第二篇,上篇...根据FFT的原理, N个音频信号样本参与计算将产生N/2数据(2...
  • 第一步,将接收波形转换为一个独立数值;第二步,比较该数值与门限值,并且判断发送信号。其次讨论了如何选择最佳门限值的问题,还证明了采用线性滤波器(即匹配滤波器或相关器)可以获得最大信噪比,从而最小化差错...
  • 音频相关参数

    2014-12-19 11:14:27
    瞬态失真是因为扬声器具有一定的惯性质量存在,盆体的震动无法跟上瞬间变化的电信号的震动而导致的原信号与回放音色之间存在的差异。它音箱与扬声器系统中则是更为重要的,直接影响到音质音色的还原程度的,所以这...
  • 视频信号

    千次阅读 2014-04-04 11:52:47
    视频信号是指电视信号、静止图象信号和可视电视图象信号。对于视频信号可支持三种制式:NTSC、PAL、SECAM。 目录 1视频信号分类 ▪ VGA输入接口 ▪ DVI输入接口 ▪ 标准视频输入(RCA)...
  •  视频信号是指电视信号、静止图象信号和可视电视图象信号。对于视频信号可支持三种制式:NTSC、PAL、SECAM。 分类  VGA输入接口:VGA 接口采用非对称分布的15pin 连接方式,其工作原理:是将显存以数字格式...
  • 汪进进 鼎阳硬件设计与测试智库专家组成员频谱分析仪简称频谱仪,是射频工程师最熟悉的种仪器。相对于示波器作为“电子工程师的眼睛”,占据“时域第仪器”甚至“电子测试测量第仪器”之地位,频谱仪堪称是...
  • 移动通信期末复习笔记

    万次阅读 多人点赞 2020-06-29 18:26:13
    .必须使用无线电波进行传播 无线电波传播特性:信号衰落 原因: 能量扩散------>弥漫损耗 地形地物的影响------>阴影效应 直射反射绕射---->多径传播--->多径效应 收发两端的相对运动---->...
  • 数据分析_excel

    2021-08-19 09:26:23
    音频设备可以采集声音,转化为音频数字信号,进而支撑很多有趣的应用,比如iphone的siri,搜狗的语音输入,微信的语音翻译,由此可见,可以记录声音的时代,声音是种数据,而且是种具有强烈时代特征的...
  • 摘要:基于直接数字频率合成技术(DDS),采用单片机实现对DDS芯片AD9852的控制,提出种高精度函数信号发生器的实现方案。重点介绍了单片机与AD9852的硬件接口电路、整个系统的软件设计以及单片机中对48 b频率控制字...
  • 关于-3db截止频率

    2021-04-20 01:17:01
    毕竟这样一个重要的东西应该是有重要的意义的。这个问题也许没有提好,反正高手看到了应该明白吧。尽量你知道的都写出来了,我不是小白,只是有些问题不明白,但是又不知道怎么问才好。所以请高手全面赐教。呵呵。...
  • 《无线调幅广播案例》中,拆解了通过幅度调制AM实现点对多点广播通信的基本原理。 本文,将通过无线对讲机的案例,拆解了通过频率调制FM实现点对多点广播通信的基本原理。 本文的重点: (1)频率调制与解调...
  • — 写前面的话 —笔者从2013年开始进入智能家居领域,这些年磕磕碰碰掉了不少坑,一路走来几乎面对所有要解决的问题都找不到人可以指点,全凭自己交学费。此篇文章的目标是希望能对...
  • 第八章_目标检测

    2021-06-13 17:15:42
    特征图上滑动一个3×3的卷积核,以使用卷积网络(如下所示的ZF网络)构建与类别无关的候选区域。其他深度网络(如VGG或ResNet)可用于更全面的特征提取,但这需要以速度为代价。ZF网络最后会输出256个,它们将...
  • 当直流输入信号两个相邻输出码之间产生变迁时,甚至是最精密的直流转换器中只是一个很小的电路噪声其输出端保证出现2个数码偏差。这是模数转换领域中一个生动的事实。类似这种情况,许多实例中...
  • Linux-3.10-x86_64 内核配置选项简介

    万次阅读 2013-12-23 18:25:23
    本文作者是位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。 无担保:本文作者不保证作品内容准确无误,亦不承担任何由于使用此文档所导致的损失。 自由使用:任何人都可以自由的...
  • php杂谈【基础篇】之_7.PHP涉及的所有英文单词拦路虎 PHP再火,也会让部同学心生畏惧,因为看到编辑器中那串串英文单词,担心自己英文不好,从而对能学会PHP的决心产生动摇。其实大可不必,英文学习PHP过程中...
  • 来源:腾讯研究院5月21日,2019腾讯全球数字生态大会昆明盛大开幕。主峰会上,腾讯研究院发布《数字中国指数报告(2019)》(以下简称“报告”),推出2019数字中...
  • 单片机外围电路设计攻略

    千次阅读 2020-03-07 22:07:23
    01 — 单片机外围电路设计之:电阻 ...电阻(Resistance,通常“R”表示),物理学中表示导体对电流阻碍作用的大小。导体的电阻越大,表示导体对电流的阻碍作用越大。不同的导体,电阻一般不同,电阻是...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 268
精华内容 107
关键字:

把落在某个时间范围内的连续变化的音频信号的幅度值用一个确定的数值表示,称为音频信号的______。

友情链接: vbhebin.rar