Анализ спектра звукового сигнала с помощью аудиокарты PC
Добавил(а) microsin
Для чего нужен звуковой анализатор спектра? Ниже приведено несколько примеров, что Вы можете делать с помощью программы анализа спектра и звуковой карты компьютера.
Обычный режим для отображения звукового сигнала и его гармоник. Можно измерить относительные уровни в децибелах, одна клетка соответствует 10 dB. Также можно проверить точность аттенюатора RF, если отключить АРУ тракта RX и настроиться на стабильный сигнал CW.
Ниже показан пиковый режим (Peak) для отображения частотной характеристики полосового фильтра. Медленно перестраивайте приемник при наличии стабильного CW-сигнала от кварцевого генератора или калибратора.
Режим усреднения (Average) для подстройки лестничного фильтра подачей на его вход источника шума. На осциллограмме оранжевым цветом показана бесполезная кривая режима Normal. Режим Average дает зеленым цветом кривую характеристики фильтра. Это первая половина измерения:
Ниже показано регулирование степени усреднения в процессе настройки (вторая половина измерения). Подключите Ваш приемник к источнику шума (или к антенне), и начните анализ с малым коэффициентом усреднения 1024 выборки (оранжевая кривая). Если кривая подстроена близко к желаемой, увеличьте значение усреднения (зеленая кривая). Кривая будет точнее, но настройку придется делать медленнее.
Измерение кривой характеристики фильтра для подавления соседнего канала. Кривая диапазонного фильтра показана желтым графиком, зеленый график показывает подавленный диапазон соседнего канала (подавление больше 30 dB). Измерение проведено по частоте CW-сигнала в режиме удержания максимума (Max Hold).
Измерение стабильности частоты гетеродина. Оценка частоты звука происходила в течение 5 минут в режиме удержания максимума. Уход частоты составил приблизительно 5 Гц.
Ниже показана кривая широкополосного фильтра CW (оранжевая) и подавленный соседний канал (зеленая кривая) 4-диапазонного CW трансивера с фазовым методом подавления соседнего канала. Подавление почти 40 dB без кварцевого фильтра! Измерено путем перестройки сигнала CW в режиме Max Hold.
The NARROW CW filter curve (orange) and the suppressed sideband (green) of the same CW transceiver. Also 40 dB!
Регенеративный приемник в режиме широкой и узкой полосы. Измерено на атмосферном шуме в режиме усреднения (average 100).
Фильтр SSB и подавление боковой полосы старого приемника SSR-1 на керамических фильтрах 455 кГц. Не так уж плохо для первой коротковолновой связи QSO!
Лестничный фильтр 36 МГц нового коротковолнового приемника, настроенный на максимальное подавление соседнего канала, зеленая кривая показывает это подавление:
Лестничный фильтр 36 МГц нового коротковолнового приемника, настроенный на максимально плоскую вершину полосы пропускания. Экран переключен в черно-белый режим (Black and White, B/W).
Фильтр SSB (оранжевая кривая) и CW (зеленая кривая) старого трансивера TS520:
Этот звук абсолютно не слышим, однако он все еще по уровню на 20 dB выше полки шумов:
Лестничный фильтр 48 МГц коротковолнового приемника и кривая подавления боковой полосы (зеленая кривая) в USB:
Тот же самый фильтр, теперь в LSB. Подавление соседнего диапазона лестничного фильтра не очень хорошее, если частота BFO на нижнем срезе фильтра (см. картинку USB).
Звуковые фильтры CW (с широкой и узкой полосой) коротковолнового приемника, центральная частота требует подстройки:
Широкая и узкая полоса звукового фильтра трансивера. Режим широкополосного фильтра также подходит для приема SSB.
PA2OHH сделал простую программу анализатора спектра с точной dB-шкалой (уровень в децибелах), функциями отображения максимума и усреднения, которую можно использовать для оценки и настройки полосовых фильтров. Программа написана на Visual Basic, и опубликована в скомпилированном виде (exe) и с исходным кодом (см. [1]).
[Как использовать программу анализатора спектра]
Оцифровка сигнала (Sampling). Параметр Rate задает частоту выборок (частота дискретизации сигнала). Она должны быть как можно выше анализируемых частот, потому что спектр частот, близких к Rate/2, может отображаться неправильно. Можно уменьшить Rate, если Вы хотите использовать очень высокую разрешающую способность по частоте, но обеспечьте условия оцифровки, когда на входе звуковой карты нет частоты выше Rate/2. Для этой цели возможно потребуется ФНЧ.
Параметр Samples (количество анализируемых выборок сигнала) может быть выбран в соответствии с желаемой разрешающей способностью. Меньшее значение дает меньшую разрешающую способность и более быстрое обновление экрана. Большее значение повышает разрешающую способность (сопоставимо с низкой полосой пропускания анализатора), но с меньшей частотой обновления экрана.
Отображение (Trace). Когда выбран вариант Normal, график спектрограммы обновляется с реальными значениями входного сигнала. Этот режим очень подходит для измерения гармоник, изменения уровня в dB, и т. п.
Вариант Max Hold обновляет трассировку только новым значением, если новое значение в текущей позиции больше, чем старое. Этот режим подходит для записи максимальных значений в течение определенного времени, или для измерения кривых характеристик фильтра, путем медленной перестройки приемника на непрерывной несущей (АРУ должно быть выключено). Очистка диаграммы Max Hold осуществляется выбором Normal.
Режим Average обновляет диаграмму частично, разницей между старым и новым значением в текущей позиции. Это дает эффект усреднения. For a value of 100, the new value is changed by 1/100 of the difference (in dB). Режим очень полезен для измерений шумного источника сигнала, шум усредняется, и получается более чистая линия графика спектра вместо большого количества пиков нарастания и спада.
Галочка Overwrite включает отображение, когда экран не очищается, и показываются все старые и новые графики спектра.
Запись спектра в память (Trace 2 Memory). Кнопка Store Trace 2 сохраняет текущую диаграмму спектра в память трассировки.
Кнопка Trace 1 - Trace 2 ON отобразит зеленым графиком разность между текущим входным значением и значением из памяти. Это можно использовать для того, чтобы увидеть какие-то изменения.
Яркость (Brightness) и специальные экраны (Special screens). Эти опции дают возможность менять яркость сетки и фона, выбрать малый экран диаграммы или показывать черно-белую диаграмму вместо цветной. Автор использует это для создания картинок результатов различных измерений. Для сохранения экрана в буферную память Windows нажмите кнопку Print Screen (чтобы сохранить только картинку текущего окна удерживайте при этом клавишу Ctrl), и после этого вставьте картинку в новый документ MS Paint или другого графического редактора. Черно-белый вариант B/W (Black and White) картинки подойдет для печати на лазерном принтере.
Слайдеры Ref, T2 offset, 10 dB/div, T=0 ms. Ref позволяет сместить график вверх и вниз на определенное значение в децибелах (dB).
T2 offset настраивает смещение между графиками (зеленым текущим графиком и оранжевым, который взят из памяти трассировки).
dB/div меняет цену деления координатной сетки (сколько децибел в одной клетке).
T=0 ms это специальная функция. Она задает время паузы между двумя чтениями диаграммы. Некоторые компьютеры работают некорректно при T=0. Некоторые медленно делают обработку на определенном значении Samples, другие показывают какие-то случайные графики. Если Вы столкнулись с такой проблемой, установите T в значение 50 или 100 ms (или в большее значение, когда выбрано большое количество выборок Samples), чтобы обойти проблему корректного отображения спектра. Это также подойдет, если Вы хотите получить низкую скорость обновления отображения спектра.
F-Min, F-Max и кнопка Start. Просто введите начальную минимальную и конечную максимальную анализируемую частоту в Гц (помните, что F-Max не должна превышать Samplerate/2), нажмите кнопку Start.
Как подключить сигнал и управлять звуковой картой. Подключите выход Вашего приемника (НЧ выход трансивера) ко входу звуковой карты через резистор 10 кОм. Параллельно входу звуковой карты подключите резистор 1 кОм, в результате получится делитель напряжения с коэффициентом 1/10. Если сигнал на выходе приемника слабый, то резистор на 1 кОм не подключайте, но все равно оставьте резистор на 10 кОм, чтобы избежать случайного повреждения звуковой карты.
С помощью микшера Windows (Windows Volume Control) выберите правильный вход. Это делается через свойства записи (Options -> Properties -> Recording). Важный момент: если используете линейный вход звуковой карты, то отключите микрофонный выход и все другие входы, чтобы снизить уровень посторонних шумов.
[Улучшенная версия программы спектроанализатора]
Эта программа также имеет шкалу уровней на диаграмме спектра, так что Вы можете точно выполнять измерение соотношение в децибелах (dB) разных составляющих спектра, например проанализировать характеристику фильтра CW или SSB приемника. Подключите генератор RF к приемнику. Установите вид диаграммы в положение трассировки максимума (Trace 1 -> Max Hold), и медленно перестраивайте частоту генератора RF в диапазоне приема. На диаграмме Вы увидите частотную характеристику приемника. Однако можно получить довольно хорошие результаты, установив трассировку в режим усреднения (Trace 1 -> Average), принимая шумы на антенну. Функция Average покажет средний уровень шума с соответствующей характеристикой, она будет отражать полосу пропускания приемника. Таким способом можно настроить кварцевый фильтр.
Можно также измерить подавление сигнала по соседнему каналу. Подключите генератор RF ко входу приемника. Установите режим Trace 1 -> Max Hold, и медленно перестраивайте частоту генератора RF в желаемом диапазоне, где хотите измерить подавление по соседнему каналу. Сохраните полученную характеристику (Trace 2 Memory -> Store). Сбросьте текущую трассировку краткой установкой в состояние Trace 1 -> Normal, снова перейдите в Trace 1 -> Max Hold, и теперь перестраивайте генератор в диапазоне, где нужно измерить подавление по соседнему каналу. Разница между показанной и запомненной трассировкой в децибелах покажет подавление по соседнему каналу.
Если у Вас простой приемник прямого преобразования без автоматической регулировки усиления, то увидите, к примеру, как меняется сигнал из-за ухудшения прохождения.
На графиках ниже был уменьшен диапазон шкалы частот с целью наглядности. Оранжевая линия показывает сигнал, как его выводила старая версия программы. Зеленая линия показывает, как отображает спектр улучшенная версия.
Оригинальная программа была написана на Visual Basic 6, и затем была переписана на Microsoft Visual Basic 2008, с использованием библиотек Microsoft .NET Framework. Вам не обязательно вдаваться в такие тонкости, просто следует знать, что у старой программы были несколько проблем, которые были исправлены с помощью путем Zero Padding (дополнение нулями) и FFT window (окно БПФ).
Zero padding. Как Вы можете увидеть, старая версия на оранжевой кривой (сохраненный спектр) не показывала максимум. Причина тут в том, что фактически частота сигнала лежала между двумя точками FFT. Этот эффект также называется "Scalloping Loss" (утечка спектра) и может достигать даже 3 dB. Однако зеленая линия показывает корректный уровень. Эта проблема была решена с помощью Zero padding. Оригинальный массив выборки звука FFT из 1024 точек удваивается до 2048 или даже учетверяется до 4096 путем добавления нулей. При вычислении FFT вставляются дополнительные точки между двумя оригинальными, и максимум отображается более точно. Однократное дополнение нулями (1x Zero padding), или удвоение массива FFT добавлением 1024 нулей, уже достаточно для наших применений.
FFT window. Оранжевая линия в старом приложении имела очень широкий диапазон частот. Это сделано и при вычислении БПФ, и решено с помощью окна БПФ (FFT window). На зеленой линии характеристики новой версии использовалось окно БПФ, и полосы по бокам очень слабые. Даже больше чем на 60 dB слабее оранжевой диаграммы старой версии! К сожалению, это подавление происходит за счет селективности. Но Вы можете еще увеличить селективность, удвоив массив выборок БПФ (выберите 2048 вместо 1024 для FFT sample array).
В старой программе не было окна FFT. Все выборки звука обрабатывались без аттенюации для вычисления FFT.
Что такое окно FFT. FFT window это очень простая операция. Выборки звука из массива FFT регулируются в соответствии с определенной кривой. Выборки звука посередине не регулируются. Таким образом, максимум регулировки происходит в начале и в конце, и вид регулировки зависит от примененной кривой. Форма кривой аттенюации зависит от вида окна. Ниже показано окно Nuttall, примененное для получения высокого динамического диапазона. Полоса составляет 2.02 выборок FFT, т. е. в 2 раза больше, чем когда Вы не используете окно FFT.
Когда используется окно FFT, аудиосигнал больше не переключается в состояние включено и выключено, его уровень постепенно увеличивается от нуля до максимума и затем возвращается обратно к нулю.
Другие виды окон БПФ. Вы можете выбрать другие окна для разных приложений, окно "Высокой селективности" (High selectivity) также называется окном косинуса (Cosine window) и окно "Flat top" имеет широкую, плоскую вершину. Применяется Zero padding, Вы можете увидеть, что боковые полосы содержат падения. Они не видимы без Zero padding, и затем пики боковых полос соединяются с графиком характеристики. Ниже на рисунках Вы можете увидеть различные эффекты окно (показано зеленым цветом). Стандартный фильтр широкого динамического диапазона ("High dynamic range") показан оранжевым цветом. Простой фильтр Cosine имеет меньше селективность, чем старый анализатор спектра без окна FFT, и на 20 dB лучше подавляет боковые полосы.
Оконная функция косинуса (Cosine window) хорошо подавляет боковые полосы и имеет отличную селективность. Это хороший компромисс между динамическим диапазоном и селективностью.
Функция плоского окна (Flattop window) это весьма специфический фильтр. Он имеет плоскую вершину характеристики. По этой причине очень подходит для точного измерения уровня, но при этом имеет широкую полосу.
Окно Cosine это хороший компромисс между хорошей селективностью и хорошим динамическим диапазоном, очень хорошо подходящий для программы приема маяка QRSS. У фильтра Flat top плоская вершина. По этой причине он очень полезен для точного измерения уровня. Пик сигнала не должен точно быть на пике фильтра FFT. Для развертки характеристики звукового фильтра это самое лучшее окно.
[Кнопки меню]
Здесь приведено описание некоторых кнопок меню, требующих специальных пояснений.
Normal mode, Max hold, Average. В режиме Normal график спектра постоянно обновляется. В режиме Max hold на графике запоминается максимальное значение. Если новое значение больше, то на графике оно фиксируется, заменяя старое. В режиме Average значения графика усредняются. В этом режиме можно получить частотную характеристику звука приемника, когда он принимается шум. Затем используйте окно Flat top.
FFT window. Выбирается окно БПФ. Как уже объяснялось выше, не будет лучшим выбором выбирать "Rectangle window" (прямоугольное окно), или делать обработку без окна. Вариант с прямоугольным окном (без окна) имеет плохой динамический диапазон из-за высокого шума боковых полос, который будет сгенерирован с таким окном при вычислении БПФ. Окно Flat имеет самую высокую точность, но также большую полосу и меньшую селективность. Когда выбран вариант "None + DEMO" при нажатии на кнопке Start, активируется демонстрационный режим. Вы можете симулировать два сигнала и шум, чтобы увидеть эффект от разных окон.
Rate. Устанавливает частоту дискретизации звуковой карты (частота следования выборок сигнала). Чем выше частота выборок, тем выше может быть диапазон анализируемых частот. Частота дискретизации звуковой карты часто задается стандартными значениями 44100, 48000, 96000 и 192000 Гц. Однако Вы можете заметить, что программа позволяет выбрать любую частоту дискретизации. Как такое возможно? Операционная система Windows внутри себя реализует преобразование частоты выборок звуковой карты в желаемую частоту дискретизации. С помощью интерполяции значения выборок с новой частотой дискретизации вычисляются из выборок, поступающих со звуковой карты на другой частоте. В свойствах устройства записи (recording devices -> advanced) Вы найдете установку "shared modus", и здесь можете установить реальную частоту выборок аппаратуры звуковой карты.
Samples. Меняет количество выборок для вычисления FFT. Указанное здесь значение должно быть результатом степени двойки. Большое количество выборок дает большую разрешающую способность, но уменьшают время обновления графика спектра. Меньшее количество выборок снижает разрешающую способность, но дает ускоренное обновление графика.
T=20ms. Довольно часто первые 20ms звукового буфера содержат испорченные значения выборок. С помощью этого слайдера можно установить время, первой части аудиобуфера, которая не будет использоваться. На компьютере автора было достаточно выбрать значение 20ms, но возможно это время на других PC придется увеличить.
[Подача сигнала на вход звуковой карты]
Вы можете самостоятельно изготовить простой пробник с входным сопротивлением 1 МОм. Для слабых сигналов уменьшите значение R1 до 10 кОм или 1 кОм. Вы можете также увеличить R2 или даже удалить его. Функция диодов - защита входа звуковой карты от статического электричества и слишком сильных сигналов.
Преобразование произойдет автоматически, за исключением нескольких очень важных моментов. Запись звука больше не работает. Это могло быть исправлено. В VB8 больше нельзя использовать "Any" и "Object". Проблема в том, что не получается найти в Интернет хороший пример кода. На Python найти пример намного проще, как записать и воспроизвести аудио.
И больше нельзя рисовать линии в Picture Box. Это полностью изменено, Вы должны создать объект Graphic. Microsoft сделала это не просто так, графические возможности значительно расширены. С помощью объекта Graphic можно рисовать линии не только в Picture Box, а где угодно, это большое улучшение.
Экран программы начал мерцать. Решение этой проблемы было найдено в MSDN network Microsoft. Во-первых, нужно создать Graphic Buffer. Все рисуется в этом буфере, и затем целиком копируется в Picture Box. Эта процедура называется "Manually Rendering Buffered Graphics". Выделение графического буфера увеличивает потребление памяти программой. Если Вы используете такой объект, то должны сделать dispose("имя_графического_буфера").
Кое-что было изменено в использовании памяти. Все старые функции из kernell32.lib были заменены более простыми функциями и атрибутами Marshal.
Изучение новых возможностей потребовало некоторых затрат времени. У Visual Basic есть мощная среда разработки (IDE), которую даже можно бесплатно применять для собственных (не коммерческих) целей. Однако все это довольно сложно. Python немного проще, и скорее всего эффективнее.
[Словарик]
CW Continuous Wave, радиосигнал с непрерывной не модулированной несущей частотой.
dB децибел, оценка соотношения между двумя величинами, выраженная логарифмическими единицами (см. [3]).
FFT Fast Fourier Transform, быстрое преобразование Фурье (БПФ). Позволяет получить дискретные отсчеты спектра сигнала по дискретным отсчетам сигнала.
QRP любительская радиосвязь на малой мощности передатчика (подробнее см. Википедию).
RF RF Radio Frequency, радиочастота.
SSB Single Side Band, однополосная модуляция, амплитудная модуляция с одной боковой полосой и часто подавленной несущей. Позволяет повысить эффективность передачи информации по радио. Подробнее см. Википедию.
USB Up Side Band, сигнал SSB с верхней боковой полосой.
[Ссылки]
1. AUDIO SPECTRUM ANALYZER WITH THE PC SOUNDCARD site:qsl.net. 2. IMPROVED AUDIO SPECTRUM ANALYZER WITH THE SOUNDCARD site:qsl.net. 3. Что такое децибел? 4. 180622SpectrumAnalyser.zip - исходный код и скомпилированные бинарники программы анализатора спектра.