Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Кодирование по алгоритму Хаффмена

Читайте также:
  1. A)& Кодированием
  2. Алгоритм и требования к алгоритму (свойства алгоритма )
  3. Базовая идея алгоритма кодирования Хаффмена для двоичных кодов заключается в том, чтобы начинать с малого количества символов и переходить к большим количествам символов.
  4. ГЛАВА 6. Канальное кодирование (часть 1).
  5. ГЛАВА 7. Канальное кодирование (часть 2).
  6. Двоичное кодирование в компьютере
  7. Двоичное кодирование графической и звуковой информации.
  8. Двоичное кодирование звуковой информации
  9. Двоичное кодирование текстовой информации
  10. Двочное неравномерное кодирование без использования разделителей

31.07.2011 19:08 | Автор: Pashgan |

Аналоговый компаратор – это устройство, предназначенное для сравнения двух сигналов. Простейшая схема компаратора может быть построена на операционном усилителе без обратной связи. На один из входов операционного усилителя подается известное опорное напряжение, на другой - сравниваемый аналоговый сигнал, например сигнал с датчика. Аналоговый компаратор Аналоговый компаратор – это устройство, предназначенное для сравнения двух сигналов. Простейшая схема компаратора может быть построена на операционном усилителе без обратной связи. На один из входов операционного усилителя подается известное опорное напряжение, на другой - сравниваемый аналоговый сигнал, например сигнал с датчика.   Разберем, как работает эта схема. Поведение операционного усилителя без обратной связи описывается уравнением:   Uout = (Uin1 – Uin2)*G   где Uout – напряжение на выходе операционного усилителя, Uin1 – напряжение на неинвертирующем входе, Uin2 – напряжение на инвертирующем входе, G – коэффициент усиления с разомкнутой петлей обратной связи.   В инженерных расчетах коэффициент усиления идеального операционного усилителя (G) обычно принимается равным бесконечности. Мы возьмем реальный операционный усилитель - LM358. Его коэффициент усиления равен приблизительно 100000. Подадим на неинвертирующий вход усилителя опорное напряжение в 1.5 вольта, а на инвертирующий вход синусоидальный сигнал амплитудой 1 вольт и постоянной составляющей 1.5 вольта.   По приведенной выше формуле рассчитаем выходное напряжение операционного усилителя для двух случаев.   1) Uin2 < Uin1 на 1 мВ Uout = (Uin1 – Uin2)* G = 1 мВ * 100000 = 100 В   2) Uin2 > Uin1 на 1 мВ Uout = (Uin1 – Uin2)* G = -1 мВ * 100000 = -100 В   Это в теории, на практике выходное напряжение операционного усилителя естественно не может выйти за пределы питающих напряжений. Реальное выходное напряжение операционного усилителя в этих случаях будет равно его положительному +Usat или отрицательному напряжению насыщения –Usat (saturation - насыщение). У большинства операционных усилителей, включая и LM358, положительное и отрицательное напряжение насыщения при однополярном питании равно Vcc – (1..2) и 0 Вольт соответственно, где Vcc – это напряжение питания. Также существуют операционные усилители, у которых выходное напряжение насыщения практически равно напряжению питания (rail-to-rail усилители). Да, и не забудь, что на выходное напряжение усилителя оказывает влияние нагрузка. Низкоомная нагрузка на выходе усилителя будет уменьшать его выходное напряжение.   С учетом выше сказанного:   1) Uout = ~Vcc – 1.5= 5 – 1.5 = 3.5 В 2)Uout = ~0 В   То есть пока входной сигнал меньше опорного - на выходе операционного усилителя будет положительное напряжение насыщения. Как только входной сигнал превысит опорный – выходное напряжение операционного усилителя станет равно нулю.   Описанная схема представляет собой инвертирующий компаратор. Если мы поменяем источники напряжения местами, то получим неинвертирующий компаратор. Попробуй самостоятельно разобраться, как при этом поведет себя схема.   Компаратор можно использовать для обработки сигналов датчиков. Например, на компараторе можно построить простой датчик освещенности.     К сожалению, такая схема компаратора обладает существенным недостатком. При подаче на вход усилителя зашумленного сигнала, на выходе будут наблюдаться многократные переключения напряжения. Если выход операционного усилителя управляет электромагнитным реле, такое поведение схемы вызовет подгорание контактов реле.     Для устранения этих колебаний в схему добавляют управляемую положительную обратную связь.   Триггер Шмитта Триггер Шмитта – это компаратор с положительной обратной связью. В этой схеме часть выходного сигнала операционного усилителя подается на неинвертирующий вход и задает пороги переключения схемы.   Электрическая схема инвертирующего триггера Шмитта представлена ниже.   Разберемся, как она работает. Операционный усилитель у нас запитан от двуполярного 5-ти вольтового источника питания. На инвертирующий вход Uin2 подается синусоидальный сигнал амплитудой +-2 В. Резисторы R1 и R2 имеют номиналы 25 кОм и 10 кОм соответственно. Напряжение на неинвертирующем входе снимается с делителя напряжения подключенного к выходу операционного усилителя и мы можем рассчитать его значение для положительного и отрицательного напряжения насыщения.   1) Uin1 = +Usat*R2/(R1+R2) = 3.5*10/35 = 1 В   2) Uin1 = -Usat*R2/(R1+R2) = -3.5*10/35 = -1 В   Когда на выходе усилителя положительное напряжение насыщения – на неинвертирующем входе напряжение 1 В. Допустим, входной сигнал медленно нарастает от нуля. Пока напряжение сигнала меньше напряжения на неинвертирующем входе – ничего не происходит. Как только сигнал превысит порог в 1 вольт, выходное напряжение операционного усилителя «переключится» и станет равным отрицательному напряжению насыщения. Это изменит напряжение на неинвертирующем входе, оно станет равным (-1) вольт. Входной сигнал будет нарастать до своего максимум, а потом пойдет на спад. Когда его амплитуда станет меньше 1 вольта, на выходе усилителя будет по-прежнему отрицательное напряжение насыщения. И только когда входной сигнал пересечет порог (-1) вольт, выходное напряжение снова «переключится» и станет равным положительному напряжению насыщения. Естественно это повлечет за собой изменение порогового напряжения.. На графике ниже ты можешь видеть, как меняется выходной сигнал операционного усилителя в зависимости от входного.     Благодаря такому поведению схемы, зашумленный сигнал не будет вызывать колебаний на выходе усилителя.   Триггер Шмитта демонстрирует такое свойство систем, как гистерезис. Которое заключается в том, что реакция системы на текущее воздействие зависит от воздействия, действующего на нее ранее. То есть поведение системы зависит от ее истории. Если выразить поведение схемы в виде графика зависимости выходного напряжения от входного, то мы получим так называемую петлю гистерезиса.     Где Uht – верхний порог триггера Шмитта, Ult- нижний порог   Uht = +Usat*R2/(R2+R1) Uht = -Usat*R2/(R2+R1)     Еще одно свойство триггера Шмитта, возникающее вследствие положительной обратной связи – это увеличение скорость переключения выходного напряжения, по сравнению с простым компаратором. Как только выходное напряжение операционного усилителя начинает меняться, положительная обратная связь увеличивает разностное напряжение (Uin1 – Uin2) и еще больше изменяет выходное напряжение, что в свою очередь еще больше увеличивает разностное.   Как и простейшая схема компаратора, триггер Шмитта имеет «неинвертирующую версию», но здесь мы на ней останавливаться уже не будем. Теперь о недостатках схемы. Пороговые значения триггера Шмитта задаются с помощью делителя напряжения, и они симметричны относительно «нуля питания». Именно поэтому в схеме используется двуполярный источник питания. Хотелось бы иметь возможность запитывать схему от однополярного источника и задавать несимметричные пороговые напряжения. О расчете такой схемы и примерах ее использования в следующей статье….

 

AVR. Учебный курс. Использование аналогового компаратора

Опубликовано 13 Сентябрь 2008 автором DI HALT

Есть почти в каждой AVR ке, такая полезная приблуда как аналоговый компаратор. Это уже почти стандартное устройство и встречается очень часто во множестве разных контроллеров. Даже в древнем, как говно мамонта, АТ89С2051 он уже есть. Штучка прикольная, позволяет сравнивать два аналоговых сигнала и выносить свой вердикт 0 первый больше второго, 1 второй больше первого.

Применить его можно, например, чтобы отслеживать уровень заряда аккумулятора по просадке напряжения. Схема простейшая — стабилитрон создает опорное напряжение, которое всегда одиннаково, а напряжение с резистивного делителя зависит от входного напряжения.

Например, на входе у нас 8 вольт. Со стабилитрона, рассчитанного на 3.3 вольта, выходит всегда одно и то же напряжение — 3.3 вольта. А с симметричного резистивного делителя выходит половина напряжения то есть 4 вольта. 4 это больше чем 3.3, (3.3 — 4 = -0.7 результат меньше нуля) с компаратора выходит 0

Теперь если просядет батарейка и напряжение снизится до 6 вольт, то с делителя будет уже 3 вольта, а с опорного как было 3.3 так и осталось. Зато теперь на компараторе ситуация в корне поменялась — 3 меньше чем 3.3 (3.3 — 3 = 0.3 результат больше нуля), а значит на выходе у него будет 1

Вот так, например, можно легко и просто следить за питающим напряжением и выдавать сигнал тревоги если батарейка сядет.

Настройка компаратора в контроллере AVR ATMega16
Для других моделей AVR все очень и очень похоже, просто мне так удобней. Если будет затруднение спросишь в комментах.
Мега16 имеет на борту компаратор, со входами AIN0 (прямой вход) и AIN1 (инверсный вход) Чтобы компаратор заработал его выводы нужно подключить на вход (DDR =0) и отключить подтяжку до единицы (PORT =0).

Регистр конфигураций компаратора ACSR
Биты:

§ ACD включение компаратора 0 включен, 1 выключен. По дефолту там ноль, а значит при старте компаратор включен.

§ ACBG - подключение к прямому входу компаратора внутреннего источника опорного напряжения (ИОН) на 1.22+(-)0.05V. Если 0 то ИОН не подключен.

§ ACO — бит результата. Собственно, это и есть выход компаратора.

§ ACI — флаг прерывания. Я думаю, что ты уже привык к тому, что в AVR есть прерывание на каждый чих. Компаратор не исключение. Устанавливается по событию, сбрасывается после ухода на обработчик либо программно, как всегда, записью в него 1.

§ ACIE - где есть прерывание там должен быть и бит разрешения. Это он и есть. Установив в 1 мы разрешаем прерывания от компаратора. По дефолту, естественно, нуль.

§ ACIC — подключение компаратора к схеме захвата таймера1. При попадании сигнала на схему захвата текущее значение с таймера тут же тырится в специальный регистр захвата, а таймер продолжает считать дальше. А в привязке к компаратору это удобно когда нужно измерять длительности сигналов.

§ Биты ACIS1:ACIS0 определяет условие возникновения прерывания от компаратора:

§ 00 — любое изменение на входе.

§ 01 - зарезервировано для следующих поколений

§ 10 — переход с 1 на 0

§ 11 — переход с 0 на 1

Вот за что люблю АТМеги так это за фарш! Даже свой собственный источник опорного напряжения есть. Так что из схемы со стабилитроном можно смело выкинуть все, что касается стабилитрона:) Оставив только делитель, ну и подобрав плечи резисторного делителя так, чтобы получить напругу на выходе чуть выше чем 1.22V.
Мало того, если в контроллере есть АЦП, то на вывод AIN1 можно подключить ЛЮБОЙ вход АЦП. Нереально круто! Для того, чтобы это сделать нужно:

§ В регистре SFIOR (регистр специальных функций) выставить бит ACME (вроде бы так ракеты назывались в мультике про койота и страуса;))

§ Выключить АЦП, сбросив бит ADEN в регистре настроек АЦП (ADCSRA)

§ В регистре ADMUX в разрядах MUX2:MUX1:MUX0 указать номер входа АЦП.

Пример:
В качестве примера я возьму своего робота. Сварганив ему систему контроля за питанием. Напряжение с аккумулятора проходит через делитель 1.5:10 в результате на 12 вольтах у нас на выходе будет (1.5/(1.5+10))*12=1.56 и только при просадке напруги до 9.5 вольт на выходе делителя будет ниже 1.22 вольта. Заюзаю пока неиспользованный вход PC5 (это вход ADC5)
Заправлю его через АЦП в компаратор, а в качестве опорного напряжения возьму встроенный ION который посажу на AIN0 изнутри. При просадке напряжения буду зажигать контрольную лампу.

Что нам нужно:
Для начала подключить ИОН — бит ACBG
Далее, бит прерывания — в обработчике прерываний я включу лампочку
Ну и выставить условие по которому будет прерывание с 0 на 1. Дело в том, что на плюс-вход компаратора идет 1.22 с ИОН, а на минус-вход пойдет 1.5 с делителя. В результате 1.22-1.5<0, следовательно на выходе 0. Ну, а как только ситуация поменяется будет 1.

  ; Инициализирую компаратор LDI R16,(1<<ACBG)|(1<<ACIE)|(1<<ACIS1)|(1<<ACIS0) OUT ACSR,R16; Забрасываем в регистр   IN R16,SFIOR; Достаем SFIOR ORI R16,(1<<ACME); Выставялем в нем бит ACME OUT SFIOR,R16   ; АЦП у меня по дефолту вырублен, поэтому пока не напрягаюсь с его отключением LDI R16,5; подаю напругу на 5й вход АЦП OUT ADMUX,R16

Ну и собственно все, осталось только добавить в программу переход по вектору

  .ORG ACIaddr; Analog Comparator RJMP Battary_LOW   ;И добавить где нибудь в программе обработчик прерывания Battary_LOW: LIGHT_ON; Вызов макроса зажжения огня. RETI; Выход из прерывания.

Или вот, второй пример. Попроще.

На компаратор подается два напряжения. Одно опорное, со стабилизатора 3.3 вольта демоплатыPinboard. Второе с потенциометра, то которое мы сравниваем. Подаются напрямую на выводы компаратора AIN0 и AIN1
Когда напряжение с потенциометра выше чем 3.3 вольта с стабилизатора, то в компараторе у нас на выходе 0 (бит ACO=0). И наоборот. Также настроено прерывание так, чтобы при попадании в него происходила инверсия бита PD4 — на нем висит светодиод LED1

Код
Обработчик прерывания:

  COMP_OK: PUSHF; Сохранили флаги PUSH R17; Сохранили R17   INVB PORTD,4,R17,R16; Инвертировали бит PD4   POP R17; Достали все из стека POPF; И флаги тоже   RETI; Вышли

Инициализация периферии:

  ; Internal Hardware Init =======================================   ;Comparator Init OUTI ACSR,1<<ACIE|1<<ACIS1|1<<ACIS0; Разрешаем прерывание ; Ловим 0-1 переход. ; Ports Init SBI DDRD,4 SBI DDRD,7   SEI ; End Internal Hardware Init ===================================

Главная программа:

  ; Main ========================================================= Main: IN R16,ACSR; Взяли состояние компаратора ANDI R16,1<<ACO; Оставили только бит состояния   BST R16,ACO; Скопировали его в Т BLD R16,7; Выгрузили в 7й разряд R16   IN R17,PORTD; Взяли значение из PORTD ANDI R17,0b01111111; Подавили значение 7го разряда   OR R17,R16; Наложили на него значение ACO   OUT PORTD,R17; Вернули значение в порт.   RJMP Main

Светодиод LED3 показывает состояние бита ACO, а LED1 фиксирует заходы в обработчик прерывания компаратора. При этом наблюдается мерзкий эффект — когда сравниваемые напряжения на входах компаратора очень близки, то возникает дребезг. Т.е. мельчайшие помехи уже начинают играть роль и перевешивают чашу весов компаратора то в одну то в другую сторону. Возникает жуткий дребезг. Этот дребезг надо подавлять программно. Скажем игнорировать изменения сигнала если он чаще чем раз в несколько миллисекунд.

 

Наименование Описание Кол-во каналов Время ответа (мкс) Iпот. канал (мА)
LM111 Компаратор напряжения   0.10 5.10
LM119 Быстродействующий сдвоенный компаратор   0.08  
LM139 Счетверенный малопотребляющий компаратор с низким напряжением смещения   0.50 0.20
LM160 Быстродействующий дифференциальный компаратор   0.0130  
LM161 Быстродействующий дифференциальный компаратор   0.0140  
LM193 Сдвоенный малопотребляющий компаратор с низким напряжением смещения   0.40 0.20
LM211 Компаратор напряжения   0.10 5.10
LM219 Сдвоенный быстродействующий компаратор   0.08  
LM239 Счетверенный малопотребляющий компаратор с низким напряжением смещения   0.50 0.20
LM2901 Счетверенный малопотребляющий компаратор с низким напряжением смещения   0.50 0.20
LM2903 Сдвоенный малопотребляющий компаратор с низким напряжением смещения   0.40 0.20
LM293 Сдвоенный малопотребляющий компаратор с низким напряжением смещения   0.40 0.20
LM311 Компаратор напряжения   0.10 5.10
LM319 Сдвоенный быстродействующий компаратор   0.08  
LM3302 Счетверенный малопотребляющий компаратор с низким напряжением смещения   0.50 0.20
LM339 Счетверенный малопотребляющий компаратор с низким напряжением смещения   0.50 0.20
LM360 Быстродействующий дифференциальный компаратор   0.0130  
LM361 Быстродействующий дифференциальный компаратор   0.0140  
LM392 Малопотребляющий операционный усилитель/компаратор напряжения   1.50 0.50
LM393 Сдвоенный малопотребляющий компаратор с низким напряжением смещения   0.40 0.20
LM397 Компаратор напряжения общего назначения   0.25 0.25
LM613 Сдвоенный операционный усилитель, сдвоенный компаратор   0.75 0.1120
LM6511 180нс 3В Компаратор   0.18 2.70
LMC6762 Сдвоенный маломощный КМОП компаратор с Rail-to-Rail входом и двухтактным выходом     0.0060
LMC6772 LMC6772 - Сдвоенный маломощный КМОП компаратор с Rail-to-Rail входом и выходом открытый сток     0.0060
LMC7211 КМОП компаратор с Rail-to-Rail входом     0.0070
LMC7215 Маломощный КМОП компаратор с Rail-to-Rail входом и открытый сток/двухтактным выходом в TinyPak корпусе     0.0007
LMC7221 КМОП компаратор с Rail-to-Rail входом и выходом открытый сток     0.0070
LMC7225 Маломощный КМОП компаратор с Rail-to-Rail входом и открытый сток/двухтактным выходом в TinyPak корпусе     0.0007
LMS33460 Детектор напряжения < 3В     0.0010
LMV331 Низковольтный компаратор общего назначения в TinyPack корпусе   0.60 0.06
LMV339 Счетверенный низковольтный компаратор общего назначения в TinyPack корпусе   0.60 0.05
LMV393 Сдвоенный низковольтный компаратор общего назначения в TinyPack корпусе   0.60 0.0425
LMV7219 7нс, 2.7-5В компаратор с Rail-to-Rail выходом   0.01 1.10
LMV7235 45нс, низковольтный ультра-малопотребляющий компаратор с Rail-to-Rail входом и открытый сток/двухтактным выходом   0.0450 0.0650
LMV7239 45нс, низковольтный ультра-малопотребляющий компаратор с Rail-to-Rail входом и открытый сток/двухтактным выходом   0.0450 0.0650
LMV7255 1.8В низковольтный компаратор с Rail-to-Rail входом   0.40 0.0120
LMV761 Низковольтный прецизионный компаратор с двухтактным выходом   0.12 0.2750
LMV762 Низковольтный прецизионный компаратор с двухтактным выходом   0.12 0.2750
LP339 Ультра-малопотребляющий счетверенный компаратор     0.0213
         

 

 

Компаратор на транзисторе

Для сравнения двух напряжений не обязательно обращаться к операционному усилителю. С подобной задачей вполне может справиться простая и дешевая схема компаратора на транзисторе, которая представлена на рисунке.

Компаратор на транзисторе.

Транзистор p-n-p типа сравнивает опорное напряжение на эмиттере с частью контролируемого напряжения, поданной на базу через резистивный делитель R1R2. Когда напряжение на базе падает ниже опорного, транзистор открывается и выход компаратора (коллектор транзистора) переходит в состояние с высоким потенциалом. Такая схема может использоваться, например, для контроля напряжения батареи питания.

 

Сжатие

Сжатие – это любая процедура, уменьшающая потребности файла (или сообщения) в данных, серьёзно не ухудшающая целостность этого файла.

Сжатие является важной частью современной информационной технологии и широко используется для сокращения размера файла текста, музыки, графики, видео, а также больших наборов данных.

Существуют десятки методов сжатия, каждый из которых имеет свои преимущества и сферы применения.

Рассмотрим это явление с позиции теории информации.

Кодирование по алгоритму Хаффмена

Проблема отыскания моментальных кодов минимальной средней длины L. Как известно, H<=L<=H+ 1.

Для студента МТИ Хаффмена это была тема курсовой работы, выданная профессором Фэно. Работая над этой темой Хаффман (не зная, что Шеннон и Фэно сами уже предпринимали попытку решить эту проблему) открыл простой способ создания кода. С тех пор подобный подход к кодированию стал называться кодированием по алгоритму Хаффмена.

Алгоритм учитывает количество символов источника и их вероятности и создаёт код со средней длиной L, достаточно близкий к энтропии источника H.

Однако, следует отметить, что построенный по этой методике код может быть не уникальным, т.е. с одной и той же минимальной средней длиной можно создать несколько кодов (каждый из них будет называться кодом Хффмена).




Дата добавления: 2014-12-19; просмотров: 46 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.013 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав