exponenta event banner

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

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

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

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

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

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

Эксперимент по настройке

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

Устройство чтения и записи аудиоустройств

Для запуска используйте audioDeviceReader Системные object™ и audioDeviceWriter Системный объект для подключения к аудиоустройству. В этом примере используется аудиоустройство Штейнберга UR44 с частотой дискретизации 48 кГц и размером буфера 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');

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