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

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

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

Описание методов измерения FR

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

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

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

В этом примере вы измеряете FR, проигрывая аудиосигнал через audioDeviceWriter а затем запись сигнала через audioDeviceReader. Шлейфный кабель используется для физического подключения аудиовыходного порта звуковой карты к ее audio-входному порту.

Аудио устройство Reader и Средства записи

Чтобы начать, используйте audioDeviceReader Системные object™ и audioDeviceWriter Системный объект для соединения с аудио устройством. Этот пример использует UR44 Штейнберга аудио устройства с частотой дискретизации 48 кГц и buffer size 1024 выборок.

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);

Тестовый сигнал

Тестовый сигнал является синусоидой с 1024 выборок на систему координат и начальной частотой 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');

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