|
|
  |
Практическое использование схемы/блока захвата в 16ти разрядных таймерах AVR Mega |
|
|
|
May 26 2009, 12:26
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Цитата(Rst7 @ May 26 2009, 16:11)  Для избавления от дрожания по времени момента считывания регистров относительно времени возникновения события. Джиттер, если знакомы с таким словцом. Понятно. Словцо мелькало пару раз мимо сознания Ну тогда слушайте, как я сделаю: Сконфигурирую ан. компаратор на внутренний источник опорного напряжения, и на работу с схемой захвата Т1. Сконфигурирую Т1 на нужную мне скорость счета и на захват по событию от компаратора. По фронту входного сигнала буду "выпадать" в прерывание "счетный регистр в регистре захвата" ну и дальше уже обрабатывать значения счетчиков, при этом сэкономлю на "теле" внешнего компаратора и избавлюсь от джиттера?
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
May 26 2009, 12:36
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(Буратино @ May 26 2009, 15:26)  Сконфигурирую Т1 на нужную мне скорость счета Если Вы сказали про 50-100кГц и "определять частоту", скажите и верхний лимит времени измерения - может Вам проще счетчик событий сделать а не интервалы мерять? Цитата при этом сэкономлю на "теле" внешнего компаратора и избавлюсь от джиттера? И надо уточнить, устроит ли Вас стабильность внутренней опоры компаратора. А то вместо джиттера получим другую напасть... Упс, опередили
|
|
|
|
|
May 26 2009, 12:48
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Время измерения частоты должно быть минимальным, но достаточным для точного расчета. Считать события наверное не получится, так как за определенный промежуток времени может пройти столько же импульсов помехи (а помехи есть, и много) сколько прошло бы и фронтов у полезного сигнала. Качество внутренней опоры вполне подходит, ведь мне необходимо формировать с ее помощью фронт для схемы захвата, которая будет сохранять зн. счетчика всегда с одной и фиксированной погрешностью. Пральна?
Сообщение отредактировал Буратино - May 26 2009, 12:57
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
May 26 2009, 12:49
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Время измерения частоты должно быть минимальным, но достаточным для точного расчета. Цифры желаемой точности в студию. Цитата Пральна? Не совсем. Шум еще есть. Как опоры, так и компаратора.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
May 26 2009, 12:56
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(Буратино @ May 26 2009, 15:48)  Время измерения частоты должно быть минимальным, но достаточным для точного расчета. Это словоблудие  Знаете, как его расчитать, с учетом того, что будете усреднять измеренные интервалы? Я лично - не знаю, т.к. исходной информации маловато. Цитата Считать события наверное не получится, так как за определенный промежуток времени может пройти столько же импульсов помехи Как все запущено (с сигналом, не у Вас  ) Вам там корреляционный прием случайно не нужен? Цитата Качество внутренней опоры ... Пральна? До тех пор пока Вас не припечет долговременная стабильность опоры (флуктуации в течение времени порядка времени измерения). Это ж тоже надо конкретизировать в Вашем ТЗ.
|
|
|
|
|
May 26 2009, 13:12
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Цитата(Rst7 @ May 26 2009, 17:00)  Огласите соотношение сигнал/шум на входе.  , ну как вам сказать..я не знаю В идеале никакого шума нет вообще, но в реале, всякие там мобильники, техника работающая - создают помеху, которую усиливает мой усилок (Именно он готовит сигнал для последующей обработки. Я обсуждал в разделе схемотехники его устройство) Сначала я хотел фильтровать все , что не 50kHz, но потом понял, что помеха, если она есть, "задавит" полезный сигнал на входе усилка все равно! И нет никакого смысла пытаться аппаратно от нее избавиться до процессора. Лучше сделать проще схемотехнику девайса, тем самым ув. ее надежность. Другими словами представьте себе что шума нет
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
May 26 2009, 13:40
|

Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581

|
Случайно, не об этой ли проблеме идет речь?
--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
|
|
|
|
|
May 26 2009, 13:43
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Цитата(Rst7 @ May 26 2009, 17:34)  Если Вы хотите просчитать поведение схемы перед тем, как ее создавать - то надо. Ну а так, можете конечно попробовать замерить 4 интервала и по сумме значений определить частоту... Да, спасибо, буду значит разводить плату. НЕобходим был беглый взгляд профи на "идею". Слово идея я специально взял в кавычички, ибо ровно как и термин "джиттер", оно лишь только пролетаем изредка мимо моего сознания.
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
May 26 2009, 13:50
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Случайно, не об этой ли проблеме идет речь? Если о ней - то там же цифры более вменяемые. 0.05-0.1 секунды - это уже что-то, 5-10 периодов разности частот. Корреляционный прием спасет отца русской демократии  Устроит ли топикстартера принятие решения о наличии частоты в 50кГц или 51кГц за 1мс? Если да, то можно достаточно вменяемый код корреляционного приемника сделать. Правда, придется занять SPI, один таймер и сделать внешний компаратор. PS и где-то ~512 байт флеша на таблички.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
May 26 2009, 13:58
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Цитата(Rst7 @ May 26 2009, 17:50)  Устроит ли топикстартера принятие решения о наличии частоты в 50кГц или 51кГц за 1мс? Если да, то можно достаточно вменяемый код корреляционного приемника сделать. Правда, придется занять SPI, один таймер и сделать внешний компаратор. PS и где-то ~512 байт флеша на таблички. Максимально допустимое время расчета частоты нужно считать, при этом учитывая массу факторов, которые при определенном стечении обсттоятельств, могут сложиться в одну большую... Сказал 5 периодов так как меньшее время уже совсем глупасть. SPI занят радиоканалом, с таймерами тоже не густо, зато флеши свободной больше чем у меня на диске С. Но для общего развития намекните приблизительно, как эТО делают при помощи корреляционного метода ? Спс. Пауза между измерениями допустима.
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
May 26 2009, 14:03
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата SPI занят радиоканалом В принципе SPI нужен только для разгрузки проца. Можно будет сразу по 8 бит обрабатывать. USART в режиме SPI есть? Цитата с таймерами тоже не густо Таймер нужен для генерации тактового сигнала SPI в режиме Slave (потому что в мастере есть дырки). Если использовать USART в режиме SPI, то таймер не нужен.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
May 26 2009, 14:06
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Цитата(Rst7 @ May 26 2009, 18:03)  В принципе SPI нужен только для разгрузки проца. Можно будет сразу по 8 бит обрабатывать. USART в режиме SPI есть?
Таймер нужен для генерации тактового сигнала SPI в режиме Slave (потому что в мастере есть дырки). Если использовать USART в режиме SPI, то таймер не нужен. USART в режиме SPI есть. Но у меня тут кошка рядом сидела, так она ушла...  Goodefne, думаю, что пролазят
Сообщение отредактировал Буратино - May 26 2009, 14:08
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
May 26 2009, 14:11
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Но для общего развития намекните приблизительно, как эТО делают при помощи корреляционного метода ? Спс. Общий метод таков - результат интегрирования произведения входного сигнала на искомый - суть оптимальный приемник. Правда, есть тонкость, связанная с неопределенностью фазы входного сигнала относительно искомого (опорного). Поэтому Вам нужно будет сделать 4 перемножителя - две пары на опорные меандры с частотами 50 и 51кГц. В каждой паре 2 опорных сигнала с одной частотой должны быть сдвинуты на 90 градусов относительно друг друга (обычное обозначение I и Q). После интегрирования у Вас будет 4 значения, I и Q для 51кГц и I,Q для 50кГц. Затем P51=I51^2+Q51^2 - суть мощность сигнала на частоте 51 кГц с полосой, равной 1/t, где t - время интегрирования, аналогично P50=I50^2+Q50^2 - для 50кГц. Затем сравниваете P50 и P51 между собой - кто больше, та частота и есть. Только еще надо ввести минимальный порог по мощности. В общем, звучит мрачно, но программно не сложно. Цитата USART в режиме SPI есть. Но у меня тут кошка рядом сидела, так она ушла... Ээээ?
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
May 26 2009, 14:20
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(Буратино @ May 26 2009, 16:58)  Но для общего развития намекните приблизительно, как эТО делают при помощи корреляционного метода ? Спс. Пауза между измерениями допустима. Формируете табличку образцового сигнала (50 кГц) и его же, сдвинутого на 90 градусов по фазе. Если частота выборки 1.6 Мгц не вызывает возражений, то это Код SG50_sin: .db 0x00,0x00,0xff,0xff // итд до тех самых 5 периодов (т.е. это будет 20 байт)
SG50_cos: .db 0x00,0xff,0xff,0x00 // итд тоже 20 байт Далее, накапливаете отсчеты из компаратора в сдвиговый регистр (направление сдвига вправо), по заполнению буфера делаете XOR с SG50_sin и сохраняете(канал 1), и тоже самое с SG50_cos (канал 2). Прогоняете это все дальше - до конца таблиц образцовых сигналов. Потом считаете кол-во единиц в каждом канале, пусть они будут X и Y. Полученные числа - знаковые, со смещением для нашего случая 5*16 = 80 Выход фильтра AMP=(X^2 + Y^2) Если Вам надо четко отличить 50 от 51 - это таки 1 мс, и добавление такой же таблицы образцового сигнала для 51 кгц. Решение - победит тот, у которого AMP поболе Но можно оценивать поведение AMP от измерения к измерению - его дисперсию. Тогда Вам нужен порог чувствительности и критерий оценки этой самой дисперсии. В общем случае это мрачно, но в Вашем - помочь может
|
|
|
|
|
May 27 2009, 07:13
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Давайте попробуем. Сначала немного теории на пальцах. Если бы мы точно знали фазу начального сигнала, то интеграл ) , где A - входной сигнал,  - круговая частота,  - фаза сигнала, был бы равен значению амплитуды полосы спектра во входном сигнале с центральной частотой  и полосой, равной  , где t - время интегрирования. Но мы не знаем фазу сигнала. Поэтому делается два интегратора ) ) Второй отличается от первого сдвигом фазы опорного сигнала на 90 градусов. Если быть точным, то I и Q представляют из себя действительные и мнимые значения результата дискретного преобразования Фурье для выбранной полосы спектра. Для того, чтобы получить реальную амплитуду необходимо вычислить длинну вектора с координатами I и Q  Для наших целей корень вполне можно опустить. Итого, для определения двух частот необходимо вычислить четыре интеграла ) ) ) ) А затем, после интегрирования, получить значения мощностей   Далее, банально сравниваем Код if ((A50>THRESH)||(A51>THRESH)) { if (A50>A51) { //Есть сигнал с частотой 50кГц } else { //Есть сигнал с частотой 50кГц } } else { //Сигнала нет } где THRESH - порог обнаружения. Теперь, от математики надо перейти к реальной жизни. Во-первых, определиться с параметрами. Т.к. полоса обнаружения определяется временем интегрирования, то хорошим выбором будет 1мс. Это эквивалентно полосе в 1кГц. Для простоты реализации на восьмибитных процессорах имеет смысл выбрать частоту дискретизации, ну например, 256кГц (это примерно 5 отсчетов на период сигнала). Далее, вместо полноценного АЦП будем использовать компаратор. Его можно рассматривать как однобитный АЦП. Так как сигнал имеет разрядность один бит, то разрядность опорного сигнала тоже нужно брать 1 бит (больше просто нет смысла). Причем, этот бит определяет просто знак. Т.е. если бит равен 0 - значение сигнала равно -1, если бит равен 1 - значение сигнала равно +1. Теперь нарисуем таблицу умножения в наших терминах Код a,b,a*b: -1,-1,+1 +1,-1,-1 -1,+1,-1 +1,+1,+1 и заменим значения уровня сигнала (+1/-1) на битовые значения(1/0) Код a,b,a*b: 0,0,1 1,0,0 0,1,0 1,1,1 Если мы внимательно посмотрим на таблицу, то увидим, что a*b=not (a xor  . Т.к. входной сигнал мы можем безболезненно проинвертировать, то not можно убрать. Значит, все умножение входного сигнала на опорный сводится к выполнению операции xor между значениями. Следовательно, каждый интегратор в коде будет представлять из себя Код I+=signal^reference; , где I - интегратор, signal - выборка сигнала, reference - табличное значение опорного сигнала. Тут надо обратить внимание на то, что после интегрирования необходимо вычесть из интегратора половину от количества выборок. Происходит это по простой причине - мы вместо прибавления +1 и -1 к интегратору прибавляем либо 1, либо 0, что дает сдвиг на полдиапазона. Либо можно начальное значение интегратора задавать не 0, а минус половина количества выборок. Теперь про оптимизацию. Если делать интегрирование на каждой выборке - это будет большой перерасход ресурсов. Посему, надо обрабатывать сразу 8 бит. Для начала - о получении 8ми бит. Надо просто выход компаратора подключить, например, ко входу MOSI, а на вход SCK подать нужную частоту выборок. В результате, в каждом байте, читаемом из SPDR будет получено 8 выборок подряд. Теперь о обработке. Код I+=bitcount_table[byte_signal^byte_reference] , где byte_signal - 8 выборок сигнала в виде одного байта, byte_reference - 8 выборок опорного сигнала в виде одного байта, bitcount_table - таблица длинной 256 байт, каждый байт которой равен количеству единичных бит в индексе. Теперь попробуем написать код интегратора более близкий к реальности. При этом для простоты разместим 2 таблицы непосредственно в конце флеша, причем, таблица опорных сигналов будет представлять из себя записи по 4 байта, каждый байт - восемь выборок для сигналов I50,Q50,I51,Q51 соответственно, общей длинной ((256 выборок всего)/(8 выборок в байте))*(4 сигнала)=128 байт Код typedef unsigned char UREG; typedef signed char REG; typedef signed char INT8; typedef unsigned char UINT8;
volatile UINT8 I50; volatile UINT8 Q50; volatile UINT8 I51; volatile UINT8 Q51;
__flash UINT8 bitcount_table[256] @ FLASHEND-0xFF; __root __flash UINT8 reference_sig[128] @ FLASHEND-0xFF-0x80;
volatile UINT8 Int_Idx; //Начальное значение - 0x80
__interrupt void ProcessIntegrators(void) { UINT8 __flash *r=(UINT8 __flash *)(FLASHEND-0xFF-0x100)+Int_Idx; //Текущее положение в таблице опорных сигналов UREG sig_i50; UREG sig_q50; UREG sig_i51; UREG sig_q51; sig_i50=sig_q50=sig_i51=sig_q51=SPDR; sig_i50^=*r++; //Операция умножения входного сигнала на опорные sig_q50^=*r++; sig_i51^=*r++; sig_q51^=*r++; Int_Idx=(int)r; //Сохранение указателя I50+=bitcount_table[sig_i50]; //Собственно интегрирование Q50+=bitcount_table[sig_q50]; I51+=bitcount_table[sig_i51]; Q51+=bitcount_table[sig_q51]; } Некоторое колдовство имеется с указателем Int_Idx. Для уменьшения оверхеда его начальное значение должно быть 128, и когда он досчитает до 0, то результат интегрирования будет готов. Вот результат компиляции EWAVR 5.11 CODE RSEG NEAR_Z:DATA:NOROOT(0) REQUIRE `?<Segment init: NEAR_Z>` I50: DS 1 Q50: DS 1 I51: DS 1 Q51: DS 1 // 11 // 12 volatile UINT8 Int_Idx; //Начальное значение - 0x80 Int_Idx: DS 1 // 13
RSEG CODE:CODE:NOROOT(1) // 14 __interrupt void ProcessIntegrators(void) ProcessIntegrators: // 15 { ST -Y, R31 ST -Y, R30 ST -Y, R22 ST -Y, R21 ST -Y, R20 ST -Y, R19 ST -Y, R18 ST -Y, R17 ST -Y, R16 IN R21, 0x3F // 16 UINT8 __flash *r=(UINT8 __flash *)(FLASHEND-0xFF-0x100)+Int_Idx; //Текущее положение в таблице опорных сигналов LDS R16, (I50 + 4) LDI R31, 62 MOV R30, R16 // 17 UREG sig_i50; // 18 UREG sig_q50; // 19 UREG sig_i51; // 20 UREG sig_q51; // 21 sig_i50=sig_q50=sig_i51=sig_q51=SPDR; IN R17, 0x2E MOV R16, R17 MOV R18, R17 MOV R20, R17 MOV R22, R17 // 22 sig_i50^=*r++; //Операция умножения входного сигнала на опорные LPM R17, Z+ EOR R22, R17 // 23 sig_q50^=*r++; LPM R17, Z+ EOR R20, R17 // 24 sig_i51^=*r++; LPM R17, Z+ EOR R18, R17 // 25 sig_q51^=*r++; LPM R17, Z+ EOR R16, R17 // 26 Int_Idx=(int)r; //Сохранение указателя STS (I50 + 4), R30 // 27 I50+=bitcount_table[sig_i50]; //Собственно интегрирование MOV R30, R22 LDI R31, 63 LPM R17, Z LDI R30, LOW(I50) LDI R31, (I50) >> 8 LD R19, Z ADD R19, R17 ST Z, R19 // 28 Q50+=bitcount_table[sig_q50]; MOV R30, R20 LDI R31, 63 LPM R17, Z LDI R30, LOW(I50) LDI R31, (I50) >> 8 LDD R19, Z+1 ADD R19, R17 STD Z+1, R19 // 29 I51+=bitcount_table[sig_i51]; MOV R30, R18 LDI R31, 63 LPM R17, Z LDI R30, LOW(I50) LDI R31, (I50) >> 8 LDD R18, Z+2 ADD R18, R17 STD Z+2, R18 // 30 Q51+=bitcount_table[sig_q51]; MOV R30, R16 LDI R31, 63 LPM R16, Z LDI R30, LOW(I50) LDI R31, (I50) >> 8 LDD R17, Z+3 ADD R17, R16 STD Z+3, R17 // 31 } OUT 0x3F, R21 LD R16, Y+ LD R17, Y+ LD R18, Y+ LD R19, Y+ LD R20, Y+ LD R21, Y+ LD R22, Y+ LD R30, Y+ LD R31, Y+ RETI
Ну и финальное действие по достижению переменной Int_Idx значения 0 - оно банально: Код #define THRESH (20*0x100)
UREG TestIntegrators(void) { __disable_interrupt(); REG i50=I50; REG q50=Q50; REG i51=I51; REG q51=Q51; __enable_interrupt(); unsigned int A50=__multiply_signed(i50,i50)+__multiply_signed(q50,q50); unsigned int A51=__multiply_signed(i51,i51)+__multiply_signed(q51,q51); if ((A50>THRESH)||(A51>THRESH)) { if (A50>A51) return 1; else return 2; } return 0; } В качестве упражнения рекомендую сгенерировать самому необходимые таблицы, написать необходимую инициализацию измерения и проверку окончания. А теперь - ваши вопросы
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
May 27 2009, 13:32
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Буратино @ May 26 2009, 17:58)  Но для общего развития намекните приблизительно, как эТО делают при помощи корреляционного метода ? корреляционный метод ловли частоты это конечно здорово, и Rst7 все грамотно описал, тока мне почему-то кажеться что Вам это нафиг не нужно...(да и периодов нужно довольно много) При наличии помех стабильно выделить наборы частот будет сложно(за короткий интервал без помех), а вот определить что частота стала < определенной очень легко, может в этом направлении подумать в смысле схемотехники ? Т.е. срабатывание сигнализации == (частота < определенной), тогда прога будет совсем простой а любые помехи просто чуть мешают "скорости" определения срабатывания сигнализации...
Причина редактирования: Излишнее цитирование.
|
|
|
|
|
May 27 2009, 13:50
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Если эта тема коррелирует с той, в которой топикстартер делает приемник прямого усиления, то корреляционный прием в течении 1мс - как раз. У него добротность входного контура выходит порядка 50  Да, кстати. Небольшое улучшение кода коррелятора Код volatile struct { UINT8 I50; UINT8 Q50; UINT8 I51; UINT8 Q51; };
__flash UINT8 bitcount_table[256] @ FLASHEND-0xFF; __root __flash UINT8 reference_sig[128] @ FLASHEND-0xFF-0x80;
volatile UINT8 Int_Idx; //Начальное значение - 0x80
__interrupt void ProcessIntegrators(void) { UINT8 __flash *r=(UINT8 __flash *)(FLASHEND-0xFF-0x100)+Int_Idx; //Текущее положение в таблице опорных сигналов UREG sig_i50; UREG sig_q50; UREG sig_i51; UREG sig_q51; sig_i50=sig_q50=sig_i51=sig_q51=SPDR; sig_i50^=*r++; //Операция умножения входного сигнала на опорные sig_q50^=*r++; sig_i51^=*r++; sig_q51^=*r++; Int_Idx=(int)r; //Сохранение указателя sig_i50=bitcount_table[sig_i50]; //Подсчет единичных бит sig_q50=bitcount_table[sig_q50]; sig_i51=bitcount_table[sig_i51]; sig_q51=bitcount_table[sig_q51]; I50+=sig_i50; //Собственно интегрирование Q50+=sig_q50; I51+=sig_i51; Q51+=sig_q51; } И результат CODE RSEG CODE:CODE:NOROOT(1) // 15 __interrupt void ProcessIntegrators(void) ProcessIntegrators: // 16 { ST -Y, R31 ST -Y, R30 ST -Y, R22 ST -Y, R21 ST -Y, R20 ST -Y, R19 ST -Y, R18 ST -Y, R17 ST -Y, R16 IN R21, 0x3F // 17 UINT8 __flash *r=(UINT8 __flash *)(FLASHEND-0xFF-0x100)+Int_Idx; //Текущее положение в таблице опорных сигналов LDS R16, (_A_I50 + 4) LDI R31, 62 MOV R30, R16 // 18 UREG sig_i50; // 19 UREG sig_q50; // 20 UREG sig_i51; // 21 UREG sig_q51; // 22 sig_i50=sig_q50=sig_i51=sig_q51=SPDR; IN R17, 0x2E MOV R16, R17 MOV R18, R17 MOV R20, R17 MOV R22, R17 // 23 sig_i50^=*r++; //Операция умножения входного сигнала на опорные LPM R17, Z+ EOR R22, R17 // 24 sig_q50^=*r++; LPM R17, Z+ EOR R20, R17 // 25 sig_i51^=*r++; LPM R17, Z+ EOR R18, R17 // 26 sig_q51^=*r++; LPM R17, Z+ EOR R16, R17 // 27 Int_Idx=(int)r; //Сохранение указателя STS (_A_I50 + 4), R30 // 28 sig_i50=bitcount_table[sig_i50]; //Подсчет единичных бит // 29 sig_q50=bitcount_table[sig_q50]; MOV R30, R20 LDI R31, 63 LPM R20, Z // 30 sig_i51=bitcount_table[sig_i51]; MOV R30, R18 LPM R18, Z // 31 sig_q51=bitcount_table[sig_q51]; MOV R30, R16 LPM R16, Z // 32 I50+=sig_i50; //Собственно интегрирование MOV R30, R22 LPM R17, Z LDI R30, LOW(_A_I50) LDI R31, (_A_I50) >> 8 LD R19, Z ADD R19, R17 ST Z, R19 // 33 Q50+=sig_q50; LDD R17, Z+1 ADD R17, R20 STD Z+1, R17 // 34 I51+=sig_i51; LDD R17, Z+2 ADD R17, R18 STD Z+2, R17 // 35 Q51+=sig_q51; LDD R17, Z+3 ADD R17, R16 STD Z+3, R17 // 36 } OUT 0x3F, R21 LD R16, Y+ LD R17, Y+ LD R18, Y+ LD R19, Y+ LD R20, Y+ LD R21, Y+ LD R22, Y+ LD R30, Y+ LD R31, Y+ RETI
Так быстрее немного
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
May 27 2009, 14:13
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Rst7 @ May 27 2009, 18:02)  Что мне представлять, за меня большие головы давно подумали, и определили, что описанный корреляцинный способ приема - оптимальный. А остальное - от лукавого. Не ожидал от Вас услышать такое... Несомненно корреляцинный способ приема оптимальный - при определенных обстоятельствах... Тока вот обстоятельства не факт что соответствуют  выбранному методу... (или наоборот...) Автор топика сказал что у него помехи могут быть в любой момент, поэтому ИМХО, будет работать только способ определения минимальной частоты...
|
|
|
|
|
May 27 2009, 15:47
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Не ожидал от Вас услышать такое... Да ладно, это мне мои телепатические способности подсказывают  Шучу. Вносите Ваше предложение о способе обнаружения сигналов, будем считать, где порог по с/ш лучше. Хотя, лучше подождем, пока нам топикстартер расскажет о параметрах его сигнала. Иначе мы тут без исходных данных холивар как разведем - только поругаемся...
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
May 27 2009, 18:36
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Rst7 @ May 27 2009, 19:47)  Да ладно, это мне мои телепатические способности подсказывают  Шучу. Вносите Ваше предложение о способе обнаружения сигналов, будем считать, где порог по с/ш лучше. дык все очень просто, прерывание EXTINT(или компаратор) на ноге и прерывание от таймера которое запускается в прерывании от ножки... прерывание от таймера настраиваем в прерываниии EXTIN(причем так чтоб прерывание возникло только если T > T реальное) Таким образом окажемся в прерывании таймера толко если F(частота) > заданой В принципе, есть возможность привязаться таймером к моменту перехода, тч джитера может не быть совсем... Цитата Хотя, лучше подождем, пока нам топикстартер расскажет о параметрах его сигнала. Иначе мы тут без исходных данных холивар как разведем - только поругаемся... не..., ругацо не нада...
|
|
|
|
|
May 27 2009, 19:46
|
Профессионал
    
Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528

|
Цитата(Rst7 @ May 27 2009, 21:47)  Хотя, лучше подождем, пока нам топикстартер расскажет о параметрах его сигнала. Иначе мы тут без исходных данных холивар как разведем - только поругаемся... Кстати, если топикстартер расскажет нам что полоса сигнала ограничена (или её можно ограничить неким полосовым фильтром) то частоту сэмплирования можно и понизить, вплоть до нескольких килогерц (undersampling). При этом, конечно, уменьшится и число отсчётов за миллисекунду и увеличится погрешность в вычисленных I и Q, ну да это вопрос выбора между сложностью и точностью.
--------------------
Russia est omnis divisa in partes octo.
|
|
|
|
|
Jun 22 2009, 15:14
|
Частый гость
 
Группа: Участник
Сообщений: 131
Регистрация: 5-05-06
Пользователь №: 16 820

|
Теперь нарисуем таблицу умножения в наших терминах Код a,b,a*b: -1,-1,+1 +1,-1,-1 -1,+1,-1 +1,+1,+1 и А теперь - ваши вопросы [/quote] Спасибо, давно так не смеялся. Люблю математические анекдоты. Значит оцифровываем А с погрешностью 50%, Затем грубим В до 50% погрешности, Перемножаем А на В , поличаем 100% погрешности и... дальше можем заниматься, чем угодно.
|
|
|
|
|
Jun 22 2009, 15:44
|
Частый гость
 
Группа: Участник
Сообщений: 131
Регистрация: 5-05-06
Пользователь №: 16 820

|
Цитата(Rst7 @ Jun 22 2009, 19:40)  Ну-ка ну-ка... Имеете что-то против?  Против чего?
|
|
|
|
|
Jun 22 2009, 17:09
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(BORIV @ Jun 22 2009, 18:14)  Значит оцифровываем А с погрешностью 50%, Затем грубим В до 50% погрешности, Перемножаем А на В , поличаем 100% погрешности Измеряем полярность А с довольно приличной точностью. Заносим в табличку полярность В с идеальной точностью. Цитата(BORIV @ Jun 22 2009, 18:14)  и... дальше можем заниматься, чем угодно.  Продолжайте...
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jun 22 2009, 17:36
|
Частый гость
 
Группа: Участник
Сообщений: 131
Регистрация: 5-05-06
Пользователь №: 16 820

|
Цитата(ReAl @ Jun 22 2009, 21:09)  Измеряем полярность А с довольно приличной точностью. Заносим в табличку полярность В с идеальной точностью.
Продолжайте... Вы согласны, что получив результат с погрешностью 100% я могу потом делать с ним всё, что захочу? Или вообще нечего не делать. Это уже без разницы, так как результата у меня уже нет. Я вёл речь о ЦОС ? Покажите где. Зря я Вам отвечаю. Вам ведь ПРОЦЕСС важен, а не результат.
|
|
|
|
|
Jun 22 2009, 18:24
|
Частый гость
 
Группа: Участник
Сообщений: 131
Регистрация: 5-05-06
Пользователь №: 16 820

|
Цитата(Rst7 @ Jun 22 2009, 21:49)  Очень серьезное заявление о погрешности 100 процентов. Вам не кажется, что Вы его высказываете несколько голословно. И было бы неплохо, если бы Вы аргументированно нам доказали сие утверждение.. При перемножении двух чисел - погрешности складываются. Неужели не проходили. Поскольку результат бинарный, то получается, что он потерялся. Если не согласны, скажите, что такое "да" со стопроцентной погрешностью. Я смеялся над неподходящим объяснением. Над математическим анекдотом. Не более. Работать будет.
|
|
|
|
|
Jun 22 2009, 21:38
|
Частый гость
 
Группа: Участник
Сообщений: 131
Регистрация: 5-05-06
Пользователь №: 16 820

|
Цитата(Rst7 @ Jun 22 2009, 23:09)  Приведите свое, подходящее обьяснение. А мы посмеемся  Не хочу я Вас развлекать. Сами развлекайтесь. Насколько я понял, Вы никогда не просчитывали точность полученных результатов. Зато круто, ЦОС !
|
|
|
|
|
Jun 23 2009, 05:17
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Не хочу я Вас развлекать. Сами развлекайтесь. Вы нас уже достаточно развлекли своей грубейшей ошибкой в самом начале Ваших "рассуждений". Однобитный АЦП дает точность +-25 процентов (вообще то говорят о шуме квантования на уровне -6дБ) и имеет полезнейший в данном случае эффект нормирования амплитуды входного сигнала. Замена опорного синусоидального сигнала на прямоугольный приводит лишь к появлению дополнительных полос с меньшей чувствительностью на нечетных гармониках сигнала (которые подавляются входным фильтром). А совсем не к падению точности. Что происходит с соотношением сигнал/шум после интегрирования (и, соответственно, сужения полосы) я предлагаю подумать самостоятельно  В общем случае могу сказать с полной уверенностью - Вы неуч и хам.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Jun 23 2009, 05:49
|
Частый гость
 
Группа: Участник
Сообщений: 131
Регистрация: 5-05-06
Пользователь №: 16 820

|
Цитата(Rst7 @ Jun 23 2009, 09:17)  Вы нас уже достаточно развлекли своей грубейшей ошибкой в самом начале Ваших "рассуждений". Однобитный АЦП дает точность +-25 процентов (вообще то говорят о шуме квантования на уровне -6дБ) и имеет полезнейший в данном случае эффект нормирования амплитуды входного сигнала. Замена опорного синусоидального сигнала на прямоугольный приводит лишь к появлению дополнительных полос с меньшей чувствительностью на нечетных гармониках сигнала (которые подавляются входным фильтром). А совсем не к падению точности. Что происходит с соотношением сигнал/шум после интегрирования (и, соответственно, сужения полосы) я предлагаю подумать самостоятельно В общем случае могу сказать с полной уверенностью - Вы неуч и хам. И всё это прекрасно видно из приведённых Вами формул. Другой реакции я не ожидал.
|
|
|
|
|
Jun 23 2009, 10:40
|
Частый гость
 
Группа: Участник
Сообщений: 131
Регистрация: 5-05-06
Пользователь №: 16 820

|
Цитата(Rst7 @ Jun 23 2009, 10:57)  Любезный, есть что сказать по теме - говорите. Причем, приведя доказательства своих утверждений. Или пойдите вон - так будет даже лучше, меньше будете смущать топикстартера и прочих начинающих, читающих этот форум, этот раздел форума и эту тему конкретно. Топикстартер от Вас уже сбежал. Барство у Вас хорошо получается. Тренировались?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|