测量音频设备的频率响应
频率响应(FR)是表征音频设备或组件保真度的重要工具。
本例需要一个能够录制和播放音频的音频设备和一个适当的音频驱动程序。要了解有关示例如何记录和播放音频数据的更多信息,请参见audioDeviceReader
而且audioDeviceWriter
.
FR测量技术描述
FR测量将音频设备的输出电平与已知的输入电平进行比较。一个基本的FR测量包括两个或三个测试音调:中、高和低。
在本例中,您通过从范围内的最低频率扫到最高频率的正弦波来执行可听范围FR测量。平坦响应表示音频设备对所有频率的响应相同。
设置实验
在本例中,您通过播放音频信号来测量FRaudioDeviceWriter
然后记录信号通过audioDeviceReader
.环回电缆用于物理连接声卡的音频输出端口和声卡的音频输入端口。
音频设备阅读器和写入器
首先,使用audioDeviceReader
系统对象™和audioDeviceWriter
系统对象连接到音频设备。本例使用Focusrite Scarlett 2i2音频设备,采样率为48 kHz。
sampleRate = 48e3;设备=Focusrite USB ASIO;aDR = audioDeviceReader(...SampleRate = SampleRate,...设备=设备,...司机=“ASIO”,...BitDepth =“16位整数,...ChannelMappingSource =“财产”,...ChannelMapping = 1);aDW = audioDeviceWriter(...SampleRate = SampleRate,...设备=设备,...司机=“ASIO”,...BitDepth =“16位整数,...ChannelMappingSource =“财产”,...ChannelMapping = 1);
测试信号
测试信号是每帧1024个采样的正弦波,初始频率为0hz。频率以50赫兹的增量增加,以扫描可听到的范围。
samplesPerFrame = 1024;sineSource = audioooscillator (...频率= 0,...SignalType =“正弦”,...SampleRate = SampleRate,...SamplesPerFrame = SamplesPerFrame);
频谱分析仪
使用简介
来可视化音频I/O系统的FR。在整个实验中使用频谱估计的20个平均值,并将分辨率带宽设置为50 Hz。采样频率设置为48khz。
RBW = 50;Navg = 20;范围=光谱分析仪(...SampleRate = SampleRate,...RBWSource =“财产”RBW = RBW,...AveragingMethod =“指数”,...ForgettingFactor = 0,...FrequencySpan =“start-and-stop-frequencies”,...StartFrequency = 0,...StopFrequency = sampleRate / 2,...PlotAsTwoSidedSpectrum = false,...FrequencyScale =“日志”,...PlotMaxHoldTrace = true,...ShowLegend = true,...YLimits = 20 [-110],...YLabel =“权力”,...Title =“音频设备频率响应”);
频率响应测量回路
为了避免设置时间对FR测量的影响,请预先运行音频循环5秒。
一旦实际的FR测量开始,扫描测试信号通过可听到的频率范围。使用频谱分析仪可视化FR。
抽搐而toc < 5 x = sineSource();aDW (x);y = aDR();范围(y);结束Count = 1;readerDrops = 0;writerDrops = 0;而真正的如果count == Navg newFreq = sineSource。频率+ RBW;如果newFreq > sampleRate/2打破结束sineSource。频率= 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 (“权力(dBm)”);标题(“音频设备频率响应”);
频率响应图表明,在此示例中测试的音频设备在可听范围内具有平坦的频率响应。