Фрагмент программы
Контроллер работает от RC генератора с частотой около 5 МГц.
На внешний вход таймера подается стабильная частота 32768 Гц, она является основой для тактовой частоты выборки сигнала.
; Рабочие переменные
F700_1 EQU 10 – массив значений корреляции для sin-ов и cos-ов частот
F700_2 EQU 11
F900_1 EQU 12
F900_2 EQU 13
F1100_1 EQU 14
F1100_2 EQU 15
F1300_1 EQU 16
F1300_2 EQU 17
F1500_1 EQU 18
F1500_2 EQU 19
F1700_1 EQU 1A
F1700_2 EQU 1B
N1 EQU 1C
N2 EQU 1D
BYTE1 EQU 1C – Первая половина эталонной константы
BYTE2 EQU 1D – Вторая половина эталонной константы
MAX_L EQU 1E
POINTER EQU 1E – Указатель на таблицу эталонных констант
CNT_SAMPL EQU 1F – Счетчик тактов
DETECT:
CLRWDT
MOVLW B'00100000' ; Внешний тактовый сигнал по перепаду 0/1
OPTION ; сигнал делится на 2
MOVLW 10H
MOVWF FSR
DET1:
CLRF INDF ; Очистить рабочие ячейки
INCF FSR
BTFSS FSR,5
GOTO DET1
CLRF FSR
MOVLW .152 ; Загрузка количества тактов в выборке
MOVWF CNT_SAMPL
; Цикл выборки. Сигнал считывается каждые 61.0325 мкс
WAIT_CIKL:
MOVF TMR0,W ; Приход внешнего сигнала определяется, когда
BTFSC STATUS,Z ; таймер принял значение отличное от нуля
GOTO WAIT_CIKL
CLRF TMR0
MOVF POINTER,W
CALL TABL ; Выборка эталонной константы
MOVWF BYTE1
INCF POINTER
MOVF POINTER,W
CALL TABL
MOVWF BYTE2
; SIG – вход сигнала
BTFSC SIG ; Если сигнал равен биту в эталоне то этот бит превратить в 0
COMF BYTE1
BTFSC SIG
COMF BYTE2
; Скоректировать размещение для нечетных по порядку констант
BTFSS CNT_SAMPL,0
GOTO DO_SUM
INCF POINTER
SWAPF BYTE1,W
ANDLW B'11110000'
MOVWF BYTE1
SWAPF BYTE2
MOVF BYTE2,W
ANDLW B'00001111'
IORWF BYTE1
DO_SUM:
; Подсчет величин корреляции
; Инкрементировать величину корреляции каждый раз, когда сигнал совпадает с эталоном
BTFSS BYTE1,7
INCF F700_1
BTFSS BYTE1,6
INCF F700_2
BTFSS BYTE1,5
INCF F900_1
BTFSS BYTE1,4
INCF F900_2
BTFSS BYTE1,3
INCF F1100_1
BTFSS BYTE1,2
INCF F1100_2
BTFSS BYTE1,1
INCF F1300_1
BTFSS BYTE1,0
INCF F1300_2
BTFSS BYTE2,7
INCF F1500_1
BTFSS BYTE2,6
INCF F1500_2
BTFSS BYTE2,5
INCF F1700_1
BTFSS BYTE2,4
INCF F1700_2
DECFSZ CNT_SAMPL
GOTO WAIT_CIKL ; 60 тактов контроллера на один такт выборки. МАКСИМУМ!
; Коррекция смещения результатов
MOVLW F700_1 ; Установит указатель на первую рабочую ячейку
MOVWF FSR
MOVLW .12
MOVWF CNT_SAMPL ;Количество циклов 12
MOVLW .76 ;Вычитать константу 152/2=76
; 5 тактов
DET4:
SUBWF INDF,F ; ( INDF - W )
BTFSS STATUS,C
COMF INDF
INCF FSR
DECFSZ CNT_SAMPL,F
GOTO DET4
; 7*12 = 84 такта
; Вычисление и поиск пары максимальных корреляций
CLRF SAMPL_CTN
CLRF MAX_L
MOVLW B'00100000' ; Указатель частоты
MOVWF CNT_SAMPL ; Загрузить указатель частоты
; 4 такта
; Поиск двух максимальных величин корреляции
DET5:
DECF FSR
MOVF INDF,W
DECF FSR
ADDWF INDF,F
MOVF SAMPL_CTN,W
SUBWF INDF,W ; ( [INDF] - SAMPL_CTN ) C=1 IF INDF>=SAMPL_CTN
BTFSS STATUS,C
GOTO DET6
MOVF SAMPL_CTN,W ; Сдвиг предыдущего верхнего максимума
MOVWF MAX_L ; в нижний максимум
MOVF N1,W ; Сдвиг соответствующего указателя частоты
MOVWF N2 ;
MOVF INDF,W
MOVWF SAMPL_CTN
MOVF CNT_SAMPL,W
MOVWF N1
GOTO DET7 ; Если величина попала в верхний максимум то она
DET6: ; уже не может быть записана в нижний
MOVF MAX_L,W
SUBWF INDF,W ; ( [INDF] - MAX_L ) C=1 IF INDF>=MAX_L
BTFSS STATUS,C
GOTO DET7
MOVF INDF,W
MOVWF MAX_L
MOVF CNT_SAMPL,W
MOVWF N2
DET7:
BCF STATUS,C
RRF CNT_SAMPL,F
BTFSS STATUS,C
GOTO DET5
; 22*6 = 132 такта
; Исходя из найденных частот с максимальными величинами корреляции
; по таблице вычисляем соответствующую цифру
MOVF N1,W
IORWF N2,F
CLRF SAMPL_COD
DET8:
MOVF SAMPL_COD,W
CALL TABL_CIPH
SUBWF N2,W ; N2 - W
BTFSC STATUS,Z
GOTO DET9
INCF SAMPL_COD
MOVF SAMPL_COD,W
XORLW .12
BTFSS STATUS,Z
GOTO DET8
MOVLW 0FFH
MOVWF SAMPL_COD
CLRF SAMPL_CTN
; 16*12 = 192 такта
DET9:
; Выход SAMPL_COD содержит цифру из диапазона 0..Bh, если 0FFh, то цифра не определена
; Максимальная продолжительность обработки цифры 417 тактов
RETLW 0
Как работает АОН
Вступление. 1
Простой пример оптимального решения. 1
Оптимальное обнаружение сигнала, о котором кое-что известно. 3
Почему некоторые вещи лучше делать в SIMULINK.. 6
Моделирование. 6
Результаты моделирования. 8
Реализация ядра алгоритма на PIC16C58. 8
Фрагмент программы.. 9
Моделирование
Ниже представлена схема созданная в среде SIMULINK и изображающая модель процесса генерирования и декодирования посылки АОН. Модель, естественно, отражает математическую основу процесса, а не скажем, физическую структуру некоего абстрактного устройства, т.е. здесь не стоит искать аналогии с функциональными электронными блоками, хотя в некоторых случаях это возможно. Как видно из схемы здесь можно варьировать множество параметров модели? включая: период дискретизации сигнала в АОНе, длительность анализируемой выборки, кодируемую числовую последовательность, продолжительность частотного пакета, мощность шума, амплитуду частот в пакете, время моделирования, гистерезис компаратора АОНа. Не составляет труда заменить компаратор в модели на АЦП.
Результатом моделирования является вычисляемый параметр, изменяющийся после каждой анализируемой выборки и определяющий уверенность приема сигнала определенной частоты в данный момент.
На выходе модели стоит блок вывода графиков уверенности приема всех 6-ти частот стандарта АОНа после каждого цикла анализа поступающего сигнала. А все это ради того, чтобы определить, где же та граница, которая позволит принять решение о приеме ожидаемого сигнала и возможно ли ее определение вообще при заданных условиях.
Оптимальное обнаружение сигнала, о котором кое-что известно
В применении к АОНу в качестве измеренного уровня сигнала выражаемого числом выступает реализация сигнала на интервале времени выражаемая функцией.
Рассмотрим сигнал, генерируемый при передаче цифры 1 в стандарте АОНа, на интервале 10 мс
-временной интервал | -количество выборок | ||||||||||
- наложим шум где m – мат. ожидание, s- стандартное отклонение | |||||||||||
- верхний график, реализация сигнала в смеси с шумом - нижний график, реализация шума | |||||||||||
Вся крива, изображающая сигнал в совокупности, называется реализацией случайной функции. Свойства случайных функций изучаются в разделе случайные функции теории вероятностей. Наиболее полезный раздел - спектральная теория стационарных случайных функций. К сожалению, это довольно объемная теория и в двух словах ее здесь не перескажешь. Достаточно сказать, что сигнал рассматривается как стационарная случайная функция (поскольку случайны фаза и амплитуда), а шум как белый гаусовский шум с ограниченным спектром.
В случае с АОНом нам надо принять решение является ли наблюдаемая нами реализация шумом или смесью сигнала с шумом. Под сигналом мы здесь принимаем одну из тональных частот присутствующую в сигнале АОНа. Следовательно, нам надо принять 6-ть решений для каждой частоты: 700, 900, 1100, 1300, 1500, 1700 Гц.
Доказано, что плотность вероятности реализации гаусовского шума n1 (t) выражается формулой | |||
Где N0 - спектральная интенсивность шума, k - постоянный множитель не зависящий от t .
Индекс 1 при n обозначает одномерное распределение. |
Если проще сказать, то есть формула с помощью которой можно вычислить отношение правдоподобия основываясь на реализации сигнала на интервале времени и знании об интенсивности шума. Отношение правдоподобия L(u) выглядит следующим образом:
Где u1 (t) - реализация принятого сигнала, v1 (t) - реализации ожидаемого сигнала, k - постоянный множитель, не зависящий от t , N0 - спектральная интенсивность шума.
Запишем формулу ожидаемого сигнала
Из формулы видно, что выражение под корнем можно вывести из всех остальных составляющих в формуле, таким образом, определив структуру оптимального обнаружителя
Приведенная формула позволяет определить структуру оптимального фильтра, но в реальных условиях недостаточно адекватна. С одной стороны реальный шум весьма далек от белого, с другой, здесь не учтено влияние помех и соседних частот посылки АОН. Поэтому остается необходимость в имитационном моделировании, которое дало бы ответы на вопрос о выборе оптимальной границы в условия влияния разных факторов, не учитываемых формулой.
Но для начала проверим, какое влияние окажет на спектр сигнала предельное ограничение его амплитуды, которое производится компаратором.
сформируем предельно ограниченный сигнал | |
- спектр входного сигнала | |
- спектр предельно ограниченного сигнала | |
Почему некоторые вещи лучше делать в SIMULINK
Продолжать можно и в Mathcad, но количество формул и специальных символов перевалит тот предел, за которым теряется смысл изложения. Кроме того, попытка имитационного моделирования в MathCad приведет все к тому же традиционному программированию, но только на довольно специфичном и ограниченном языке. Пакет SIMULINK входящий в комплекс MatLab позволяет создавать модели алгоритмов обработки сигналов, представляя отдельные математические и логические операции в виде блоков. Последовательность выполнения определяется однонаправленными связями между блоками. Связи могут объединяться в шины (толстые линии), а один блок может параллельно и независимо обслуживать все связи в шине, что называется векторизацией. Таким образом, можно легко осуществить, как изменение параметров модели, так и ее структуры. Вообще моделирование несколько смахивает на аналогичные действия в пакетах моделирования электронных схем MicroCap, ElectronicWorkBench и т.д..
Приложения
Файл AONmodel.mcd содержит исходные формулы, описывающие процесс оптимального обнаружения
Файл AONmodel.mdl представляет собой модель в формате SIMULINK 2.2
Обновлено: October 4, 2005 | Автор: AlexandrY |
Простой пример оптимального решения
Допустим, мы имеем о сигнале следующую информацию: сигнал может иметь только два уровня напряжения 0 или 1 с равной вероятностью, смена уровней происходит мгновенно и в случайные моменты времени, при проходе по линии связи сигнал складывается с белым шумом с известным законом плотности распределения вероятностей. Задача - периодически измерять значение приходящего сигнала искаженного шумом и делать оценку его истинного значения при минимуме ошибок.
-количество выборок | |||
-вероятность появления сигнала с уровнем 1 | |||
-используем биноминальное распределение для моделирования сигнала | |||
Гистограмма сигнала. h – массив данных для построения гистограммы (см. исходный mcd файл) | |||
- смоделируем шум где m - мат ожидание, s- стандартное отклонение | |||
Гистограмма шума | |||
- выходной сигнал равен смеси сигнала с шумом | |||
Гистограмма смеси сигнал-шум |
Понятно, что плотность распределения наблюдаемого сигнала подчиняется закону полной вероятности и выражается формулой
- здесь:
и - условные плотности вероятности наблюдаемого сигнала при условии, что истинный имеет уровень 0 и 1 соответственно.Задача наблюдателя определить некоторую границу относительно которой принимается решение об истинном значении сигнала. Граница должна быть оптимальной в смысле наименьшего количества ошибок в процессе оценки сигнала.
Допустим:
- выбранная граница. Если значение сигнала превысило границу, то считаем, что истинное значение равно 1, если нет, то считаем истинным значением 0 | |||
При данной границе вероятность ошибки будет равна суме площадей заштрихованных красным и зеленым цветом. Площадь красной области равна вероятности суждения о том, что истинное значение сигнала равно 0, в то время как он равен 1. Площадь зеленой области равна вероятности суждения о том, что истинное значение сигнала равно 1, в то время как он равен 0.
Очевидно, что минимальная вероятность ошибки будет в том случае, если граница будет выбрана в той же точке, где пересекаются кривые двух распределений. Отношение p1(x)/p0(x)
называют отношением правдоподобия. Оно показывает насколько правдоподобнее предположение о приеме сигнала 1, чем альтернативное предположение о приеме сигнала 0.
Данный подход называют байесовым методом, упоминание о котором можно встретить в некоторых публикациях по АОНам.
Однако вся сложность алгоритма определяется не им.
Операция умножения, требующаяся при расчете корреляции, крайне нежелательна в применении к микроконтроллерам, поскольку требует значительного времени на выполнение. Но для двоичных данных поступающих с компаратора ее можно заменить операцией сложения по модулю 2 (обозначается XOR или Å).
Данная операция применяется во многих АОН-ах. В приведенном здесь примере операция XOR напрямую не применяется, а заменена операциями сравнения и инкремента в связи с необходимостью экономии времени. Часто алгоритм упрощают, не включая в него квадратор, к значительному ухудшению результатов это не приводит. Для ускорения вычислений во многих АОН-ах применяют таблицы эталонных сигналов. Для двоичных данных, это значения единичных меандров синусов и косинусов 6-и частот для каждого такта принимаемого сигнала. Следовательно, на каждый такт необходима 12-и битная константа, содержащая по биту на sin и cos каждой частоты. Для оптимального использования памяти в приведенной программе константы хранятся в таблице с наложением первой тетрады четной по порядку константы на пустую последнюю тетраду нечетной.
Результаты моделирования
Здесь для каждой частоты построен своим цветом график уверенности приема. Как видно, для двух частот с наибольшими уверенностями приема значения достаточно сильно превосходят значения остальных на интервалах каждой частотной посылки. Это убеждает в существовании способа надежно идентифицировать частоты в посылке.
Вступление