Измерьте частотную характеристику аудио устройства

Частотная характеристика (FR) является важным инструментом для охарактеризования точности аудио устройства или компонента.

Этот пример требует аудио устройства, способного к записи и проигрыванию аудио и соответствующего драйвера аудио. Чтобы узнать больше как записи в качестве примера и аудиоданные игр, смотрите audioDeviceReader и audioDeviceWriter.

Описание техник измерений FR

Измерение FR сравнивает уровни на выходе аудио устройства к известным уровням на входе. Основное измерение FR состоит из двух или трех тестовых тонов: середина, высоко, и низко.

В этом примере вы выполняете слышимую область значений измерение FR путем развертки синусоиды от самой низкой частоты в области значений к самому высокому. Плавный ответ указывает на аудио устройство, которое одинаково отвечает на все частоты.

Эксперимент Setup

В этом примере вы измеряете 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');

График частотной характеристики указывает, что аудио устройство, протестированное в этом примере, имеет плоскую частотную характеристику в слышимой области значений.