频率响应(FR)是表征音频设备或元件保真度的重要工具。
本例需要一个能够录制和播放音频的音频设备和一个适当的音频驱动程序。要了解有关示例如何记录和播放音频数据的更多信息,请参见audioDeviceReader
和audioDeviceWriter
.
FR测量将音频设备的输出电平与已知的输入电平进行比较。一个基本的FR测量包括两个或三个测试音调:中,高,低。
在这个例子中,您通过扫描正弦波从范围中的最低频率到最高频率来执行可听范围FR测量。平坦响应表示音频设备对所有频率响应相同。
在这个例子中,您通过播放音频信号来测量FRaudioDeviceWriter
然后记录下信号audioDeviceReader
.使用环回电缆将声卡的音频输出端口物理连接到音频输入端口。
首先,使用audioDeviceReader
系统对象™和audioDeviceWriter
连接到音频设备的系统对象。本例使用一个Steinberg UR44音频设备,采样率为48 kHz,缓冲区大小为1024。
sampleRate = 48 e3;设备=“雅马哈斯坦伯格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 = audioOscillator (...“频率”0,...“SignalType”,的正弦,...“SampleRate”sampleRate,...“SamplesPerFrame”, samplesPerFrame);
使用dsp。简介
可视化您的音频I/O系统的FR。在整个实验中使用20个频谱估计的平均值,分辨率带宽设置为50 Hz。采样频率设置为48 kHz。
RBW = 50;Navg = 20;= dsp范围。简介(...“方法”,滤波器组的,...“SampleRate”sampleRate,...“RBWSource”,“属性”,“RBW”RBW,...“SpectralAverages”Navg,...“FrequencySpan”,“启动和停止频率”,...“StartFrequency”0,...“StopFrequency”sampleRate / 2,...“ReducePlotRate”假的,...“PlotAsTwoSidedSpectrum”假的,...“FrequencyScale”,“日志”,...“PlotMaxHoldTrace”,真的,...“ShowLegend”,真的,...“YLimits”20 [-110],...“YLabel”,“权力”,...“标题”,“音频设备频率响应”);
为了避免设置时间对FR测量的影响,预运行您的音频循环5秒。
一旦实际的FR测量开始,通过可听到的频率范围扫描测试信号。使用频谱分析仪可视化FR。
抽搐而toc < 5 x = sineSource();aDW (x);y = aDR ();范围(y);结束数= 1;readerDrops = 0;writerDrops = 0;而真正的如果newFreq = sineSource. count == Navg。频率+ RBW;如果newFreq > sampleRate / 2打破结束sineSource。频率= 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);包含(的频率(赫兹));ylabel (“权力(dBm)”);标题(“音频设备频率响应”);
频率响应图表明,在本例中测试的音频设备在可听范围内具有平坦的频率响应。