Низкочастотный цифровой радиоприемник
В настоящей работе описаны оптимальные решения для цифровых радиоприемных устройств и в качестве примера рассмотрена организация реального СДВ/ДВ радиоприемника. В приложении приведены тексты типовых программных блоков на языке С/С++ и Ассемблера....
Збережено в:
Дата: | 2015 |
---|---|
Автор: | |
Формат: | Стаття |
Мова: | Russian |
Опубліковано: |
Інститут радіофізики і електроніки ім. А.Я. Усикова НАН України
2015
|
Назва видання: | Радіофізика та електроніка |
Теми: | |
Онлайн доступ: | http://dspace.nbuv.gov.ua/handle/123456789/106177 |
Теги: |
Додати тег
Немає тегів, Будьте першим, хто поставить тег для цього запису!
|
Назва журналу: | Digital Library of Periodicals of National Academy of Sciences of Ukraine |
Цитувати: | Низкочастотный цифровой радиоприемник / Ю.П. Галюк // Радіофізика та електроніка. — 2015. — Т. 6(20), № 1. — С. 68-80. — Бібліогр.: 4 назв. — рос. |
Репозитарії
Digital Library of Periodicals of National Academy of Sciences of Ukraineid |
irk-123456789-106177 |
---|---|
record_format |
dspace |
spelling |
irk-123456789-1061772016-09-21T03:02:17Z Низкочастотный цифровой радиоприемник Галюк, Ю.П. Прикладная радиофизика В настоящей работе описаны оптимальные решения для цифровых радиоприемных устройств и в качестве примера рассмотрена организация реального СДВ/ДВ радиоприемника. В приложении приведены тексты типовых программных блоков на языке С/С++ и Ассемблера. У даній роботі описано оптимальні рішення для цифрових радіоприймальних пристроїв і, як приклад, розглядається організація реального СДВ/ДВ радіоприймача. У додатку наведено тексти типових програмних блоків на мові С/С++ та Ассемблер. In the present study, we provide optimal solutions for digital receivers. As an example, we present the organization of a real VLF/LF receiver. Appendix contains the listings of typical program blocks in the C/C++ and Assembler languages. 2015 Article Низкочастотный цифровой радиоприемник / Ю.П. Галюк // Радіофізика та електроніка. — 2015. — Т. 6(20), № 1. — С. 68-80. — Бібліогр.: 4 назв. — рос. 1028-821X http://dspace.nbuv.gov.ua/handle/123456789/106177 519.687.5+53.083.92+004.414.2 ru Радіофізика та електроніка Інститут радіофізики і електроніки ім. А.Я. Усикова НАН України |
institution |
Digital Library of Periodicals of National Academy of Sciences of Ukraine |
collection |
DSpace DC |
language |
Russian |
topic |
Прикладная радиофизика Прикладная радиофизика |
spellingShingle |
Прикладная радиофизика Прикладная радиофизика Галюк, Ю.П. Низкочастотный цифровой радиоприемник Радіофізика та електроніка |
description |
В настоящей работе описаны оптимальные решения для цифровых радиоприемных устройств и в качестве примера рассмотрена организация реального СДВ/ДВ радиоприемника. В приложении приведены тексты типовых программных блоков на языке С/С++ и Ассемблера. |
format |
Article |
author |
Галюк, Ю.П. |
author_facet |
Галюк, Ю.П. |
author_sort |
Галюк, Ю.П. |
title |
Низкочастотный цифровой радиоприемник |
title_short |
Низкочастотный цифровой радиоприемник |
title_full |
Низкочастотный цифровой радиоприемник |
title_fullStr |
Низкочастотный цифровой радиоприемник |
title_full_unstemmed |
Низкочастотный цифровой радиоприемник |
title_sort |
низкочастотный цифровой радиоприемник |
publisher |
Інститут радіофізики і електроніки ім. А.Я. Усикова НАН України |
publishDate |
2015 |
topic_facet |
Прикладная радиофизика |
url |
http://dspace.nbuv.gov.ua/handle/123456789/106177 |
citation_txt |
Низкочастотный цифровой радиоприемник / Ю.П. Галюк // Радіофізика та електроніка. — 2015. — Т. 6(20), № 1. — С. 68-80. — Бібліогр.: 4 назв. — рос. |
series |
Радіофізика та електроніка |
work_keys_str_mv |
AT galûkûp nizkočastotnyjcifrovojradiopriemnik |
first_indexed |
2025-07-07T18:04:09Z |
last_indexed |
2025-07-07T18:04:09Z |
_version_ |
1837012307320766464 |
fulltext |
ППРРИИККЛЛААДДННААЯЯ РРААДДИИООФФИИЗЗИИККАА
________________________________________________________________________________________________________________
__________
ISSN 1028−821X Радиофизика и электроника. 2015. Т. 6(20). № 1 © ИРЭ НАН Украины, 2015
УДК 519.687.5+53.083.92+004.414.2
Ю. П. Галюк
Санкт-Петербургский государственный университет
35, Университетский просп., Санкт-Петербург, Петергоф, 198504, Россия
E-mail: galyuck@paloma.spbu.ru
НИЗКОЧАСТОТНЫЙ ЦИФРОВОЙ РАДИОПРИЕМНИК
Использование цифровых устройств избавляет экспериментатора от многих трудностей, так как физические блоки заме-
няются их виртуальными компьютерными аналогами. Радиоприемное устройство в таком случае представляет собой обычный
компьютер, оснащенный платой аналогово-цифрового преобразователя (АЦП) и соответствующим программным обеспечением.
Такой приемник оказывается дешевле аналогового, так как компьютеры и платы АЦП из-за своей универсальности выпускаются
большими партиями, и на их рынке существует огромная конкуренция. Отладка и настройка цифрового приемника, по сравнению с
традиционным, упрощается и происходит быстрее; она сводится к простому редактированию текста программы и ее перекомпиля-
ции. Однако при этом необходимо уметь программировать на языках высокого уровня и использовать современные методы цифро-
вой обработки сигналов. В настоящей работе описаны оптимальные решения для цифровых радиоприемных устройств и в качестве
примера рассмотрена организация реального СДВ/ДВ радиоприемника. В приложении приведены тексты типовых программных
блоков на языке С/С++ и Ассемблера. Библиогр.: 4 назв.
Ключевые слова: цифровой радиоприемник, цифровая обработка сигналов, реальный масштаб времени, цифровая
фильтрация, быстрое преобразование Фурье.
Организация радиофизического экспери-
мента всегда была трудной задачей в организаци-
онном плане из-за дороговизны аппаратуры.
Промышленность заинтересована в выпуске уни-
версальных приборов, большинство функций ко-
торых используется редко, а в силу единичных
партий приборы оказываются дорогими. В то же
время остается необходимость создавать аппара-
туру сопряжения промышленных приборов с экс-
периментальной установкой и устройствами ана-
лиза данных, как правило, персональных компью-
теров. Применение цифровых радиоприемных
устройств избавляет от многих трудностей.
Радиоприемник в таком случае реализуется с по-
мощью обычного компьютера, аналогово-цифровой
платы (АЦП) и набора программ. Такое решение
оказывается дешевым, универсальным, простым в
отладке и настройке. При этом, однако, требуется
персонал, умеющий программировать на языках
высокого уровня и владеющий методами цифро-
вой обработки сигналов (ЦОС). Ниже мы рас-
смотрим основные этапы и приемы создания
цифровых радиоприемных устройств. В основу
работы положен доклад Ю. П. Галюка, М. А. Бися-
рина, Н. Ю. Заалова и Л. Н. Лутченко «Программно-
аппаратный комплекс СПбГУ для исследования
нижней ионосферы посредством радиоволн низко-
частотных диапазонов», сделанный в 2012 г. на
Международной конференции EMES в Харьков-
ском национальном университете, посвященной
памяти П. В. Блиоха [1].
Требования к компьютеру, который слу-
жит цифровым приемником, по современным мер-
кам, достаточно скромны: Intel-совместимый про-
цессор (желательно многоядерный) с оперативной
памятью от 2 ГБ; ОС Windows/XP или Windows 7.
Среда разработки: Microsoft Visual Studio (2005 и
выше); язык программирования C/C++.
В качестве типа проекта следует выбрать
не Консольное Приложение (Console Application),
а Win32. Это объясняется не только тем, что в
таком проекте можно создать более удобный
интерфейс с пользователем (система меню, под-
сказок, кнопки управления), но он более эффек-
тивно использует ресурсы процессора. Заметим,
что, в отличие от Console Application, проект
Win32 на самом деле представляет собой сово-
купность слабо связанных между собой так на-
зываемых «оконных приложений», инициализа-
ция работы которых осуществляется (через оче-
редь сообщений) посылкой специальных запро-
сов (message). Такая организация windows-про-
граммы позволяет разные оконные приложения
выполнять на различных процессорах/ядрах.
Подробнее об организации windows-программ,
функций Windows API (application programming
interfaces) и библиотеки MFC (Microsoft Founda-
tion Classes) можно ознакомиться, например в ра-
ботах [2, 3].
1. Основные этапы обработки инфор-
мации в цифровом приемнике. Казалось бы,
самый простой способ создания цифрового прием-
ника – это взять блок-схему аналогового прием-
ника и реализовать его узлы в виде набора под-
программ. Этот путь возможен, поскольку все
известные способы аналоговой обработки сигна-
лов реализуются численно. Однако обычно циф-
ровые приемники оказываются намного проще
своих аналоговых прототипов. Это объясняется, в
частности, огромным динамическим диапазоном
данных, которыми оперирует современный
компьютер (одинарная или двойная точность чи-
сел с плавающей запятой). К примеру, типичный
усилительный каскад имеет динамический диапа-
зон около 40 дБ, а числа с одинарной точностью –
около 150 дБ, с двойной – 340 дБ. Кроме того,
Ю. П. Галюк / Низкочастотный цифровой радиоприемник
_________________________________________________________________________________________________________________
69
некоторые алгоритмы, в частности, использую-
щие хранение временных реализаций в линиях
задержки, очень трудно реализуются в аналого-
вых приборах, но элементарно выполняются в
цифровом виде.
Условно программа-приемник разбивает-
ся на следующие блоки:
− блок ввода данных;
− блок предварительной обработки;
− блок вычисления текущих характеристик
сигнала;
− блок регистрации и визуализации резуль-
татов.
Блок ввода данных преобразует непре-
рывный аналоговый сигнал в ряд цифровых от-
счетов, снимаемых через равные промежутки
времени Δt. Эта процедура называется квантова-
нием сигнала, и осуществляется с помощью АЦП.
В дальнейшем мы будем использовать термины
частота квантования: Fs = 1/Δt и частота Найк-
виста FN, равная половине частоты квантования:
FN = Fs / 2. С понятием частоты Найквиста FN тесно
связано явление подмены частот, или алиасинг [4].
При цифровой обработке могут быть однозначно
интерпретированы только сигналы в частотном
диапазоне 0 – FN. Сигналы большей частоты ото-
бражаются на эту же полосу частот по правилу
«гармошки». Чтобы пояснить это явление, рас-
смотрим синусоидальный сигнал частоты Fa.
Вычислим сначала номер гармошки M, куда по-
пал этот сигнал. Для этого делим нацело частоту
сигнала на частоту Найквиста FN : M = Fa / FN.
Если число M – четное, то сигнал отображается
на частоту ,nad FMFF −= если нечетное – на
частоту .)1( and FFMF −+= Для однозначности
в интерпретации результатов необходимо, чтобы
все частотные компоненты сигнала располагались
в пределах одной частотной гармошки – для этой
цели служит входной аналоговый фильтр.
Блок предварительной обработки работа-
ет в крайне жестком режиме «реального време-
ни». Его задача – сформировать из бесконечного
ряда отсчетов конечные выборки по N последова-
тельных чисел, длиной TR, которые называются
реализациями. Над ними и выполняются даль-
нейшие преобразования. Одновременно с этим
блок осуществляет цифровую фильтрацию реали-
заций.
Блок расчета текущих характеристик
сигнала по мере поступления новых реализаций
вычисляет текущие значения параметров сигнала,
отношение сигнал/шум и т. п.
Блок регистрации и визуализации резуль-
татов периодически записывает на внешние носи-
тели вычисляемые параметры сигнала и выводит
на экран монитора графическую информацию о
сигнале и его параметрах.
2. Основные алгоритмы ЦОС. Одной
из самых затратных в ЦОС (с вычислительной
точки зрения) и в то же самое время часто приме-
няемой процедурой является, по терминологии
линейной алгебры, «скалярное произведение век-
торов». Записывается эта процедура таким обра-
зом:
,
1
0
∑
−
=
=
N
i
ii yxz (1)
где xi и yi – отсчеты двух реализаций длиной N.
В зависимости от способа использования
эта процедура может называться ковариацией,
сверткой, фурье-преобразованием, фильтром с
конечной импульсной характеристикой (КИХ), но
в любом случае она сводится к сложению произ-
ведений элементов двух массивов чисел. Понят-
но, что в силу своей простоты эта процедура лег-
ко реализуется в виде цикла на любом языке вы-
сокого уровня, однако результат не окажется оп-
тимальным с точки зрения скорости выполнения.
Заметим, что компиляторы не умеют эффективно
использовать новые возможности, предоставляе-
мые современными процессорами, в частности,
SIMD-расширения (Single Instruction, Multiple Data)
набора команд. Подмножество SIMD-команд,
эффективное именно при реализации процедур
типа (1), называется SSE-расширением (Streaming
SIMD Extensions), т. е. потоковым SIMD-расши-
рением набора инструкций процессора.
SSE-команды производят арифметиче-
ские операции над числами с плавающей запятой
с одинарной или двойной точностью, распола-
гающимися в 8 специальных 128-разрядных реги-
страх xmm0÷7. В каждый такой регистр помеща-
ется либо 2 числа с двойной точностью типа
double, либо 4 числа с одинарной точностью типа
float. В подавляющем большинстве случаев оди-
нарной точности представления данных будет дос-
таточно.
Для использования SSE-команд приме-
няют язык Ассемблера. Для этого существует две
возможности: использовать ассемблерные встав-
ки (через конструкцию __asm) в программе на
языках C/C++, либо писать и компилировать под-
программы на языке Ассемблера, а потом встав-
лять полученный объектный модуль в свой проект.
Мы будем ориентироваться на второй вариант.
В приложении 1 приведен текст про-
граммы svmsse, реализующей формулу (1).
Прототип ее объявляется следующим образом:
extern "C" void smvsse(int N,float
*x,float *y,float *z).
Параметры подпрограммы соответствуют форму-
ле (1), где N – длина реализаций, x и y – иденти-
фикаторы перемножаемых массивов, а z – адрес
переменной, в которую заносится результат.
Ю. П. Галюк / Низкочастотный цифровой радиоприемник
_________________________________________________________________________________________________________________
70
Если считать, что программа smvsse на-
ходится в файле smvsse.asm, то ее компиляция
производится с помощью утилиты ml, постав-
ляемой вместе с VS:
ml /c /coff smvsse.asm.
В результате компиляции образуется объектный
файл svmsse.obj, который и добавляется в
проект.
При использовании подпрограммы smvsse
следует учитывать один важный момент – проб-
лему выравнивания данных. Данные в памяти,
которыми оперируют SSE-команды, должны на-
ходиться на границе 16 байт. К сожалению, ком-
пилятор автоматически такое выравнивание не
производит – для этого в VS служит специальный
расширенный атрибут класса памяти _declspec.
Например, при описании массива x, состоящего
из 1 000 элементов, следует использовать конст-
рукцию
_declspec(align(16))float x[1000].
Параметр align указывает на значение вырав-
нивания (должен быть степенью 2).
При динамическом выделении памяти
под такой массив используется функция
_aligned_malloc:
float *x;int N=1000;
x=(float*)_aligned_malloc(N*4,16).
Первым параметром функции является
длина выделяемого массива в байтах (в нашем
случае 1 000 4-х байтных слов), вторым – значе-
ние выравнивания (в нашем случае 16). Функция
описана в заголовочном файле malloc.h.
Не всегда можно гарантировать, что
какой-то из массивов x и y выровнен на гра-
ницу 16 байт. Для этого случая ценой частичной
потери производительности можно видоизменить
подпрограмму svmsse. При отсутствии вырав-
нивания массива x достаточно заменить команду
movaps на команду movups, которая умеет пе-
ресылать не выровненные данные. Если не вы-
ровнены оба массива, первые две команды цикла
меняются на следующий фрагмент:
smv: movups xmm0,oword ptr[esi+4*ecx]
movups xmm2,oword ptr[edi+4*ecx]
mulps xmm0,xmm2.
Как видно, при использовании SSE-команд,
требуется 5–6 команд процессора для суммиро-
вания четырех членов ряда (1). Точное коли-
чество тактов процессора оценить трудно, но не
более восьми, т. е. порядка двух тактов на одно
звено.
Одной из областей использования фор-
мулы (1) является построение ковариационной
функции Sxy от двух переменных x и y:
.1)(
1
0
∑
−
=
+=
N
p
ippxy yx
N
iS (2)
Ковариация используется, в частности, при «гру-
бом поиске» начала импульса, основывающимся
на «степени сходства» двух функций.
Самой важной процедурой, которая сво-
дится к формуле (1), является фильтр с конечной
импульсной характеристикой (КИХ, или по-
английски FIR). Цифровые фильтры можно соз-
давать с любой заданной амплитудно-частотной
характеристикой. Наиболее часто встречаются
задачи построения фильтров нижних частот (ФНЧ),
фильтров верхних частот (ФВЧ), а также полосо-
вых и гребенчатых фильтров. Все эти фильтры
объединяет одно общее – задается одна или не-
сколько граничных частот и требуется обеспечить
наиболее крутой спад (подъем) амплитудной ха-
рактеристики в их окрестности.
Фильтры с конечной импульсной харак-
теристикой, выражаясь математическим языком,
представляют собой свертку входного сигнала с
функцией отклика реализуемого фильтра. Мате-
матически это означает, что фильтрованный от-
счет yi для момента времени ti вычисляется по
формуле
∑
=
+− +=
N
k
kkikii axxy
0
.)( (3)
Здесь выписан вариант наиболее часто исполь-
зуемого симметричного КИХ-фильтра. В приве-
денной формуле ak обозначают коэффициенты
фильтра, xi – входные отсчеты.
Исходя из формулы (3) выделим свойства
КИХ-фильтров:
− КИХ-фильтры абсолютно устойчивы. Это
объясняется тем, что сумма (3) конечна, а уже
фильтрованные отсчеты никак не влияют на про-
цедуру фильтрации.
− В вычислении сумм участвуют как более
ранние – xi–k, так и еще не пришедшие отсчеты
xi+k. В реальности это означает, что необходимо
записывать входные данные по мере их поступ-
ления в буферный массив. Только после прихода
12 +N отсчета мы сможем применить формулу (3).
Отфильтрованный отсчет yi оказывается сдви-
нутым строго на N отсчетов (на интервал вре-
мени ).tNΔ Заметим, что фильтры (3) не вносят
никаких фазовых искажений.
− Вследствие линейности формулы (3) мож-
но сформулировать принцип суперпозиции: если
при синтезе сложного фильтра его можно пред-
ставить в виде набора n параллельно расположен-
ных простых фильтров {a1k}, {a2k}, …, {ank}, то
коэффициенты ak такого сложного фильтра вы-
числяются как сумма коэффициентов элементар-
ных фильтров ak = a1k + a2k + … + ank. Отсюда
следует весьма нетривиальный и полезный вывод –
размер фильтра (количество N его коэффициен-
тов) не зависит от сложности его амплитудно-
Ю. П. Галюк / Низкочастотный цифровой радиоприемник
_________________________________________________________________________________________________________________
71
частотной характеристики. Длина фильтра харак-
теризует крутизну амплитудно-частотной харак-
теристики (ширину переходной области Δf) в ок-
рестности частоты среза фильтра. Точнее,
Δf ≈ 1/(2N Δt).
− Базовым для расчетов большинства фильт-
ров является ФНЧ. Вкратце метод его расчета
сводится к умножению функции отклика идеаль-
ного фильтра sin(x)/x на какую-либо конечную
функцию окна. Подпрограмма lpsd, приведен-
ная в приложении 2, вычисляет коэффициенты
ФНЧ, используя окно Поттера P310. Она является
результатом переработки программы LPSPBG из
[4] с языка ФОРТРАН на язык C. Из полученного
набора коэффициентов базового ФНЧ {alk} мож-
но получить, например, коэффициенты {ahk}
ФВЧ. Формулы пересчета крайне простые:
;11 00 aah −= ,1kk aah −= k = 1, …, N. Интерпре-
тировать формулу можно так: ФВЧ является ре-
зультатом вычитания сигнала, прошедшего без
искажения (a0 = 1; ahk = 0, k = 1, …, N), и сигнала,
прошедшего через ФНЧ. Поняв принцип, легко
строить и другие фильтры, например, полосовой
фильтр строится как разница сигналов, прошед-
ших через два ФНЧ, настроенные на различные
частоты срезов, и т. д.
− При обработке узкополосных сигналов
крайне эффективно сочетание КИХ-фильтрации с
одновременной децимацией (прореживанием)
фильтрованных отсчетов. Именно КИХ-фильт-
рация позволяет для этой цели просто фильтро-
вать каждый n-й отсчет (n – коэффициент деци-
мации), пропуская все остальные. Децимацию
проводят для того, чтобы уменьшить вычисли-
тельные затраты на дальнейшую обработку сиг-
нала. Аналогом этой процедуры является процесс
супергетеродинирования в радиотехнике, т. е.
перенос спектра сигнала в низкочастотную об-
ласть. Надо понимать, что частота Найквиста Fd
децимированного ряда окажется в n раз меньше
исходной: Fd = FN / n. Частоты среза полосового
фильтра выбираются при децимации таким обра-
зом, чтобы полоса пропускания занимала пол-
ностью одну из «складок частотной гармошки»
шириной Fd.
− КИХ-фильтры идеальны для использова-
ния SSE-команд. К сожалению, при использова-
нии для фильтрации формулы (1) нельзя восполь-
зоваться симметрией коэффициентов ak в (3), по-
этому перед обращением к программе svmsse
необходимо привести массив коэффициентов
фильтра к линейному виду. Для этого можно вос-
пользоваться, например, подпрограммой prepsse,
приведенной в приложении 3. Входными пара-
метрами (mm, b) подпрограммы являются выход-
ные параметры подпрограммы lpsb. Подпро-
грамма возвращает в качестве результата длину
массива коэффициентов, который можно исполь-
зовать в программе svmsse; указатель на этот
массив возвращается в выходной переменной x.
Оценим теперь предельные характерис-
тики фильтров, которые можно получить на
современных компьютерах. При частоте кванто-
вания 500 кГц на процедуру фильтрации каждого
отсчета остается 2 мкс, или около 4 000 тактов
2 ГГц процессора. Использование SSE-команд
позволяет применять фильтры длиной до 2 000
(2 такта на звено), что позволяет добиться пере-
ходной области 2–3 кГц в окрестности частот
среза фильтров. Понятно, что в этом случае про-
цессор будет занят исключительно фильтрацией,
но, во-первых, современные процессоры имеют
несколько ядер, а во-вторых, децимация может
уменьшить нагрузку на процессор (или улучшить
качество фильтра) в десятки и сотни раз.
Наряду с КИХ-фильтрами в цифровой
обработке применяют и фильтры с бесконечной
импульсной характеристикой (БИХ), которые
относятся к классу рекурсивных фильтров, когда
при обработке очередного отсчета используются
как входные отсчеты, так и фильтрованные.
Амплитудно-частотная характеристика БИХ-фильт-
ра в окрестности частот среза описывается, как и
в аналоговом случае, степенной функцией, по-
этому они часто даже называются так же, напри-
мер, «фильтр Баттерворта n-го порядка». Основ-
ным достоинством БИХ-фильтров является
меньшее, по сравнению с КИХ, количество
арифметических операций, необходимых для их
реализации. Недостатки у БИХ-фильтров тоже
есть: возможна неустойчивость (самовозбужде-
ние); невозможно оценить задержку сигнала; не-
обходимо фильтровать все отсчеты даже при уз-
кополосной фильтрации с децимацией. К недос-
таткам можно также отнести невозможность эф-
фективно использовать SSE-расширения команд
процессоров Intel. БИХ-фильтры в дальнейшем
рассматриваться не будут, однако программную
реализацию алгоритмов БИХ-фильтрации и вы-
числения коэффициентов (на языке ФОРТРАН)
ФНЧ и ФВЧ, а также полосовых можно найти в
работе [4].
Еще одной операцией, часто применяе-
мой при обработке сигналов и сводящейся к фор-
муле (1), является дискретное преобразование
Фурье (ДПФ). Одной из форм такой операции
является цифровой синхронный детектор (ЦСД):
( )[ ],exp)(
1
0
0∑
−
=
Δ+=
N
i
ti itjxX ωω (4)
где ω – частота, для которой считается фурье-
компонента. В радиотехнике фурье-анализ чаще
всего используется для определения параметров
Ю. П. Галюк / Низкочастотный цифровой радиоприемник
_________________________________________________________________________________________________________________
72
синусоидальных сигналов (радиоимпульсов) и
построения спектров шума. Собственно, парамет-
ров у радиоимпульса с угловой частотой ω, кото-
рый записывается в виде ),)(sin( 0 ϕω +− ttA два:
амплитуда A и начальная фаза ϕ. Эти параметры
легко определяются после применения ЦСД (3):
|;)(|/2 ωXNA = )).(arg( ωϕ X= Применение
же фурье-анализа для анализа спектра шумов ос-
новывается на том, что фурье-компоненту (4)
можно в некотором приближении считать резуль-
татом фильтрации через узкополосный фильтр со
средней частотой πω 2/=f и полосой пропус-
кания Δf обратно пропорциональной длине реали-
зации N: .)( 1−Δ=Δ tf N
Если необходимо проделать преобразо-
вание Фурье одновременно на многих частотах,
то разумно применить быстрое преобразование
Фурье (БПФ). При БПФ число арифметических
операций растет с увеличением длины реализа-
ции пропорционально N⋅logN, а не N⋅N как при
использовании ЦСД. Особенностью БПФ являет-
ся то, что вычисляются фурье-компоненты только
для частот (включая нулевую), при которых ук-
ладываются целое число волн на реализации.
Можно для наглядности представить
БПФ как поворот вектора X размерности N в много-
мерном пространстве. Здесь X – это совокупность
временных отсчетов {x0, …, xN–1}, входящих в
реализацию. Аналогия с поворотом вектора по-
могает понять следующие свойства БПФ:
– Сохранение длины вектора (равенство
Пaрсиваля), т. е. сумма квадратов временных от-
счетов xi равняется сумме квадратов модулей фу-
рье-компонент X(ωi).
– Количество независимых фурье-компонент
(вещественных) равно при повороте количеству
исходных отсчетов N. Так как фурье-компоненты
комплексны, то их в 2 раза меньше. На самом
деле имеется N / 2 + 1 частотных компонент. Это
частоты, на которых на длине реализации TR ук-
ладывается целое число волн, т. е. удовлетво-
ряющие соотношению ,/ NFif si = i = 0, ..., N / 2.
Две из компонент – на нулевой частоте, i = 0 (по-
стоянная составляющая сигнала) и на частоте
Найквиста FN, i = N / 2 – вещественны. Остальные
N / 2 – 1 фурье-компонент комплексны.
Основным ограничением при практиче-
ском использовании БПФ является невозмож-
ность задания произвольной длины реализации.
Наиболее распространенными являются алгорит-
мы, в которых длина реализации является степе-
нью числа 2. С появлением свободно распростра-
няемой библиотеки FFTW, которая умеет прово-
дить БПФ для реализаций с длинами, равными
произведению чисел 2, 3 и 5, это ограничение
стало несущественным.
Для использования пакета необходимо:
• Скачать последнюю прекомпилированную
официальную 32/64-разрядную версию пакета для
Windows с сайта http://www.fftw.org/.
• После распаковки пакета выполнить ко-
манду
lib /def:libfftw3f-3.def.
После отработки команды создадутся файлы
libfftw3f-3.lib и libfftw3f-3.exp.
Утилита lib входит в состав Visual Studio.
• Файл libfftw3f-3.lib включить в ваш
проект, а заголовочный файл fftw3.h (с помо-
щью директивы #include) – в текст программы
на С/С++.
БПФ, как известно, оперирует комплекс-
ными массивами данных, но в языке C отсутству-
ет соответствующий тип данных. Чтобы облег-
чить работу с пакетом FFTW, в заголовочный
файл fftw3.h добавлен, в частности, описатель
fftwf_complex (комплексные одинарной точ-
ности). Можно считать, что у такой переменной
как бы добавляется еще один индекс, причем ин-
декс 0 соответствует реальной части переменной,
а 1 – мнимой.
Видов преобразований Фурье в пакете
FFTW реализовано много; при обработке сигна-
лов в подавляющих случаях применяются только
прямое и обратное БПФ для вещественных мас-
сивов одинарной точности. Процесс быстрого
преобразования Фурье разбивается на несколько
этапов: вначале создается так называемый план, в
котором задаются параметры преобразования.
Полученный план используется для запуска про-
цедуры БПФ (в том числе в цикле и в разных мес-
тах программы).
Рассмотрим эти этапы подробнее на при-
мере прямого и обратного преобразования Фурье
для реализации длиной 1 000 отсчетов:
• Описание массивов
float x[1000];fftwf_complex y[501].
• Описание планов прямого и обратного фу-
рье-преобразований
fftwf_plan prf,invf.
• Инициализация планов прямого
prf=fftwf_plan_dft_r2c_1d(1000,x,y,
FFTW_FORWARD)
и обратного преобразований
invf=fftwf_plan_dft_c2r_1d(1000,y,x,
FFTW_ BACKWARD).
Названия функций: fftwf означает, что функция
из пакета FFTW и преобразовываются данные
одинарной точности; dft – что производится
преобразование Фурье; r2c – что из веществен-
ного массива получается комплексный (прямое
преобразование); c2r – что из комп-лексного
массива получается вещественный (обратное
преобразование); 1d – что массивы одномерные
Ю. П. Галюк / Низкочастотный цифровой радиоприемник
_________________________________________________________________________________________________________________
73
(могут еще быть двух- и трехмерные). Параметры
у функций следующие: длина реализации; вход-
ной массив; массив результата; флаг, указываю-
щий на тип преобразования.
• Запуск процесса преобразования Фурье
осуществляется функцией fftwf_execute с
одним параметром (планом):
fftwf_execute(prf); // прямое
fftwf_execute(invf); //обратное.
3. Блок ввода данных. Ввод данных в
компьютер, который осуществляет АЦП, – единст-
венная операция, для которой может потребо-
ваться создание уникальных собственных физи-
ческих устройств сопряжения. Собственно, вы-
брать требуется способ запуска АЦП, частоту
квантования и метод ввода данных в компьютер,
а также разработать входной аналоговый фильтр,
согласованный по входу с антенным устройством.
Решение последней задачи выходит за рамки на-
стоящей статьи и облегчается наличием в прода-
же специализированных микросхем-фильтров.
Основными характеристиками АЦП яв-
ляются: допустимая частота квантования, диапа-
зон входных значений сигнала и разрядность АЦП.
Чаще всего выпускаются 12-, 14- и 16-разрядные
АЦП, причем чем выше разрядность АЦП, тем он
дороже и тем ниже допустимая частота квантова-
ния. Обычно бывает достаточно 12 разрядов.
Диапазон входных значений сигнала задается
путем выбора коэффициента усиления встроен-
ных в плату усилителей. Радиосигналы являются
биполярными, поэтому один бит АЦП является
знаковым, а остальные определяют точность пре-
образования. Для этого понятия существует спе-
циальный термин: младший значащий разряд или,
по-английски, Least significant bit (LSB), равный
отношению диапазона входных значений к коли-
честву выходных дискретных значений. Для
12-разрядного АЦП с входным диапазо-
ном +/– 10 В, LSB = 10 В / 2048 ≈ 5 мВ. Следует
знать еще, что при выходе уровня входного
сигнала за границы допустимого диапазона, АЦП
выдает код, соответствующий этой границе,
т. е. ограничивает (клиппирует) сигнал, срезая
верхушки импульсов.
Главной проблемой при создании цифро-
вого приемного устройства является обеспечение
непрерывного ввода данных в условиях больших
частот квантования. Частично эта проблема ре-
шается на аппаратном уровне, когда данные с
микросхем АЦП поступают в буфер платы.
Физически этот буфер может располагаться на
самой плате в виде FIFO-буфера (First In First Out).
Чаще всего он создается непосредственно в опе-
ративной памяти компьютера, и данные переда-
ются в него без участия процессора посредством
прямого доступа в память (ПДП), или, по-
английски, Direct Memory Access (DMA). Для плат
с ISA-шиной размер такого буферного массива
ограничивался 64 К 2-байтных слов. С появле-
нием PCI-шины разработан новый режим DMA –
PCI Bus-mastering, в котором это ограничение
снято. Важной особенностью ПДП является то,
что он может быть «циклическим», когда при
достижении конца массива данные продолжают
заноситься с его начала.
Формат данных внутри буферного мас-
сива не стандартизован, но чаще всего это целые
16-битовые числа. В любом случае, для пересыл-
ки данных из буфера в пользовательский массив
используются специальные программы-драйверы,
поставляемые вместе с платой АЦП. Эти про-
граммы могут преобразовать данные в единицы
входного напряжения в формате с плавающей
запятой при учете коэффициента усиления вход-
ных усилителей самой платы. Функции из пакета
драйверов показывают, сколько данных было
передано платой в буфер (положение указателя на
первый свободный элемент массива при «цикли-
ческом» режиме ПДП).
Буферный массив, куда пересылаются
данные уже в формате с плавающей запятой, при-
годном для цифровой фильтрации, также должен
быть циклическим, т. е. после его заполнения
данные пишутся в него с начала. Размер массива
может выбираться произвольным, но желательно,
чтобы он являлся степенью 2 и был выровнен на
границу 16 байт.
Режимов запуска бывает два: внутренний
(от кварца из платы АЦП) и внешний. Точности
встроенного кварца обычно хватает только при
исследовании шумов. В противном случае прихо-
дится использовать сигнал от внешнего стандарта
частоты.
Какие условия следует соблюдать при
выборе частоты квантования? Критериев не-
сколько, и все они противоречивы. Вот обяза-
тельные критерии:
• Помеха на «зеркальной» от рабочей (отно-
сительно частоты Найквиста) частоте должна
эффективно подавляться входным аналоговым
фильтром. Обеспечивается улучшением качества
фильтра и/или увеличением частоты квантования.
• При использовании децимации входной
последовательности рабочая часть спектра иссле-
дуемого сигнала должна полностью попадать в
одну из «гармошек».
Желательные критерии, соблюдение ко-
торых позволит упростить алгоритмы обработки:
• Частота должна быть как можно меньшей,
так как это уменьшает нагрузку на процессор и
может позволить приобрести более дешевую пла-
ту АЦП (чем ниже допустимая частота квантова-
ния, тем ниже стоимость платы).
• Частота квантования должна получаться
путем деления частоты задающего генератора
Ю. П. Галюк / Низкочастотный цифровой радиоприемник
_________________________________________________________________________________________________________________
74
(внутреннего или внешнего стандарта частоты) на
целое число. Это упростит реализацию внешнего
формирователя частоты квантования.
• После децимации в n раз на длине реализа-
ции должно укладываться целое число отсчетов
(n Δt).
• Коэффициент децимации n должен делиться
на 4. Тогда при КИХ-фильтрации можно будет
применять более эффективный вариант SSE-
команд, использующих данные, выровненные на
границу 16 байт (4 плавающих числа одинарной
точности).
Усиление входного аналогового сигнала
складывается из усиления, обеспечиваемого
входным фильтром, и усилителями, встроенными
в плату АЦП. Интуитивно ясно, что желательно
иметь максимально большой суммарный коэф-
фициент усиления, при котором еще не происхо-
дит ограничение сигнала, приводящее к нелиней-
ным искажениям. Впрочем, при наличии сильной
негауссовой импульсной помехи такое ограниче-
ние может оказаться даже полезным. Физическое
объяснение этого критерия связано с тем, что
значение квантованного сигнала складывается из
трех частей: полезного сигнала, атмосферного
шума и шума квантования. Первые две состав-
ляющие увеличиваются с увеличением коэффи-
циента усиления. Шум квантования имеет закон
распределения, близкий к нормальному со средне-
квадратичным отклонением равным LSB/2.
Отсюда видно, что увеличивая коэффициент уси-
ления, мы уменьшаем вклад шума квантования в
общий сигнал. В типичном случае широкополос-
ного входного фильтра полезный сигнал оказыва-
ется много меньше атмосферного шума. Из этого
следует, что не стоит добиваться большой раз-
рядности АЦП (т. е. малого LSB) и большого уси-
ления.
Может показаться, что большая разряд-
ность АЦП нужна для того, чтобы полезный сиг-
нал, лежащий ниже уровня шумов, был достовер-
но оцифрован с точностью, выше значения LSB,
но это совершенно необязательно. Шум кванто-
вания подчиняется тем же законам, что и атмо-
сферный. Это значит, что при корреляционной
обработке отношение сигнал/(шум атмосферный +
+ шум квантования) будет расти пропорциональ-
но корню квадратному от времени накопления
(количеству отсчетов, вошедших в обработку).
Осталась еще одна проблема, которую
надо решить при реализации блока ввода данных:
как обеспечить периодический запуск этой под-
программы, не связанный с работой других бло-
ков? Проще всего для этого создать отдельную
нить (thread). Это общий метод, реализующий
концепцию параллельного выполнения блоков
программы.
Сначала нужно описать прототип функ-
ции (у нас она называется TimerProc), которая
будет выполняться в этом отдельном потоке:
UINT TimerProc(LPVOID lParam).
Затем описываем само тело функции
TimerProc. Эта функция будет работать в еди-
ном для программы адресном пространстве, по-
этому внутри нее могут использоваться любые
глобальные переменные и массивы. Единствен-
ным параметром lParam, передаваемым в эту
функцию, скорее всего, воспользоваться не при-
дется.
Цикличность вызова блока ввода данных
обеспечивается применением бесконечного цикла
while:
UINT TimerProc(LPVOID lParam)
{// Описания локальных переменных
while (1) { Sleep(Millisec);
// Блок ввода данных
} //конец блока ввода
} // Конец функции TimerProc.
Системная функция Sleep с параметром
типа int приостанавливает работу нити на за-
данное число миллисекунд, обеспечивая перио-
дичность ее работы. Важно, что функция Sleep
не использует ресурсы процессора. Задержка вы-
бирается такой, чтобы по ее окончании заведомо
не произошло переполнение входного цикличе-
ского буфера.
Сама нить создается с помощью систем-
ной функции AfxBeginThread в начале работы
программы и, благодаря наличию бесконечного
цикла, будет существовать до ее окончания:
AfxBeginThread(*TimerProc,NULL,
THREAD_PRIORITY_TIME_CRITICAL).
Первым параметром является указатель
на созданную нами функцию TimerProc;
вторым параметром выбран NULL, так как мы не
собираемся передавать никаких параметров;
третий параметр – приоритет. Для случая ввода
данных, когда нельзя приостанвливать процедуру
обработки даже на системные операции
ввода/вывода, выбирается максимально возмож-
ный приоритет
THREAD_PRIORITY_TIME_CRITICAL.
Возможны еще следующие приоритеты:
THREAD_PRIORITY_LOWEST – для фоновых
задач и THREAD_PRIORITY_NORMAL (по умол-
чанию).
Функция AfxBeginThread имеет еще
три параметра, которые можно не задавать.
4. Блок предварительной обработки.
Этот блок работает именно с принятыми данны-
ми, поэтому естественнее всего помещать его в
таймерную функцию, рассмотренную в блоке
ввода данных, непосредственно за ним.
Ю. П. Галюк / Низкочастотный цифровой радиоприемник
_________________________________________________________________________________________________________________
75
Основная задача, которую выполняет
блок, – это цифровая фильтрация. Ее особенность
состоит в том, что массив отсчетов, который под-
вергается фильтрации, является циклическим,
поэтому использовать подпрограмму svmsse
нельзя. Вариант подпрограммы fircsse, учи-
тывающий этот факт, приведен в приложении 4.
Ее прототип объявляется следующим образом:
extern "C" void fircsse(int M, int N,
int P, float *x,float *y,float *z).
Как видно, в подпрограмме добавилось
2 параметра:
• M – определяет размер массива x в 2M
отсчетов;
• P – индекс ячейки массива x, с которой
начинается процедура (1). Смысл остальных
параметров тот же, что у подпрограммы svmsse.
Команда and eax,edx обеспечивает
очистку старших разрядов текущего индекса мас-
сива x (в регистре eax) после его изменения
(прибавления числа 4), что обеспечивает его цик-
личность.
Чтобы адрес ячейки массива x, на кото-
рую ссылается указатель P, был выровнен на гра-
ницу 16, необходимо, чтобы он делился на 4. Это
возможно, только если коэффициент децимации
кратен 4. В противном случае надо заменить ко-
манду movaps (в цикле суммирования) на более
медленную команду movups. Компилируется и
подключается к проекту подпрограмма так же,
как и svmsse.
Следующей по важности задачей блока
является формирование массивов фильтрованных
отсчетов заданной длины, используемых блоком
расчета текущих характеристик сигнала, который
является отдельным «оконным приложением».
После формирования очередного массива этому
приложению посылается, с помощью функции
PostMessage, запрос, одним из параметров кото-
рого может служить, например, указатель на этот
массив. Чтобы обеспечить непрерывность в обра-
ботке, при формировании этих массивов исполь-
зуется двойная буферизация, когда после запол-
нения первого массива начинается заполнение
второго; после заполнения второго массива снова
начинается заполнение первого и т. д. Проще все-
го двойную буферизацию можно организовать,
объявив двумерный массив с первой размер-
ностью 2. Теперь достаточно сначала присвоить
индексу i значение 0, а потом, при смене буфе-
ров, применять операцию i=1-i. Эта схема ра-
ботает как при формировании массива по извест-
ной временной диаграмме, так и в случае работы
в ждущем режиме, когда сигнал к началу выбор-
ки дается по некоторому условию, например, при
превышении входного сигнала заданного порога
срабатывания.
Блок может формировать и массивы не-
фильтрованных отсчетов, которые применяются
при исследовании статистических свойств вход-
ного шума.
5. Блок расчета текущих характери-
стик сигнала. Этот блок является «оконным
приложением» и инициируется запросом (mes-
sage), посылаемым из блока предварительной
обработки. Одним из его параметров является
адрес очередного массива, передаваемого на об-
работку. Дополнительно приложению доступны и
все глобальные переменные и массивы, исполь-
зуемые в других блоках программного комплекса.
Этот блок производит предварительную
обработку данных и вычисляет текущие значения
параметров сигнала. Окончательные значения
будут определены только после завершения цик-
ла накопления. Блок вызывается относительно
редко, поэтому в нем могут применяться сложные
алгоритмы обработки, связанные со спецификой
сигнала. Однако некоторые общие приемы мы
можем обрисовать.
При определении параметров периодиче-
ски повторяющихся одинаковых импульсов, что
характерно для навигационных систем, самым
эффективным способом накопления оказывается
простое сложение временных реализаций, отно-
сящихся к разным импульсам. Этот прием воз-
можен, только если на временной диаграмме им-
пульсы разделяет целое количество квантов вре-
мени. В противном случае каждую реализацию
придется обрабатывать по отдельности, усредняя
вычисленные параметры.
При обработке нефильтрованных отсче-
тов целесообразно организовать сбор информа-
ции о статистике входного шума (максимальный
по модулю уровень, процент клиппированных
отсчетов, гистограмма распределения уровня
сигнала). Эта информация может помочь выбору
правильного коэффициента усиления во входных
цепях приемника.
Полезным может оказаться и получение
усредненного спектра мощности входного шума,
для чего достаточно провести прямое преобразо-
вание Фурье массивов входных отсчетов и усред-
нить квадраты модулей спектральных компонент.
Об окончании процесса усреднения, оп-
ределяемого либо по количеству обработанных
реализаций, либо по достижении конца заданного
промежутка времени, извещается блок регистра-
ции и визуализации результатов посредством по-
сылки специального запроса через функцию
PostMessage.
6. Блок регистрации и визуализации
результатов. В этом блоке результаты обработки
записываются на магнитном носителе в формате,
удобном для дальнейшей обработки. Для этого
Ю. П. Галюк / Низкочастотный цифровой радиоприемник
_________________________________________________________________________________________________________________
76
каждая запись сопровождается ярлыком, в кото-
ром указывается время и дата наблюдения, а при
использовании нескольких однотипных приемни-
ков, работающих по единой программе, и иден-
тификатором самого приемника. Если дата на-
блюдения входит в название файла, то эти данные
следует размещать в следующем порядке: год,
месяц, день. В этом случае в оглавлении названия
файлов будут идти в порядке заполнения. При
большом объеме log-файлов, имеет смысл сохра-
нять результаты в какой-либо базе данных, ис-
пользуя SQL-запросы.
Эту же информацию можно выводить и
оперативно, на экран дисплея. Однако особен-
ность восприятия информации человеком диктует
свои требования к ее представлению:
− при возможности информацию следует
выводить в виде графиков, гистограмм, а не таб-
лиц;
− фон графиков необходимо делать белым;
− однотипные графики надо выводить в одно
окно разными цветами;
− окна вывода не должны иметь фиксиро-
ванный размер и положение – есть кнопка мини-
мизации;
− содержимое окон должно меняться доста-
точно часто – от нескольких секунд до минут.
Что имеет смысл выводить оперативно на
экран монитора? Прежде всего, это временные
записи наблюдаемых импульсов. В принципе,
можно график импульса вывести по точкам, ис-
пользуя функцию LineTo. Однако получившийся
график вряд ли будет «красивым», потому что
для графического отображения импульса жела-
тельно иметь 10÷20 точек на протяжении одного
периода. При линейной интерполяции между
точками график окажется «изломанным». Это
положение исправляют, применив интерполяцию
с помощью БПФ. Сначала делают прямое БПФ.
При обратном БПФ получается временной ряд в
исходных точках, а также в промежуточных. Для
этого дополняют массив частотных фурье-компо-
нент нулями, увеличив его размер в k раз, и делают
обратное БПФ с увеличенным в k раз количест-
вом точек. Для обеспечения правильной норми-
ровки делят на k полученный временной массив.
Очень информативным для человека мо-
жет оказаться график спектра мощности импуль-
са и график усредненного спектра мощности
входного шума.
Статистические свойства входного шума
(распределение амплитуд импульсов, интервалов
между ними и т. п.) оформляются в виде гисто-
грамм.
Интересной может оказаться и ампли-
тудно-частотная характеристика используемых
цифровых фильтров. Для ее получения достаточ-
но подвергнуть прямому фурье-преобразованию
массив (выровненных подпрограммой prepsse)
коэффициентов фильтра.
Если, как в случае приема сигналов
радионавигационной системой (РНС), целью
приема является оценка параметров передаваемо-
го сигнала известной формы, цифровая обработка
позволяет дополнительно оценить точность
определяемых параметров, т. е. отношение сиг-
нал/шум, или, по-английски, Signal-to-Noise
Ratio (SNR). Будем исходить из его определения:
SNR = Psignal / Pnoise, как отношение мощности сиг-
нала к мощности шума в реализации. Обычно
измеряется отношение сигнал/шум в децибелах
SNR = 10 log10(Psignal / Pnoise). (5)
Метод расчета мощности сигнала (числи-
тель дроби) зависит от вида этого сигнала. В наи-
более часто встречающемся случае радиоимпуль-
са известной длины и частоты мы сначала с по-
мощью процедуры синхронного детектирования
по формуле (4) вычисляем фурье-компоненту на
этой частоте X(ω). Энергия радиоимпульса ока-
зывается равной квадрату ее модуля
Eимп = │X(ω)│2, а мощность, понимаемая как
энергия, отнесенная к одному отсчету,
Pимп = │X(ω)│2/N.
Мощность шума (знаменатель дроби)
вычислить легко: это просто сумма квадратов
временных отсчетов: ./)()(∑= NixixPsum Так
как реализация состоит из смеси сигнала и шума,
необходимо вычесть из результата мощность сиг-
нала, полученную ранее, Pnoise = Psum − Psignal.
Теперь можно воспользоваться формулой (5) для
расчета отношения сигнал/шум. Эта характерис-
тика прямо влияет на априорную погрешность
определяемых параметров.
Выведению формул для оценки априор-
ных погрешностей амплитуды и фазы радио-
импульса нам помогут следующие физические
соображения: при узкополосной фильтрации шум
можно представить себе как радиоимпульс с час-
тотой, равной средней частоте фильтра, но со
случайной фазой, а весь входной сигнал пред-
ставляется в виде суммы:
),cos()(
)sin()()sin()(
ttA
ttAtAtx
nc
ns
ω
ωϕω
+
+++=
(6)
где A – амплитуда радиоимпульса; Ans и Anc – слу-
чайные независимые величины, распределенные
по нормальному закону. Из определения следует,
что мощность каждой из ортогональных ком-
понент шума равна половине дисперсии ампли-
туд Ans и Anc, а из независимостей распределения –
их равенство. Среднеквадратичное отклонение
(СКО) компонент шума вычисляется по формуле
.)( signalsumnoise PPP −==σ (7)
Ю. П. Галюк / Низкочастотный цифровой радиоприемник
_________________________________________________________________________________________________________________
77
Это СКО характеризует погрешность измерения
амплитуды: ΔA = σ. Просто из геометрических
соображений для случая большого отношения
сигнал/шум можно получить погрешность опре-
деления фазы (в радианах): Δϕ = ΔA/A = σ / A.
Везде под погрешностью понимается интервал, в
который с вероятностью 68 % попадает случай-
ная величина.
7. Пример: комплексный приемник
сигналов РНС «Loran-C» и «Альфа». Иллюст-
рировать изложенные в настоящей статье рецеп-
ты мы будем на примере цифрового регистратора
сигналов РНС «Альфа» и «Loran-C» [1].
Основной идеей, стоящей перед разра-
ботчиками при реализации проекта, была воз-
можность создания комплекса, способного анали-
зировать сигналы двух принципиально различных
систем (СДВ и ДВ) радионавигации, используя их
для определения состояния нижней ионосферы.
При реализации проекта за основу был
взят уже существующий комплекс – приемоинди-
катор РНС «Альфа». Трудности возникли уже при
реализации, казалось бы, технической задачи –
переходе на более современную программную
среду (с Visual Studio 6 и Compaq Fortran 6.5, на
VS2005 и Intel Fortran 11). Как выяснилось, был
изменен формат нескольких системных функций;
многие строковые функции объявлены как уста-
ревшие, и их пришлось заменить на более безо-
пасные аналоги. Использование компилятора Intel
Fortran 11, который совместим с VS2005, привело
не только к более компактному и быстрому коду,
но и помогло обнаружить несколько ошибок в
программе, которые не выявлялись предыдущей
версией компилятора.
Важной проблемой оказался выбор час-
тоты квантования АЦП. В индикаторе приема
РНС «Альфа» эта частота была равна 50 кГц, что
было связано с необходимостью фильтрации час-
тот 11,9; 12,6 и 14,9 кГц с полосой порядка 60 Гц.
Легко видеть, что при коэффициенте децима-
ции 100 ширина «гармошки» оказывается равной
250 Гц, а расстояние от рабочих частот до краев
своей «гармошки» оказывается не менее 100 Гц.
С другой стороны, длина получившегося после
децимации кванта времени составляет
20 мкс⋅100 = 2 мс. На длине реализаций (3,6 с) и
сегментов (0,2 и 0,4 с) укладывается целое число
таких квантов, что обеспечивает стабильность
положения диаграммы излучения. Размер фильт-
ра 1 000 обеспечивает ширину переходной зоны
≈ 25 Гц относительно краев среза полосовых
фильтров шириной 120 Гц.
Рабочей зоной системы РНС «Loran-C»
является окрестность частоты 100 кГц с полосой
20÷40 кГц. Длины реализаций отличаются для
разных цепочек станций, но всегда пропорцио-
нальны 10 мкс. Самым простым решением, удов-
летворяющим требованиям обеих РНС, явилось
увеличение частоты квантования в 10 раз, т. е.
500 кГц. Такую частоту легко формировать, ис-
пользуя в качестве опорного генератора сигнал от
цезиевого стандарта 5 МГц. Паразитная «зеркаль-
ная» частота относительно рабочей частоты
РНС «Loran-C» в 100 кГц составляет при этом
400 кГц, и для ее подавления достаточно приме-
нить очень простой аналоговый фильтр. Длина
кванта времени составляет при этом 2 мкс, удов-
летворяя условию, что для всех цепочек на длине
реализаций укладывается их целое количество.
Размер полосового фильтра для рабочей области
в окрестности 100 кГц был выбран порядка 200,
что обеспечивает полосу расфильтровки в окре-
стности частот среза фильтра равной 2,5 кГц. Де-
цимация сигнала не производится, и фильтруются все
входные отсчеты. Для РНС «Альфа» все параметры
фильтрации были увеличены в 10 раз: размер
фильтра стал равным 10 000, а коэффициент де-
цимации – 1 000.
Размер кольцевых буферов, используе-
мых для ввода данных от АЦП и цифровой фильт-
рации, был выбран в 512 K слов. При частоте
квантования 500 кГц массивы переполнятся через
1 с, поэтому блок ввода данных опрашивается в
4 раза чаще, каждые 250 мс.
Массивы фильтруемых данных для двух
РНС различны:
• Для РНС «Альфа» – это 3 массива, соот-
ветствующих трем рабочим частотам системы
длиной 900 чисел (3,6 с – цикл работы системы).
• Для РНС «Loran-C» фильтруется только
одна рабочая частота в окрестности 100 кГц. Для
каждой из цепочек станций создаются массивы
длиной, равной периоду повторения каждой це-
почки. Эти массивы суммируются циклически,
т. е. по достижении конца массива новые элемен-
ты не замещают ранее введенные значения, а
складываются с ними. Таких суммирований дела-
ется около 100.
Кроме того, поток входных нефильтро-
ванных отсчетов нарезается на массивы длиной
1 000, после чего они подвергаются операция
прямого БПФ, и квадраты спектральных компо-
нент (шаг 0,5 кГц) суммируются. Графики таких
усредненных спектров входного шума выводятся
в отдельном окне.
Все указанные действия (ввод данных,
фильтрация с децимацией трех частот для
РНС «Альфа», фильтрация частоты 100 кГц для
РНС «Loran-C», формирование массивов реали-
заций для дальнейшей обработки, суммирование
спектров мощности входного шума) производятся
в одной нити с критическим приоритетом.
Не понадобилось даже распределить эти, не свя-
занные между собой, задачи между разными ни-
тями.
Ю. П. Галюк / Низкочастотный цифровой радиоприемник
_________________________________________________________________________________________________________________
78
При запуске приемного устройства ини-
циализируется, кроме входного блока, еще одна
нить – программа расчета поправок к распростра-
нению для РНС «Альфа». Поправки меняются
крайне медленно (от изменения точки приема и
времени суток), поэтому задачу их вычисления
можно было сделать фоновой, выполняя в низко-
приоритетном режиме. В силу исторических при-
чин программа расчета поправок была написана
на языке ФОРТРАН, что не помешало включить
ее в один проект с основной программой на язы-
ке C++. Средством синхронизации, блокирующим
попытки одновременного обращаться к массиву
поправок из разных нитей, была выбрана так назы-
ваемая «критическая секция» (Critical Section),
входящая в набор инструментов Windows API.
Отдельной проблемой, которую необхо-
димо решать каждый раз при включении прием-
ного устройства, является установление диаграм-
мы излучения станций, так как приемник включа-
ется в произвольный момент времени. Эту проб-
лему можно решить только путем учета специфи-
ки работы конкретной системы. В РНС «Альфа»
методика поиска начала цикла системы в 3,6 с
основывается на том, что у ведущей станции фаза
первого сегмента излучения в 0,4 с на частоте
14,9 кГц меняется на π в каждой следующей
посылке. Начало цикла определяется как отсчет,
в котором модуль разницы ЦСД, вычисленного
по формуле (4) для реализации длиной 0,4 с
(200 отсчетов) и ЦСД, отстоящего от него на 3,6 с
будет максимальным.
Начальная привязка для РНС «Loran-C»
производится по похожему принципу. Фазы
16 импульсов, относящихся к ведущей и ведомым
станциям по-разному, но по известному закону,
меняют фазу внутри одной посылки. При поиске
положения ведущей и ведомых станций ищутся
максимумы сумм 15 коэффициентов корреляции
отрезка реализации, равного длине одного им-
пульса, с отрезками такой же длины, отстоящими
от исходного, согласно их диаграмме излучения.
Количество окон, в которые выводятся
результаты обработки, довольно большое. При
разработке дизайна окон применялось правило:
каждое окно отвечает за одну конкретную функ-
цию; содержимое окон не зависит друг от друга;
их положение и размер настраивается индивиду-
ально с помощью мыши. Окна создаются при
запуске приемника, и их нельзя удалить, можно
только свернуть. Только главное окно имеет сис-
тему меню, через которое можно изменить пара-
метры приемника, а также снять задачу. Обнов-
ляется содержимое окон при поступлении новой
информации. Для окон, связанных с РНС «Альфа»,
этот период составляет 3,6 с – цикл системы.
Интервалы обновления окон РНС «Loran-C» связаны
с номером каждой цепочки и составляют 13÷20 с.
В каждое такое окно выводится усредненный
график временной реализации, вид усредненных
импульсов ведущей и ведомых станций и для
сравнения эталонный импульс. График усреднен-
ного спектра мощности входного шума выводит-
ся в отдельное окно каждые 10 с.
Приложения
1. Подпрограмма svmsse скалярного произве-
дения массивов с использованием SSE-команд
(Ассемблер)
.686
.XMM
.MODEL FLAT,C
.CODE
;Объявление параметров функции smvsse ;и
способ их передачи (C)
smvsse PROC C USES esi edi ecx,\
N: DWORD,x: DWORD, y: DWORD,z: DWORD
mov esi,x
mov edi,y
xor ecx,ecx
xorps xmm1,xmm1
;Цикл суммирования, результат в xmm1
smv: movaps xmm0,oword ptr[esi+4*ecx]
mulps xmm0,oword ptr[edi+4*ecx]
addps xmm1,xmm0
add ecx,4
cmp ecx,N
jb smv
;Суммирование 4-х сумматоров xmm1
;Результат в младшей части xmm0
movhlps xmm0,xmm1
addps xmm0,xmm1
movaps xmm1,xmm0
shufps xmm0,xmm0,1
addss xmm0,xmm1
;Сохранение суммы в 4-м параметре (z)
mov esi,z
movss dword ptr[esi],xmm0
ret
smvsse ENDP
END
2. Подпрограмма lpsd вычисления коэффи-
циентов ФНЧ (язык C)
void lpsd(int mm, double t,
double bw, double *b)
// Программа вычисляет веса ФНЧ
// для окна Поттера P310
// Всего имеется 2*mm+1 весов
// Входные параметры подпрограммы:
// mm – размах фильтра
// t - интервал выборки в секундах
// bw – полоса пропускания в Гц.
// b - массив результата
{double pi=3.14159265358979;
double d[]=
{0.35577019, 0.2436983, 0.07211497,
0.00630165};
Ю. П. Галюк / Низкочастотный цифровой радиоприемник
_________________________________________________________________________________________________________________
79
int i,k;
double fact,fi,sum,sumg;
fact=2.0*bw*t;
b[0]=fact;fact*=pi;
for(i=1;i<=mm;i++)
{fi=i;b[i]=sin(fact*fi)/(pi*fi);};
b[mm]*=0.5;sumg=b[0];
for(i=1;i<=mm;i++)
{sum=d[0];fact=(pi*i)/mm;
for(k=1;k<4;k++)
sum+=2.0*d[k]*cos(fact*k);
b[i]*=sum;sumg+=2.0*b[i];};
for(i=0;i<=mm;i++) b[i]/=sumg;
return;
}
3. Подпрограмма prepsse подготовки коэффи-
циентов КИХ-фильтра, использующего SSE-инст-
рукции (язык C)
int prepsse(int mm,float *b,float *x)
// Входные параметры:
// mm – размер фильтра
// b – массив коэффициентов фильтра
// Выходные параметры (для svmsse):
// x – массив коэффициентов,
// память выделяется подпрограммой
// Возвращаемое значение (prepsse):
// длина массива коэффициентов
{int m,i,j=0;
// Вычисление длины массива
m=(2*mm+1)/4+1;m*=4;
// Выделение памяти под массив
x=(float*)_aligned_malloc(m*4,16);
// Заполнение левой половины
for(i=0;i<mm;i++) x[j++]=b[mm-i];
// Заполнение правой половины
for(i=0;i<=mm;i++) x[j++]=b[i];
// Дополнение недостающими нулями
while(j<m) x[j++]=0.0;
return m;
}
4. Подпрограмма fircsse фильтрации входных
отсчетов, находящихся в кольцевом буфере с
использованием SSE-команд (Ассемблер)
.686
.XMM
.MODEL FLAT,C
.CODE
;Параметры функции fircsse
;и способ их передачи (C)
fircsse PROC C USES esi edi ecx,\
M: DWORD, N: DWORD, P: DWORD,\
x: DWORD, y: DWORD,z: DWORD
mov ecx,32
sub ecx,M
mov edx,FFFFFFFFh
shr edx,cl ; edx - маска
mov eax,P
mov esi,x
mov edi,y
xor ecx,ecx
xorps xmm1,xmm1
;Цикл суммирования, результат в xmm1
fir: movaps xmm0,oword ptr[esi+4*eax]
mulps xmm0,oword ptr[edi+4*ecx]
addps xmm1,xmm0
add eax,4
and eax,edx
add ecx,4
cmp ecx,N
jb fir
;Суммирование 4-х сумматоров xmm1
;Результат в младшей части xmm0
movhlps xmm0,xmm1
addps xmm0,xmm1
movaps xmm1,xmm0
shufps xmm0,xmm0,1
addss xmm0,xmm1
;Сохранение суммы в 6-м параметре (z)
mov esi,z
movss dword ptr[esi],xmm0
ret
firsse ENDP
END
Библиографический список
1. Программно-аппаратный комплекс СПбГУ для исследо-
вания нижней ионосферы посредством радиоволн низко-
частотных диапазонов / Ю. П. Галюк, М. А. Бисярин,
Н. Ю. Заалов, Л. Н. Лутченко // Междунар. конф. «Электро-
магнитные методы исследования окружающего пространст-
ва» (EMES’2012) [Электронный ресурс]: тез. докл. –
С. 144–146. – Режим доступа: http://ri.kharkov.ua/emes/
EMES2012_Thesis.pdf. – Загл. с экрана.
2. Шилдт Г. MFC: Основы программирования / Г. Шилдт;
пер. с англ. под ред. В. Р. Гинзбурга. – К.: BHV, 1997. –
556 с.
3. Мешков А. Visual C++ и MFC: в 2 т. / А. Мешков, Ю. Тихо-
миров. – 2-е изд. – СПб: BHV, 2001. – 468 с. (Т. 1); 482 с (Т. 2).
4. Отнес Р. Прикладной анализ временных рядов. Основные
методы / Р. Отнес, Л. Эноксон; пер. с англ. под ред.
И. Г. Журбенко. – М.: Мир, 1982. – 432 с.
Рукопись поступила 28.08.2014.
Y. P. Galyuk
LOW FREQUENCY DIGITAL RECEIVER
Application of digital devices removes many experi-
mental obstacles, as the physical elements are replaced by their
virtual computer analogs. A receiver is realized in an ordinary
computer supplied by the ADC (analog-digital converter) board
and by the appropriate soft. Such a device appears to be much
cheaper than an analog one, since the computers and ADC boards
are universal pieces of equipment manufactured in great series,
and there is a substantial competition in the market. Tuning and
adjustments of a digital receiver is simpler than those of an ordi-
nary one and is made much faster: it is reduced to simple editing of
the program listing and its re-compilation. However, one must be
able to write the programs in the languages of high level and to
know the update techniques of signal processing. In the present
study, we provide optimal solutions for digital receivers. As an
example, we present the organization of a real VLF/LF receiver.
Ю. П. Галюк / Низкочастотный цифровой радиоприемник
_________________________________________________________________________________________________________________
80
Appendix contains the listings of typical program blocks in the
C/C++ and Assembler languages.
Key words: digital receiver, numerical signal
processing, real time processing, digital filtration, fast Fourier
transform.
Ю. П. Галюк
НИЗЬКОЧАСТОТНИЙ ЦИФРОВИЙ
РАДІОПРИЙМАЧ
Використання цифрових пристроїв позбавляє екс-
периментатора від багатьох труднощів, оскільки фізичні бло-
ки замінюються їх віртуальними комп’ютерними аналогами.
Радіоприймальний пристрій у такому випадку перетворюється
у звичайний комп’ютер, що оснащений платою аналогово-
цифрового перетворювача (АЦП) і відповідним програмним
забезпеченням. Такий приймач виявляється дешевший за
аналоговий, бо комп’ютери та плати АЦП завдяки їх універ-
сальності випускають великими партіями, а на ринку – вели-
чезна конкуренція. Налагодження і настройка цифрового
приймача, у порівнянні з традиційним, значно спрощується і
відбувається швидше; вони зводяться до простого редагуван-
ня тексту програми та її перекомпіляції. Однак при цьому
потрібно вміти програмувати на мовах високого рівня й вико-
ристовувати сучасні методи цифрової обробки сигналів.
У даній роботі описано оптимальні рішення для цифрових
радіоприймальних пристроїв і, як приклад, розглядається
організація реального СДВ/ДВ радіоприймача. У додатку
наведено тексти типових програмних блоків на мові С/С++ та
Ассемблер.
Ключові слова: цифровий радіоприймач, цифрова
обробка сигналів, реальний масштаб часу, цифрова фільтра-
ція, швидке перетворення Фур’є.
|