利用MathWorks测量音频设备的频率响应

  • 348

频率响应(FR)是表征音频设备或组件保真度的重要参数。

此示例需要能够记录和播放音频的设备以及合适的音频驱动器。要了解有关示例如何记录和播放音频数据的更多信息,请参阅audioDeviceReaderaudioDeviceWriter

FR测量技术说明

FR测量将音频设备的输出电平与已知的输入电平进行比较。基本FR测量由两个或三个测试频率组成:中、高和低频。

在本例中,通过将正弦波从范围内的最低频率扫到最高频率来执行听觉范围FR测量。平坦响应表示音频设备对所有频率的响应相同。

设置实验

在本例中,通过audioDeviceWriter播放音频信号,然后通过audioDevice Reader录制信号,从而测量FR。对录线用于将声卡的音频输出端口物理连接到其音频输入端口。

利用MathWorks测量音频设备的频率响应

音频设备读写器

要启动,请使用audioDeviceReader系统对象™ 和audioDeviceWriter系统对象,以连接到音频设备。本例使用Focusrite Scarlett 2i2音频设备,采样率为48 kHz。

采样率 = 48e3;
device = "Focusrite USB ASIO" ;

aDR = audioDeviceReader( ... 
      SampleRate=sampleRate, ... 
      Device=device, ... 
      Driver= "ASIO" , ... 
      BitDepth= "16-bit integer" , ... 
      ChannelMappingSource= "Property" , .. .
      通道映射=1);

aDW = audioDeviceWriter( ... 
      SampleRate=sampleRate, ... 
      Device=device, ... 
      Driver= "ASIO" , ... 
      BitDepth= "16-bit integer" , ... 
      ChannelMappingSource= "Property" , .. .ChannelMapping 
      =1);

测试信号

测试信号是正弦波,每帧1024个样本,初始频率为0Hz。频率以50 Hz的增量增加,扫过可听范围(20Hz-20kHz)。

每帧样本 = 1024;
sineSource = audioOscillator( ... 
      Frequency=0, ... 
      SignalType= "sine" , ... 
      SampleRate=sampleRate, ... 
      SamplesPerFrame=samplesPerFrame);

频谱分析仪

使用spectrumAnalyzer可视化音频I/O系统的FR。在整个实验中使用频谱估计的20个平均值,并且将分辨率带宽设置为50Hz。采样频率设置为48 kHz。

分辨率宽度 = 50;
导航= 20;

scope = spectrumAnalyzer( ... 
      SampleRate=sampleRate, ... 
      RBWSource= "property" ,RBW=RBW, ... 
      AveragingMethod= "exponential" , ... 
      ForgettingFactor=0, ... 
      FrequencySpan= "开始和-停止频率” , ... 
      StartFrequency=0, ... 
      StopFrequency=sampleRate/2, ... 
      PlotAsTwoSidedSpectrum=false, ... 
      FrequencyScale= "log" , ... 
      PlotMaxHoldTrace=true, ... 
      ShowLegend=true , ...
      YLimits=[-110 20], ... 
      YLabel= "Power" , ... 
      Title= "音频设备频率响应" );

频率响应测量回路

为了避免设置时间对FR测量的影响,请预先运行音频循环5秒。

一旦实际FR测量开始,就在可听见的频率范围内扫描测试信号。使用频谱分析仪对FR进行可视化。

tic
 while toc < 5
    x = 正弦源 ();
    aDW(x);
    y = aDR();
    范围(y);    
结尾
        
计数 = 1;
readerDrops = 0;
writerDrops = 0;

如果count == Navg则为真
    
        newFreq = sineSource.Frequency + RBW;
        如果newFreq > sampleRate/2
            中断
        结束
        sineSource.Frequency = newFreq;
        计数 = 1;
    结尾
    x = 正弦源 ();
    writerUnderruns = aDW(x);
    [y,readerOverruns] = aDR();
    readerDrops = readerDrops + readerOverruns;        
    writerDrops = writerDrops + writerUnderruns;
    范围(y);        
    计数 = 计数 + 1;
结尾

发布(aDR)
释放(aDW)
发布(范围)

利用MathWorks测量音频设备的频率响应

频率响应测量结果

频谱分析仪显示了两幅图。第一个图是对最后记录的数据的频谱预测。第二个曲线图是作为正弦波扫过频谱后频谱分析仪为每个频率点计算的幅值。要获得最大保持图数据(幅值)和频率,可以使用对象函数getSpectrumData并仅绘制最大保持轨迹。

利用MathWorks测量音频设备的频率响应

频率响应图显示在该示例中测试的音频设备在可听范围内具有平坦的频率响应。

文章来源:翻译自Measure Frequency Response of an Audio Device

  • 本文由 发表于 2023年3月24日
评论  0  访客  0

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: