Частотная характеристика (FR) является важным инструментом для охарактеризования точности аудио устройства или компонента.
Этот пример требует аудио устройства, способного к записи и проигрыванию аудио и соответствующего драйвера аудио. Чтобы узнать больше как записи в качестве примера и аудиоданные игр, смотрите audioDeviceReader
и audioDeviceWriter
.
Измерение FR сравнивает уровни на выходе аудио устройства к известным уровням на входе. Основное измерение FR состоит из двух или трех тестовых тонов: середина, высоко, и низко.
В этом примере вы выполняете слышимую область значений измерение FR путем развертки синусоиды от самой низкой частоты в области значений к самому высокому. Плоский ответ указывает на аудио устройство, которое одинаково отвечает на все частоты.
В этом примере вы измеряете FR путем проигрывания звукового сигнала через audioDeviceWriter
и затем записи сигнала через audioDeviceReader
. Петлевой кабель используется, чтобы физически соединить аудио порт звуковой карты к ее аудио - в порте.
Чтобы запуститься, используйте Систему audioDeviceReader
object™ и Системный объект audioDeviceWriter
, чтобы соединиться с аудио устройством. Этот пример использует аудио устройство Steinberg UR44 с 48 кГц, выбирающими уровень и buffer size 1 024 выборок.
sampleRate = 48e3; device = 'Yamaha Steinberg USB ASIO'; aDR = audioDeviceReader( ... 'SampleRate', sampleRate, ... 'Device', device, ... 'Driver', 'ASIO', ... 'BitDepth', '16-bit integer', ... 'ChannelMappingSource', 'Property', ... 'ChannelMapping', 1); aDW = audioDeviceWriter( ... 'SampleRate', sampleRate, ... 'Device', device, ... 'Driver', 'ASIO', ... 'BitDepth', '16-bit integer', ... 'ChannelMappingSource', 'Property', ... 'ChannelMapping', 1);
Тестовый сигнал является синусоидой с 1 024 выборками на кадр и начальную частоту 0 Гц. Частота увеличена с шагом на 50 Гц, чтобы развернуть слышимую область значений.
samplesPerFrame = 1024; sineSource = audioOscillator( ... 'Frequency', 0, ... 'SignalType', 'sine', ... 'SampleRate', sampleRate, ... 'SamplesPerFrame', samplesPerFrame);
Используйте dsp.SpectrumAnalyzer
, чтобы визуализировать FR вашей аудио системы ввода-вывода. 20 средних значений оценки спектра используются в течение эксперимента, и пропускная способность разрешения установлена в 50 Гц. Частота дискретизации установлена в 48 кГц.
RBW = 50; Navg = 20; scope = dsp.SpectrumAnalyzer( ... 'Method', 'Filter bank', ... 'SampleRate', sampleRate, ... 'RBWSource', 'Property', 'RBW', RBW, ... 'SpectralAverages', Navg, ... 'FrequencySpan', 'Start and stop frequencies',... 'StartFrequency', 0, ... 'StopFrequency', sampleRate/2, ... 'ReducePlotRate', false, ... 'PlotAsTwoSidedSpectrum', false, ... 'FrequencyScale', 'Log', ... 'PlotMaxHoldTrace', true, ... 'ShowLegend', true, ... 'YLimits', [-110 20],... 'YLabel', 'Power', ... 'Title', 'Audio Device Frequency Response');
Чтобы избежать влияния времени установки на измерении FR, предварительно запустите свой аудио цикл в течение 5 секунд.
Если фактическое измерение FR запускается, разверните тестовый сигнал через слышимый частотный диапазон. Используйте спектр анализатор, чтобы визуализировать FR.
tic while toc < 5 x = sineSource(); aDW(x); y = aDR(); scope(y); end count = 1; readerDrops = 0; writerDrops = 0; while true if count == Navg newFreq = sineSource.Frequency + RBW; if newFreq > sampleRate/2 break end sineSource.Frequency = newFreq; count = 1; end x = sineSource(); writerUnderruns = aDW(x); [y,readerOverruns] = aDR(); readerDrops = readerDrops + readerOverruns; writerDrops = writerDrops + writerUnderruns; scope(y); count = count + 1; end release(aDR); release(aDW); release(scope);
Спектр анализатор показывает два графика. Первый график является оценкой спектра последних записанных данных. Второй график является максимальной мощностью спектр анализатор, вычисленный для каждого интервала частоты как синусоида, развернутая по спектру. Чтобы получить максимальное хранение отображают на графике данные и вектор частоты, можно использовать объектный функциональный getSpectrumData
и построить максимальную трассировку хранения только.
data = getSpectrumData(scope); freqVector = data.FrequencyVector{1}; freqResponse = data.MaxHoldTrace{1}; semilogx(freqVector,freqResponse); xlabel('Frequency (Hz)'); ylabel('Power (dBm)'); title('Audio Device Frequency Response');
График частотной характеристики указывает, что аудио устройство, протестированное в этом примере, имеет плоскую частотную характеристику в слышимой области значений.