主要内容

测量音频设备的频率响应

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

此示例需要一个能够录制和播放音频和合适音频驱动程序的音频设备。要了解有关示例记录和播放音频数据的更多信息,请参见AudioDevicereDerAudioDeviceWriter

FR测量技术的描述

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

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

设置实验

在此示例中,您可以通过播放音频信号来测量FRAudioDeviceWriter然后记录信号AudioDevicereDer。环回电缆用于实际将声卡的音频端口连接到其音频端口。

音频设备阅读器和作家

首先,使用AudioDevicereDer系统对象™和AudioDeviceWriter系统对象连接到音频设备。该示例使用具有48 kHz采样率的Steinberg UR44音频设备,缓冲尺寸为1024个样品。

采样= 48e3;设备='Yamaha Steinberg USB ASIO';ADR = AudioDevicereDer(...'采样率',采样率,...'设备',设备,...'司机',,,,'asio',,,,...'bitdepth',,,,'16 -bit Integer',,,,...“ Channelmappingsource”,,,,'财产',,,,...“频道图”,1);adw = audiodevicewriter(...'采样率',采样率,...'设备',设备,...'司机',,,,'asio',,,,...'bitdepth',,,,'16 -bit Integer',,,,...“ Channelmappingsource”,,,,'财产',,,,...“频道图”,1);

测试信号

测试信号是一个正弦波,每帧1024个样品,初始频率为0 Hz。频率以50 Hz的增量增加,以扫描可听见的范围。

SampleSperFrame = 1024;sineSource =听觉振荡器(...'频率',0,...“信号类型”,,,,'正弦',,,,...'采样率',采样率,...“ SampleSperFrame”,SampleSperFrame);

频谱分析仪

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

rbw = 50;navg = 20;范围= dsp.spectrumanalyaler(...'方法',,,,“过滤库”,,,,...'采样率',采样率,...'rbwsource',,,,'财产',,,,'rbw',rbw,...“光谱”,navg,...“频率”,,,,“开始和停止频率”,,,,...“ starterfquency',0,...“停止频率”,采样/2,...“减少斑纹”,错误的,...“ plotastwosidedspectrum”,错误的,...“频率计算”,,,,'日志',,,,...“ PlotMaxholdTrace”,真的,...“ Showlegend”,真的,...'ylimits',[-110 20],...'ylabel',,,,'力量',,,,...'标题',,,,“音频设备频率响应”);

频率响应测量循环

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

一旦实际的FR测量开始,就可以扫描测试信号穿过听觉频率范围。使用频谱分析仪可视化FR。

抽动尽管toc <5 x = sinesource();adw(x);y = adr();范围(y);结尾计数= 1;ReaderDrops = 0;WriterDrops = 0;尽管真的如果count == navg newfreq = sineSource.fquency + rbw;如果newfreq>采样/2休息结尾sineSource.frequency = newfreq;计数= 1;结尾x = sinesource();writerunderruns = adw(x);[y,readeroverruns] = adr();ReaderDrops = ReaderDrops + ReaderOverRuns;WriterDrops = WriterDrops + Writerunderruns;范围(y);count = count + 1;结尾版本(ADR)版本(ADW)版本(范围)

频率响应测量结果

频谱分析仪显示了两个图。第一个图是最后记录数据的频谱估计。第二个图是每个频率箱计算的频谱分析仪,正弦波扫过光谱。要获取最大保留图数据和频率向量,您可以使用对象函数getspectrumdata并仅绘制最大保持跟踪。

data = getspectrumdata(范围);freqVector = data.frequencyVector {1};freqresponse = data.maxholdTrace {1};semilogx(freqvector,freqresponse);Xlabel(“频率(Hz)”);ylabel(“电力(DBM)”);标题(“音频设备频率响应”);

频率响应图表明在此示例中测试的音频设备在听觉范围内具有扁平频率响应。