Частотная характеристика (FR) является важным инструментом для характеристики точности аудио устройства или компонента.
Этот пример требует аудио устройство, способную записывать и игру аудио и соответствующий аудио драйвер. Дополнительные сведения о том, как пример записей и воспроизводит аудио данных, см. в разделе audioDeviceReader
и audioDeviceWriter
.
FR- измерения сравнивает уровни выхода аудио устройства с известными уровнями входа. Базовое измерение FR состоит из двух или трех тестовых тонов: среднего, высокого и низкого.
В этом примере вы выполняете звуковую область значений измерение FR, протягивая синусоиду от самой низкой частоты в область значений до самой высокой. A плавного ответа указывает аудио устройство, который одинаково реагирует на все частоты.
В этом примере вы измеряете FR, проигрывая аудиосигнал через audioDeviceWriter
а затем запись сигнала через audioDeviceReader
. Шлейфный кабель используется для физического подключения аудиовыходного порта звуковой карты к ее audio-входному порту.
Чтобы начать, используйте 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');
График частотной характеристики указывает, что аудио устройство, протестированное в этом примере, имеет плоскую частотную характеристику в звуковую область значений.