主要内容

测量音频设备的频率响应

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

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

FR测量技术的描述

FR测量将音频设备的输出电平与已知的输入电平进行比较。一个基本的FR测量包括两个或三个测试音调:中、高、低。

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

设置实验

在此示例中,通过播放音频信号来测量FRaudioDeviceWriter然后通过录制信号audiodevicereader.。环回电缆用于将声卡的音频输出端口物理连接到其音频入口端口。

音频设备阅读器和写入器

要开始,使用audiodevicereader.系统对象™和audioDeviceWriter要连接到音频设备的系统对象。本例使用的是Steinberg UR44音频设备,采样率为48khz,缓冲区大小为1024个样本。

sampleRate = 48 e3;设备='Yamaha Steinberg USB Asio';aDR = audioDeviceReader (“SampleRate”sampleRate,“设备”设备,“司机”,“ASIO”,“BitDepth”,的16位整数,'channelmappingsource',“属性”,“ChannelMapping”1);aDW = audioDeviceWriter (“SampleRate”sampleRate,“设备”设备,“司机”,“ASIO”,“BitDepth”,的16位整数,'channelmappingsource',“属性”,“ChannelMapping”1);

测试信号

测试信号是一个正弦波,每帧1024个样本,初始频率为0赫兹。频率增加50赫兹以扫过可听范围。

samplesperframe = 1024;Sinesource =窥探机('频率'0,“SignalType”,的正弦,“SampleRate”sampleRate,“SamplesPerFrame”, samplesPerFrame);

频谱分析仪

使用dsp.SpectrumAnalyzer可视化音频I/O系统的FR。在整个实验中使用20个平均值的频谱估计和分辨率带宽设置为50赫兹。采样频率设置为48 kHz。

RBW = 50;Navg = 20;范围= dsp.spectrumanalyzer(“方法”,滤波器组的,“SampleRate”sampleRate,“RBWSource”,“属性”,'rbw',rbw,“SpectralAverages”,Navg,“FrequencySpan”,“启动和停止频率”,“StartFrequency”0,'停止'sampleRate / 2,“ReducePlotRate”,假,'plotastwosidedspectrum',假,“FrequencyScale”,“日志”,'plotmaxholdtrace',真的,“ShowLegend”,真的,“YLimits”,[ -  110 20],'ylabel',“权力”,'标题',“音频设备频率响应”);

频率响应测量环

为避免设置时间对FR测量的影响,Prerun您的音频循环5秒钟。

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

抽搐toc < 5 x = sineSource();aDW (x);y = aDR ();范围(y);结束数= 1;readerDrops = 0;writerDrops = 0;真正如果count == navg newfreq = sineource.frequency + RBW;如果newfreq> samplerge / 2打破结束sineource.frequency = newfreq;count = 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);包含(的频率(赫兹));ylabel ('Power(DBM)');标题(“音频设备频率响应”);

频率响应图表明,本例中测试的音频设备在可听范围内具有平坦的频率响应。