Частотная характеристика (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');
График частотной характеристики указывает, что аудио устройство, протестированное в этом примере, имеет плоскую частотную характеристику в слышимой области значений.