<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7658835345163878861</id><updated>2011-12-30T15:02:37.531-08:00</updated><category term='embedded'/><category term='math'/><category term='fun'/><category term='life'/><title type='text'>Hardware engineering and etc.</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-357374895148223835</id><published>2011-12-30T14:51:00.000-08:00</published><updated>2011-12-30T15:02:37.544-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Variable frequency scalar control for 3-Phase AC induction motor -- STM32 implementation</title><content type='html'>Это часть проекта по созданию частотного преобразователя для асинхронных двигателей средней мощности.&lt;br /&gt;В качестве аппаратной платформы был выбран микроконтроллер STM32, в силу его дешевизны и доступности специальных библиотек (STM32_FOC_ACIM из stm32 foc firwmare libraries v2.0).&lt;br /&gt;Здесь описано самое начало работы: запуск маленького асинхронного двигателя в скалярном режиме (V/f-управление).&lt;br /&gt;&lt;br /&gt;В результате беглого просмотра исходников STM32_FOC_ACIM выяснилось, что скалярный режим там не предусмотрен, а нам он был важен для проверки трехфазного IGBT-моста и вообще оживления двигателя без датчиков обратной связи.&lt;br /&gt;&lt;br /&gt;Был создан новый проект, из библиотеки STM32_FOC_ACIM взята только таблица синусов и функции работы с таймером (SVPWM -- векторная модуляция). Приделан DDS для генерации синусоидальных сигналов управления SVPWM-модулятором с плавной перестройкой частоты.&lt;br /&gt;&lt;br /&gt;В результате получилось то, что представлено на картинке:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-CGwrGrh8YPs/Tv5CXapx0NI/AAAAAAAAAkc/zexienTGizE/s1600/SAM_0464_.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-CGwrGrh8YPs/Tv5CXapx0NI/AAAAAAAAAkc/zexienTGizE/s400/SAM_0464_.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5692059949101863122" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;платка STM32VLDISCOVERY подключена к модулю трехфазного IGBT-моста, от которого запитан совеццкий мини-асинхронник (первый попавшийся, вообще-то с фазным ротором, но фазная обмотка была замкнута). Крутилка, подключенная ко входу АЦП микроконтроллера, задает скорость -- можно плавно менять от 0 Гц до 50 Гц.&lt;br /&gt;&lt;br /&gt;Вот напряжения на двух фазах&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-7hFt5a8-FyA/Tv5CXkd-8VI/AAAAAAAAAko/KbkWabRYNP4/s1600/Oscil1.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 236px;" src="http://1.bp.blogspot.com/-7hFt5a8-FyA/Tv5CXkd-8VI/AAAAAAAAAko/KbkWabRYNP4/s400/Oscil1.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5692059951736746322" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Сейчас добавляется новый функционал и все это тестируется на более реальных двигателях.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://sites.google.com/site/akpc806a/stm32_vfd_scalar_0.0.rar"&gt;Скачать исходный код проекта&lt;/a&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-357374895148223835?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/357374895148223835/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=357374895148223835' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/357374895148223835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/357374895148223835'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2011/12/variable-frequency-scalar-control-for-3.html' title='Variable frequency scalar control for 3-Phase AC induction motor -- STM32 implementation'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-CGwrGrh8YPs/Tv5CXapx0NI/AAAAAAAAAkc/zexienTGizE/s72-c/SAM_0464_.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-7844354605560133686</id><published>2011-08-20T05:44:00.000-07:00</published><updated>2011-08-20T06:42:23.534-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Remote serial COM-port implementation on STM32</title><content type='html'>Собственно история такая: срочно для одного проекта необходимо было сделать удаленный COM-порт. &lt;br /&gt;&lt;br /&gt;Это должно было выглядеть так: на компьютере устанавливается виртуальный COM-порт, данные из него пересылаются по TCP/IP на удаленное устройство, собранное на микроконтроллере STM32F107 (connectivity line), где они выдаются наружу через UART. Тоже самое, но только в обратном направлении для данных, приходящих на UART микроконтроллера.&lt;br /&gt;&lt;br /&gt;Я рассматривал для варианта реализации на библиотеке uIP и библиотеке lwIP. Оба варианта без операционной системы. До этого не приходилось тесно работать с этими библиотеками, а выбор был сделан, поскольку они портированы на STM32 и исходники доступны.&lt;br /&gt;&lt;br /&gt;На компьютере был установлен драйвер &lt;a href="http://sourceforge.net/projects/com0com/"&gt;com0com&lt;/a&gt; для создания пары связанных виртуальных COM-портов. Также использовалась программа com2tcp которая собственно занималась передачей данных из виртуального порта через сокеты TCP/IP. Цепочка передачи выглядела таким образом: &lt;br /&gt;&lt;br /&gt;&lt;img src="http://3.bp.blogspot.com/-c0HLXPDNtjc/Tk-5WCNRwrI/AAAAAAAAAgM/Uqp47XMu3D4/s1600/RemoteCOM.PNG"&gt;&lt;br /&gt;&lt;br /&gt;com2tcp запускалась из командной строки с параметрами&lt;br /&gt;com2tcp --ignore-dsr \\.\CNCB0 192.168.0.8 23 &lt;br /&gt;&lt;br /&gt;С uIP ничего хорошего не получилось -- потому что при отсылке пакетов из STM32 постоянно срабатывал тайм-аут и происходило рассоединение. Вероятно, причина в неправильной настройке таймера, но я глубже не разбирался и решил попробовать что-то другое. &lt;br /&gt;Скачанный с st.com порт lwIP работал устойчиво, добавляем пару строк для работы с UART в исходниках реализации telnet, тестим -- и девайс готов :)&lt;br /&gt;&lt;br /&gt;В качестве аппаратной платформы использовалась отладочная плата STM3210C (EM-STM3210C).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://sites.google.com/site/akpc806a/STM32F107_ETH_LwIP_V1.0.0_end.rar"&gt;Исходники для STM32&lt;/a&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-7844354605560133686?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/7844354605560133686/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=7844354605560133686' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/7844354605560133686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/7844354605560133686'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2011/08/remote-serial-com-port-implementation.html' title='Remote serial COM-port implementation on STM32'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-c0HLXPDNtjc/Tk-5WCNRwrI/AAAAAAAAAgM/Uqp47XMu3D4/s72-c/RemoteCOM.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-7402779019071057880</id><published>2011-07-08T08:54:00.000-07:00</published><updated>2011-07-08T14:26:33.748-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Pseudo-Arclength numerical continuation method -- quick &amp; dirty MATLAB code</title><content type='html'>Я уже как-то писал про методы продолжения по параметру (homotopy numerical continuation). Весьма полезная штука для решения систем нелинейных уравнений. Мне нужна была программка для эксперементирования с некоторыми своими идеями и буквально за 20 минут набросал код в MATLAB, который реализует один из вариантов метода гомотопического продолжения по параметру, а именно "pseudo-arclength method". Никакой оптимизации кода не проводилось, некоторые вещи можно было бы сделать проще и быстрее (в частности, там кое-где постоянно вычисляется детерминант, хотя он согласно свойству QR-разложения, всегда равен 1), особо не тестировалось -- короче это "quick &amp; dirty" код.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Рассматривается кривая $x = \phi(\lambda)$ заданная неявно в виде $H(x,\lambda) = 0$ на интервале $\lambda \in [0, 1]$:&lt;br /&gt;&lt;br /&gt;$$H(x,\lambda) = (1-\lambda) \cdot (x - x_0) + \lambda \cdot f(x)$$&lt;br /&gt;&lt;br /&gt;где $f(x)$ -- система нелинейных уравнений (квадратная), корень которой необходимо найти (задается в файле fun.m, ее якобиан -- в dfun.m); $x_0$ -- начальное приближение. &lt;br /&gt;&lt;br /&gt;Плавно изменяя параметр $\lambda$ от 0, где очевидно $H(x_0, 0) = 0$ до $\lambda = 1$, постоянно при этом находя $x$, обращающий в 0 $H$, мы получаем в результате решение исходного уравнения $f(x) = 0$. Так реализуется идея постепенного плавного перехода от очень простой задачи $x - x_0 = 0$ к исходной $f(x) = 0$.&lt;br /&gt;&lt;br /&gt;Смысл реализованного метода в следующем.&lt;br /&gt;&lt;br /&gt;1. Сначала в точке $(x,\lambda)$, где $H(x,\lambda) = 0$, определяется тангенциальный вектор $t = (x',\lambda')$ единичной длины и положительной ориентации. Это просто делается QR-разложением якобиана отображения $f(x)$.&lt;br /&gt;&lt;br /&gt;2. Потом реализуется шаг предиктора: точка $(x,\lambda)$ сдвигается на небольшое расстояние $\Delta t$ в направлении $t$. Шаг предиктора продвигает решение в верном направлении к решению $f(x) = 0$, но в резальтате мы оказываеся не на кривой $H$.&lt;br /&gt;&lt;br /&gt;3. Далее реализуется шаг корректора: точка $(\bar x, \bar \lambda)$, полученная после шага предиктора перемещается таким образом, чтобы оказаться на кривой $H(x,\lambda) = 0$. Это реализуется с помощью метода Ньютона, применяемого к композитной функции: $F(x, \lambda) = (H, N)^T(x, \lambda)$:&lt;br /&gt;&lt;br /&gt;$$\begin{pmatrix} \dot x \\ \dot \lambda \end{pmatrix} = - \begin{pmatrix} D_x H &amp; D_\lambda H \\ D_x N^T &amp; D_\lambda N \end{pmatrix}^{-1} \begin{pmatrix} H \\ N \end{pmatrix}$$&lt;br /&gt;&lt;br /&gt;где $$N(x, \lambda) = (x')^T(x - \bar x) + \lambda'(\lambda - \bar \lambda) - \Delta t = 0$$ -- нормаль к кривой $H$, проходящая через точку $(\bar x, \bar \lambda)$.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://sites.google.com/site/akpc806a/pseudo_arclength_test.rar"&gt;Собственно исходник -- pseudo_arclength_test.rar&lt;/a&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-7402779019071057880?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/7402779019071057880/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=7402779019071057880' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/7402779019071057880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/7402779019071057880'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2011/07/pseudo-arclength-numerical-continuation.html' title='Pseudo-Arclength numerical continuation method -- quick &amp; dirty MATLAB code'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-3591496984111164789</id><published>2011-04-20T13:01:00.000-07:00</published><updated>2011-04-20T14:07:30.817-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>Filament Display</title><content type='html'>Сегодня я видел удивительную вещь, которую вряд ли еще увижу. Это называется &lt;a href="http://www.radiolamp.ru/sprav/ind/iv13.html"&gt;накальный вакуумный индикатор&lt;/a&gt; или &lt;a href="http://www.decadecounter.com/vta/tubepage.php?item=17"&gt;filament display&lt;/a&gt;. Т.е. это такой семисегментный индикатор, у которого каждый сегмент -- это лампочка накаливания.&lt;br /&gt;&lt;br /&gt;Вот фотки (извиняюсь за качество, фоткал на мобильный).&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-iVl9mbHiz84/Ta9KgrtfawI/AAAAAAAAAc0/6krqpxsG_Yc/s1600/IMG0039A.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 320px;" src="http://3.bp.blogspot.com/-iVl9mbHiz84/Ta9KgrtfawI/AAAAAAAAAc0/6krqpxsG_Yc/s400/IMG0039A.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5597774787194612482" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-JGZYMC7NeqE/Ta9KY8UtY3I/AAAAAAAAAcs/z46ksule5mU/s1600/IMG0038A.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 320px;" src="http://2.bp.blogspot.com/-JGZYMC7NeqE/Ta9KY8UtY3I/AAAAAAAAAcs/z46ksule5mU/s400/IMG0038A.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5597774654215119730" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Также еще хочу сказать, что в детстве, когда я делал электронные часы на микросхемах К155 (гыгы), то мне почему-то очень хотелось заполучить такие индикаторы (не могу вспомнить почему), и из справочника я точно знал, что такие бывают. Но их никто никогда не видел. А оказываются-таки да, существуют))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-3591496984111164789?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/3591496984111164789/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=3591496984111164789' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/3591496984111164789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/3591496984111164789'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2011/04/filament-display.html' title='Filament Display'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-iVl9mbHiz84/Ta9KgrtfawI/AAAAAAAAAc0/6krqpxsG_Yc/s72-c/IMG0039A.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-2657623809708422367</id><published>2011-04-20T12:44:00.001-07:00</published><updated>2011-04-20T13:00:45.144-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Numerical homotopy continuation</title><content type='html'>Вся теория и книжки могут быть сжаты в одно предложение: если у нас есть отображение $H: \mathbb{R}^{n+1} \to \mathbb{R}^{n}$, то это означает, что уравнение $H = 0$ задает неявную функцию $f: \mathbb{R} \to \mathbb{R}^{n}$, которую мы можем численно аппроксимировать, если знаем хотя бы ее одну точку $(t_0, f(t_0))$&lt;br /&gt;&lt;br /&gt;По-русски, это называется метод продолжения по параметру. Сама функция $f(t)$ может вести себя не слишком хорошо: пересекаться с какой-то другой кривой, тоже заданной неявно из $H$, или быть неинъективной. Но это не очень страшно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-2657623809708422367?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/2657623809708422367/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=2657623809708422367' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/2657623809708422367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/2657623809708422367'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2011/04/numerical-homotopy-continuation.html' title='Numerical homotopy continuation'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-1948433226300669764</id><published>2011-04-19T11:27:00.000-07:00</published><updated>2011-04-19T12:12:59.711-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>STM32 discovery IAR project from st.com</title><content type='html'>Внезапно узнал, что &lt;a href="http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32vldiscovery_package.zip"&gt;demo-проект&lt;/a&gt; для &lt;a href="http://www.st.com/internet/evalboard/product/250863.jsp"&gt;STM32 discovery&lt;/a&gt; (AN3268) не собирается в IAR. Вылазит куча сообщений типа:&lt;br /&gt;"could not open source file "STM32f10x.h""&lt;br /&gt;"identifier "GPIO_Pin_9" is undefined"&lt;br /&gt;и т.д.&lt;br /&gt;Все ок, просто они почему-то выкладывают проект, в котором не проиписаны пути к .h &lt;br /&gt;файлам и define-ы. Кроме того, там еще не указаны границы памяти микроконтроллера...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/akpc806a/EWARMv5_DISCOVER.rar"&gt;Вот&lt;/a&gt; исправленный файл проекта (только сам проект для IAR), без исходников.&lt;br /&gt;&lt;br /&gt;Там надо было просто в настройках С++ Compiler/Preprocessor/Additional include directories прописать такое (PROJ_DIR -- с двух сторон знак доллара):&lt;br /&gt;PROJ_DIR\..\..\..\Libraries\CMSIS\CM3\CoreSupport&lt;br /&gt;PROJ_DIR\..\..\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x&lt;br /&gt;PROJ_DIR\..\..\..\Libraries\STM32F10x_StdPeriph_Driver\inc&lt;br /&gt;PROJ_DIR\..\inc&lt;br /&gt;И ниже в Defined Symbols:&lt;br /&gt;STM32F10X_MD_VL&lt;br /&gt;USE_STDPERIPH_DRIVER&lt;br /&gt;&lt;br /&gt;Почему выкладываются нерабочие демо-проекты -- не знаю, может быть чтобы юзеры ковырялись в исходниках))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-1948433226300669764?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/1948433226300669764/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=1948433226300669764' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/1948433226300669764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/1948433226300669764'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2011/04/demo-stm32-discovery-an3268-iar.html' title='STM32 discovery IAR project from st.com'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-648939662863420961</id><published>2010-08-02T13:21:00.000-07:00</published><updated>2010-08-02T13:23:20.944-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Linear Control of Nonlinear Systems - I</title><content type='html'>Вообще в системах управления, как в теории, так и на практике, меня очень привлекает один момент. Когда вокруг некоторого объекта управления мы замыкаем обратную связь, то возникает самое настоящее волшебство:&lt;br /&gt;- мы можем сделать из нелинейного объекта управления линейный, причем сделать это можно с помощью линейной обратной связи (т.е. простых ПИД-регуляторов),&lt;br /&gt;- мы можем сделать из нескольких объектов (или одного, но изменяющегося во времени) какой-то один заданный, который будет вести себя почти одинаково (свойство робастности).&lt;br /&gt;&lt;br /&gt;Философски, это означает, что мы можем относительно простыми средствами существенно изменить какой-то объект, обладая только ограниченным пониманием его работы.&lt;br /&gt;&lt;br /&gt;Тривиальный иллюстративный пример: возьмем систему вида&lt;br /&gt;&lt;br /&gt;$$\dot{x} = u - x$$&lt;br /&gt;$$y = x^3 - x$$&lt;br /&gt;&lt;br /&gt;Нетрудно видеть, что она состоит из лаговой задержки первого порядка и кубического нелинейного элемента. Если пытаться произвести точную линеаризацию такой системы (exact feedback linearization), то возникают трудности с нерегулярностью трансформирующего преобразования. Мы имеем систему после дифференцирования вида $\dot{y} = (3x^2 - 1)(u - x)$ и в точках $x = \pm \sqrt{3^{-1}}$ возникает потеря управляемости.&lt;br /&gt;&lt;br /&gt;Но если взять обычный пропорционально-интегральный регулятор, то никаких проблем с управлением нет.&lt;br /&gt;&lt;br /&gt;Для более подробного анализа рассмотрим принципы робастного управления линейными системами. На самом деле, нет ничего проще, чем линейное робастное управение))&lt;br /&gt;&lt;br /&gt;Робастное управление рассматривает систему с замкнутой обратной связью $\Sigma: U \to Y$ как суперпозицию систем $\Sigma=(M,\Delta)$, где $M: U \times D_o \to Y \times D_i$ -- номинальную систему, $\Delta: D_i \to D_o$ -- объект, моделирующий неопределенность. Все дальнейшее рассуждение подразумевает, что $M$ устойчиво в отсутсвии неопределенности при $\Delta = 0$.&lt;br /&gt;&lt;br /&gt;Номинальный объект $M$ рассматривается как четырехполюсник, отсюда можно записать уравнение:&lt;br /&gt;&lt;br /&gt;$$\begin{pmatrix} d_i \cr y \end{pmatrix} = \begin{pmatrix} M_{11} &amp;&amp; M_{12} \cr M_{21} &amp;&amp; M_{22} \end{pmatrix} \begin{pmatrix} d_o \cr u \end{pmatrix}$$&lt;br /&gt;&lt;br /&gt;Для того, чтобы установить необходимое и достаточное условие робастной устойчивости, рассмотрим действие операторов на сигналы. Поскольку&lt;br /&gt;&lt;br /&gt;$$d_i = M_{11} \cdot d_0 + M_{12} \cdot u$$&lt;br /&gt;&lt;br /&gt;то верно неравенство треугольника&lt;br /&gt;&lt;br /&gt;$$\|d_i\| \le \|M_{11}\| \cdot \|d_0\| + \|M_{12}\| \cdot \|u\|$$&lt;br /&gt;&lt;br /&gt;где нормы операторов и сигналов понимаются в привычном смысле (по Лебегу).&lt;br /&gt;&lt;br /&gt;Аналогично для оператора $\Delta$ и выхода&lt;br /&gt;&lt;br /&gt;$$\|d_o\| \le \|\Delta\| \cdot \|d_i\|$$&lt;br /&gt;$$\|y\| \le \|M_{21}\| \cdot \|d_o\| + \|M_{22}\| \cdot \|u\|$$&lt;br /&gt;&lt;br /&gt;Заменив неравенства на равенства и подставив в последнее выражение, находим оценку для выхода $\|y\| \le \phi(M,\Delta) \cdot \|u\|$:&lt;br /&gt;&lt;br /&gt;$$ \phi(M,\Delta) = \frac{\|\Delta\| \cdot \|M_{21}\| \cdot \|M_{12}\|}{1-\|\Delta\| \cdot \|M_{11}\|} + \|M_{22}\| $$&lt;br /&gt;&lt;br /&gt;Отсюда необходимым и достаточным условием робастной устойчивости системы в присутсвии неопределеннсоти $\Delta$ является выполнение неравенства:&lt;br /&gt;&lt;br /&gt;$$ \|\Delta\| \cdot \|M_{11}\| &lt; 1 $$&lt;br /&gt;&lt;br /&gt;Теперь перейдем к нелинейным системам. &lt;br /&gt;&lt;br /&gt;Простейшее усовершенствование рассмотренной модели состоит в том, чтобы сделать оператор $\Delta$ -- нелинейным. Условие устойчивости, приведенное выше в этом случае очевидно сохраняется. &lt;br /&gt;&lt;br /&gt;Однако, классическая модель номинальной системы как четырехполюсника не слишком удобна. Гораздо логичнее представлять нелинейную систему в виде суммы линейного и нелинейного компонента. Кроме того, реальные системы всегда являются системами с насыщением по входу. Таким образом, имеем модель: &lt;br /&gt;&lt;br /&gt;$$ \Sigma = (\Delta + G) \circ Q $$ &lt;br /&gt;&lt;br /&gt;где $\Delta$ -- нелинейная часть, $G$ -- линейная система, $Q$ -- сатуратор, ограничивающий входные воздействия по амплитуде.&lt;br /&gt;&lt;br /&gt;Пусть $C$ -- контроллер, работающий по сигналу ошибки $C: U \times Y \to V$, $C: u - y \mapsto v$, и подключенный ко входу системы $\Sigma : v \mapsto y$.&lt;br /&gt;&lt;br /&gt;На самом деле, замкнутая система $(\Sigma, C)$ и рассмотренная выше $(M, \Delta)$ -- эквиваленты. Поскольку нелинейность в $\Sigma$ действует аддитивно, то ее можно всегда изолировать и в таком случае номинальная система окажется остатком $M = (\Sigma, C) / \Delta$.&lt;br /&gt;&lt;br /&gt;Можно показать, что система $(\Sigma, C) / \Delta$ представима в виде четырехполюсника, в котором &lt;br /&gt;&lt;br /&gt;$$M_{11} = C (I + G Q C)^{-1}$$&lt;br /&gt;&lt;br /&gt;Таким образом, задача синтеза контроллера, обеспечивающего робастную устойчивость нелинейной системы, сводится к подзадачам:&lt;br /&gt;&lt;br /&gt;- представление нелинейной системы в виде суперпозиции $ \Sigma = (\Delta + G) \circ Q $,&lt;br /&gt;&lt;br /&gt;- вычисление нормы $\|\Delta\|$ нелинейного компонента с учетом вносимых $Q$ ограничений,&lt;br /&gt;&lt;br /&gt;- синтез линейного контроллера $C$, который бы удовлетворял неравенству $\|C (I + G Q C)^{-1}\| &lt; {\|\Delta\|}^{-1}$.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-648939662863420961?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/648939662863420961/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=648939662863420961' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/648939662863420961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/648939662863420961'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2010/08/linear-control-of-nonlinear-systems-i.html' title='Linear Control of Nonlinear Systems - I'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-6023631364253640826</id><published>2010-06-30T15:28:00.000-07:00</published><updated>2010-07-02T15:35:41.785-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>W/ wires</title><content type='html'>Просто красивая плата, недавнее творение рук своих, так сказать))&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_rpVqpiC1tw8/TC5oSWppp-I/AAAAAAAAAM0/jMGRNEbl57Q/s1600/IMG_7001_.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 227px;" src="http://3.bp.blogspot.com/_rpVqpiC1tw8/TC5oSWppp-I/AAAAAAAAAM0/jMGRNEbl57Q/s400/IMG_7001_.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5489439660338423778" /&gt;&lt;/a&gt;&lt;br /&gt;На самом деле, ничто иное как многоканальный сервоконтроллер DC-двигателей. Внутри -- ПИД на 10 каналов для позиционирования, Ethernet и другие примочки.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-6023631364253640826?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/6023631364253640826/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=6023631364253640826' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/6023631364253640826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/6023631364253640826'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2010/06/w-wires.html' title='W/ wires'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_rpVqpiC1tw8/TC5oSWppp-I/AAAAAAAAAM0/jMGRNEbl57Q/s72-c/IMG_7001_.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-5190284408497087951</id><published>2010-05-14T15:10:00.000-07:00</published><updated>2010-05-14T15:48:14.867-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>A bit of a systematic approach to the decimation filters for sigma-delta ADC</title><content type='html'>&lt;b&gt;1. Сигма-дельта АЦП&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Всем известно, что сигма-дельта АЦП -- это очень здорово. Мне нравится такой тип АЦП потому что он наиболее полно реализует подход перенесения функционала в информационное (аппаратное/программное) обеспечение. Относительно простой аналоговый front-end вместе с последующей цифровой обработкой дают отличные параметры и стоимость.&lt;br /&gt;&lt;br /&gt;Большинство микросхем сигма-дельта АЦП -- интегрированное решение, пользователь которого может даже и не знать как это работает внутри: снаружи виден только код. Но настающую гибкость можно получить, используя чистый сигма-дельта модулятор (например, от Analog Devices типа AD7400/AD7401 или AD7724) с реализацией фильтра на FPGA или DSP. Кстати, AD7400/AD7401 -- особенно полезны в силовой электронике потому что содержат внутри себя гальванический изолятор ADuM.&lt;br /&gt;&lt;br /&gt;Удобство состоит в том, что двоичный поток с выхода модулятора может быть обработан параллельно несколькими фильтрами, в результате чего могут быть получены АЦП различных выходных характеристик. Например, медленное для точного измерения эффективного/амплитудного значения тока и быстрое для детектирования перегрузки по току.&lt;br /&gt;&lt;br /&gt;Этот подход проиллюстрирован на рисунке ниже, где с выхода SINC3-фильтра поступают 16-и битные данные с задержкой примерно 60 мкс, а с FIR-фильтра -- 5-и битные с задержкой 4 мкс, что позволяет организовать вместе с измерениями быстродействующую защиту.&lt;br /&gt;&lt;br /&gt;&lt;img src = "http://2.bp.blogspot.com/_rpVqpiC1tw8/S-3KtruIQ_I/AAAAAAAAAMQ/Ja81PIttTiU/s1600/DualFilter.GIF"&gt;&lt;br /&gt;&lt;br /&gt;С точки зрения обработки битового потока с модулятора, возникают два вопроса:&lt;br /&gt;- какими должны быть характеристики децимирующего фильтра, чтобы обеспечить заданную число эффективных бит выходного кода,&lt;br /&gt;- каким образом эффективно реализовать децимирующий фильтр.&lt;br /&gt;&lt;br /&gt;К сожалению, в большинстве текстов по сигма-дельта АЦП первому вопросу почти не уделено время. Вопросы эффективной реализации фильтров-дециматоров, напротив, обсуждаются весьма подробно. Далее рассмотрим только первый аспект -- системные характеристики фильтров. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Эффективная разрядность&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Пусть АЦП работает на частоте дискретизации $f_s$. Тогда спектральный шум квантования $E(f)$ определяется как:&lt;br /&gt;&lt;br /&gt;$$ E^2(f) = \frac{\sigma^2}{f_s} = \frac{A^2}{12 f_s} 2^{-2n}$$&lt;br /&gt;&lt;br /&gt;где $\sigma$ -- мощность шума квантования АЦП по амплитуде, $A$ -- максимальный измеряемый сигнал, $n$ -- число разрядов.&lt;br /&gt;&lt;br /&gt;Для сигма-дельта АЦП, очевидно $n=1$, и $E^2(f) = A^2/(48 f_s)$.&lt;br /&gt;&lt;br /&gt;Идея состоит в том, что, пропустив шум квантования через сигма-дельта модулятор и фильтр, можно получить некоторую спектральную характеристику $\hat E^2(f)$ и интегральную мощность шума $\hat \sigma$. По значению $\hat \sigma$ можно определить число эффективных разрядов выходного кода:&lt;br /&gt;&lt;br /&gt;$$ n = -\frac{1}{2} \log_2 \left( 12 \frac{\hat \sigma^2}{A^2} \right) $$&lt;br /&gt;&lt;br /&gt;Известно, что сигма-дельта модулятор порядка $m$ описывается в z-области выражением:&lt;br /&gt;&lt;br /&gt;$$ H_m(z) = (1-z^{-1})^m $$&lt;br /&gt;&lt;br /&gt;и его амплитудно-частотная характеристика:&lt;br /&gt;&lt;br /&gt;$$ H_m(f) = 2^m \left| \sin \frac{\pi f}{f_s} \right|^m $$&lt;br /&gt;&lt;br /&gt;Если $H(f)$ -- амплитудно-частотная характеристика децимирующего фильтра, то интегральную мощность шума на его выходе может быть определена как:&lt;br /&gt;&lt;br /&gt;$$\hat \sigma^2 = \int_{-f_s/2}^{f_s/2} \left( H_m(f) H(f) E(f) \right)^2 df$$&lt;br /&gt;&lt;br /&gt;или&lt;br /&gt;&lt;br /&gt;$$\hat \sigma^2 = \frac{2^{2m} A^2}{48 f_s} \int_{-f_s/2}^{f_s/2} \left( \sin \frac{\pi f}{f_s} \right)^{2m} H^2(f) df$$&lt;br /&gt;&lt;br /&gt;Отсюда эффективное число разрядов в общем виде:&lt;br /&gt;&lt;br /&gt;$$ n = -\frac{1}{2} \log_2 \left( \frac{1}{f_s} \int_{-f_s/2}^{f_s/2} \left( \sin \frac{\pi f}{f_s} \right)^{2m} H^2(f) df \right) - m + 1 $$&lt;br /&gt;&lt;br /&gt;Это соотношение очень полезно на практике -- оно позволяет по частотной характеристике децимирующего фильтра (или ее аппроксимации) сказать какая точность АЦП в результате получится.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Пример -- MATLAB&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Рассмотрим следующий пример: необходимо обеспечить токовую защиту в цепи с катушкой индуктивности, которая быстро входит в глубокое насыщение при коротком замыкании. Параметры системы измерения: &lt;br /&gt;- частота дискретизации однобитного сигма-дельта АЦП: $f_s = 12.5 \cdot 10^6 Hz$,&lt;br /&gt;- порядок сигма-дельта модулятора: $m=2$,&lt;br /&gt;- время реакции на превышение тока сверх предельного значения: $\tau \le 4 \cdot 10^{-6} s$,&lt;br /&gt;- эффективная разрядность: $n \ge 5$.&lt;br /&gt;&lt;br /&gt;Из требований по времени реакции $\tau$ следует, что частота среза децимирующего фильтра должна быть $f_p \ge \tau^{-1}$. Можно выбрать коэффициент децимации $k=32$ и $f_p = f_s/k$.&lt;br /&gt;&lt;br /&gt;С помощью средства filterbuilder в MATLAB синтезируем FIR-фильтр порядка 32 с нормированной частотой среза $1/k$, и агрессивно квантизируем его реализацию: вход -- данные с фиксированной точкой 7+1 бит, длина коэффициентов -- 9 бит.&lt;br /&gt;&lt;br /&gt;Численное интегрирование с помощью &lt;a href="http://sites.google.com/site/akpc806a/CalcEffectiveResolution.m"&gt;этого&lt;/a&gt; MATLAB-скрипта дает эффективную разрядность: $n = 6.2749$.&lt;br /&gt;&lt;br /&gt;Промоделируем фильтр на битовом потоке с сигма-дельта модулятора, который получен при воздействии одиночного импульса его вход:&lt;br /&gt;&lt;img src="http://1.bp.blogspot.com/_rpVqpiC1tw8/S-3LW1CK4oI/AAAAAAAAAMY/uWuSKwJ78f0/s1600/DecimMatlab.gif"&gt;&lt;br /&gt;зеленая кривая -- импульс на входе сигма-дельта модулятора,&lt;br /&gt;синяя кривая -- выход фильтра.&lt;br /&gt;&lt;br /&gt;Из моделирования видно, что время реакции АЦП на импульсный сигнал составляет около 2 мкс.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Пример -- реальне железо&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Рассмотрим результат испытания полученного выше фильтра. В качестве сигма-дельта модулятора использовалась микросхема AD7401, ток в цепи измерялся индуктивным датчиком с полосой пропускания 200 кГц.&lt;br /&gt;&lt;br /&gt;Исходный код фильтра получен автоматической генерацией на язык Verilog из средства filterbuilder. Единственная модификация кода состояла в конвертировании битового потока с целые числа, поступающие на вход фильтра: значение 0 -- в -128, значение 1 -- в +127. После синтеза для Altera Cyclone III EP3C25E144C8N фильтр занимает 450 логических ячеек.&lt;br /&gt;&lt;br /&gt;Для реализации функции защиты от короткого замыкания выход фильтра АЦП непрерывно сравнивается с эквивалентным значением тока 25 А и при превышении -- цепь разрывается.&lt;br /&gt;&lt;br /&gt;Осциллограмма сигналов в схеме без защиты:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_rpVqpiC1tw8/S-3MMVgiBWI/AAAAAAAAAMg/py3jDeOJ3P8/s1600/tek00002.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_rpVqpiC1tw8/S-3MMVgiBWI/AAAAAAAAAMg/py3jDeOJ3P8/s400/tek00002.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5471253634629109090" /&gt;&lt;/a&gt;&lt;br /&gt;фиолетовый канал -- ток в цепи (использовался токовый делитель 1:20),&lt;br /&gt;синий канал -- сигнал короткого замыкания в схеме,&lt;br /&gt;желтый канал -- сигнал срабатывания защиты.&lt;br /&gt;&lt;br /&gt;Видно, что за время менее чем 10 мкс после превышения значения 25 А ток в цепи вырос до более чем 80 А.&lt;br /&gt;&lt;br /&gt;Осциллограмма сигналов в схеме с включенной защитой:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_rpVqpiC1tw8/S-3MXcn8ShI/AAAAAAAAAMo/vbDrrsRGHoc/s1600/tek00000.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_rpVqpiC1tw8/S-3MXcn8ShI/AAAAAAAAAMo/vbDrrsRGHoc/s400/tek00000.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5471253825517799954" /&gt;&lt;/a&gt;&lt;br /&gt;(сигналы те же, что и в схеме без защиты)&lt;br /&gt;&lt;br /&gt;Видно, что схема защиты срабатывает спустя 2.5 мкс после превышения порогового значения (25 А) и ток в цепи не больше 44 А.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. Файлы для скачивания&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/akpc806a/CalcEffectiveResolution.m"&gt;Функция для вычисления эффективной разрядности&lt;/a&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/akpc806a/CIC_MATLAB%4005.15.10_02-19.rar"&gt;Скрипт в MATLAB с рассмотренными примером&lt;/a&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/akpc806a/CIC_Verilog%4005.15.10_02-21.rar"&gt;Verilog код фильтра и do-файл для моделирования в ModelSim&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-5190284408497087951?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/5190284408497087951/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=5190284408497087951' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/5190284408497087951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/5190284408497087951'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2010/05/bit-of-systematic-approach-to.html' title='A bit of a systematic approach to the decimation filters for sigma-delta ADC'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_rpVqpiC1tw8/S-3KtruIQ_I/AAAAAAAAAMQ/Ja81PIttTiU/s72-c/DualFilter.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-6197234896450758409</id><published>2010-03-14T15:55:00.000-07:00</published><updated>2010-06-01T11:15:28.298-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>On algebra of systems - I</title><content type='html'>Практическая мотивация состоит в том, что любая реализация системы управления -- это композиция компенсатора и объекта управления, удовлетворяющая каким-то заданными критериям. Поэтому принципиально важно, независимо от рассматриваемого класса систем, иметь описывающий их композицию формализм.&lt;br /&gt;&lt;br /&gt;Будем рассматривать абстрактные системы вида:&lt;br /&gt;&lt;br /&gt;$$S : X \to Y$$&lt;br /&gt;&lt;br /&gt;где $X,Y$ -- какие-то абстрактные объекты (например, множества), описывающие входные и выходные воздействия. Функциональную зависимость $S$ можно интерпретировать как отношение на произведении: $S \subseteq X \times Y$.&lt;br /&gt;&lt;br /&gt;В отображаемых системой объектах выделим компоненты $X^*,Y^*$ участвующие в композиции, т.е. можно записать $S : (X \times X^*) \to (Y \times Y^*)$.&lt;br /&gt;&lt;br /&gt;Последовательное соединение двух систем $S = S_1 \odot S_2$, где $S_1 : X_1 \to (Y_1 \times Y_1^*)$ и $S_2 : (X_2 \times X_2^*) \to Y_2$ -- это система $S : (X_1 \times X_2) \to (Y_1 \times Y_2)$, полученная подстановкой $X_2^* := Y_1^*$ в $S_2$. Более формально, $S (X_1 \times X_2) = \pi_{Y_1} \circ S_1(X_1) \times S_2(X_2 \times \pi_{Y_1^*} \circ S_1(X_1))$, где $\pi_{Y_1}, \pi_{Y_1^*}$ -- соответствующие канонические проекции. &lt;br /&gt;&lt;br /&gt;Параллельное соединение двух систем $S = S_1 \oplus S_2$, где $S_1 : (X_1 \times X_1^*) \to Y_1$ и $S_2 : (X_2 \times X_2^*) \to Y_2$ -- это система $S : (X_1 \times X_2) \times X \to (Y_1 \times Y_2)$, полученная объединением входов: $X := X_1^* = X_2^*$. Более формально, $S (X_1 \times X_2 \times X) = S_1(X_1 \times X) \times S_2(X_2 \times X)$.&lt;br /&gt;&lt;br /&gt;Замыкание обратной свзи $\hat{S}$ в системе $S : (X \times X^*) \to (Y \times Y^*)$ -- это система $\hat{S} : X \to Y$, полученная подстановкой $X_1^* := Y_1^*$ в $S$. Более формально, $\hat{S}(X) = S(X \times Z)$, где $Z = \pi_{Y^*} \circ S(X \times Z)$.&lt;br /&gt;&lt;br /&gt;Операции $\odot, \oplus, \hat{}$ -- замкнуты по отношению к базовому множеству систем $\mathcal{S}$:&lt;br /&gt;&lt;br /&gt;$$ \odot : \mathcal{S} \times \mathcal{S} \to \mathcal{S} $$&lt;br /&gt;$$ \oplus : \mathcal{S} \times \mathcal{S} \to \mathcal{S} $$&lt;br /&gt;$$ \hat{} : \mathcal{S} \to \mathcal{S} $$&lt;br /&gt;&lt;br /&gt;Довольно очевидно, что операции композиции ассоциативны:&lt;br /&gt;&lt;br /&gt;$$ (A \odot B) \odot C = A \odot (B \odot C) $$&lt;br /&gt;$$ (A \oplus B) \oplus C = A \oplus (B \oplus C) $$&lt;br /&gt;&lt;br /&gt;Ничто не мешает коммутативности параллельной композиции:&lt;br /&gt;&lt;br /&gt;$$ A \oplus B = B \oplus A $$&lt;br /&gt;&lt;br /&gt;Нейтральным элементом $0$ для операции параллельного соединения является пустая система: $0 : \varnothing \to \varnothing$, поскольку $S \oplus 0 = S$. По отношению к параллельной композиции инверсный элемент $\ominus S$ -- это такой, что нейтрализует действие системы $S \oplus \ominus S = S \ominus S = 0$. &lt;br /&gt;&lt;br /&gt;Можно определить обратные элементы для операции последовательной композиции. Систему $S : X \to Y$ можно преобразовать в $1_X : X \to X$ и $1_Y : Y \to Y$ c помощью последовательного соединения с соответственно правой $S^{-1} : Y \to X$ и левой инверсией $^{-1}S : Y \to X$ :&lt;br /&gt;&lt;br /&gt;$$ S \odot S^{-1} = 1_X $$&lt;br /&gt;$$ {}^{-1}S \odot S = 1_Y $$ &lt;br /&gt;&lt;br /&gt;Далеко не у каждой системы $S \in \mathcal{S}$ существует обратный элемент по отношению к операции последовательной композиции. Если $X,Y$ -- множества, то $S$ инвертируема тогда и только тогда, когда $S$ -- автоморфизм, т.е. $X=Y$. Далее будем рассматривать инвертируемые системы.&lt;br /&gt;&lt;br /&gt;Операция последовательной композиции не коммутативна:&lt;br /&gt;&lt;br /&gt;$$ A \odot B \ne B \odot A $$&lt;br /&gt;&lt;br /&gt;Можно показать, что верно левое дистрибутивное свойство умножения:&lt;br /&gt;&lt;br /&gt;$$ A \odot (B \oplus C) = (A \odot B) \oplus (A \odot C) $$&lt;br /&gt;&lt;br /&gt;но правый дистрибутивный закон не выполняется.&lt;br /&gt;&lt;br /&gt;Также верно правое дистрибутивное свойство сложения:&lt;br /&gt;&lt;br /&gt;$$ (A \odot B) \oplus C = (A \oplus C) \cdot (B \oplus C) $$&lt;br /&gt;&lt;br /&gt;но левый дистрибутивный закон не выполняется.&lt;br /&gt;&lt;br /&gt;Таким образом, $(\mathcal{S}, \oplus)$ -- коммутативная группа, $(\mathcal{S}, \odot)$ -- некоммутативная группа, обе структуры объединены с помощью левого дистрибутивного свойства умножения и правого для сложения.&lt;br /&gt;&lt;br /&gt;Алгебраическую структуру $(\mathcal{S}, \odot, \oplus)$ можно классифицировать двойственно. По отношению к дистрибутивности сложения эта структура -- почти-кольцо (nearring), в которой мультипликативная структура дополнительно обладает свойствами коммутативности и существования нейтрального элемента. По отношению к дистрибутивности умножения эта структура -- также почти-кольцо (nearring), в которой мультипликативная структура содержит нейтральный элемент и инверсию, а аддитивная -- обладает свойством коммутативности и также содержит нейтральный элемент.&lt;br /&gt;&lt;br /&gt;Интересно, что конструкции типа seminearring очень сильно связаны с алгеброй процессов (Process Algebra).&lt;br /&gt;&lt;br /&gt;Про обратную связь -- в следующий раз :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-6197234896450758409?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/6197234896450758409/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=6197234896450758409' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/6197234896450758409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/6197234896450758409'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2010/03/on-algebra-of-systems-i.html' title='On algebra of systems - I'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-8476506162859445945</id><published>2010-02-20T14:54:00.000-08:00</published><updated>2010-02-26T02:12:45.548-08:00</updated><title type='text'>On simple switching feedback linearization control</title><content type='html'>В прошлый раз я сказал, что все равно: решать систему уравнений или управлять динамической системой -- в какой-то степени это подобные вещи ;-)&lt;br /&gt;&lt;br /&gt;Вернемся к динамической системе $\Sigma$:&lt;br /&gt;&lt;br /&gt;$$\dot{X} = U - X$$&lt;br /&gt;$$Y = Y(X)$$&lt;br /&gt;&lt;br /&gt;Что если $\det J_Y = 0$? Тогда обычная линеаризация не работает.&lt;br /&gt;&lt;br /&gt;Пусть $N_{\epsilon}(X^@) = \{X \in \mathbb{R}^n | X = X^@ + \delta, \det J_Y(X^@) = 0, |\delta| &lt; \epsilon\}$ -- окрестность вокруг точки сингулярности якобиана. &lt;br /&gt;&lt;br /&gt;В области $N_{\epsilon}(X^@)$ мы в самом деле имеем систему, отличную от $\Sigma$. В этой области полной линеаризации системы $\Delta = \mu(\Sigma)$ не существует.&lt;br /&gt;&lt;br /&gt;Я предлагаю сделать следующее: воспользоваться тем, что траектория $X(t)$ -- непрерывна. Это означает, что &lt;br /&gt;&lt;br /&gt;$$X(t + dt) = X(t) + \dot{X} dt + o(\| dt \|) \approx X(t) + (U(t) - X(t)) dt$$&lt;br /&gt;&lt;br /&gt;т.е. мы можем продлить фазовую траекторию через $N_{\epsilon}(X^@)$, аппроксимировав ее прямой линией.&lt;br /&gt;&lt;br /&gt;Дискретизировав про времени, получаем следующее: если в какой-то момент времени $t=t_d$ оказывается, что $\det J_Y(X^{t_d}) \approx \epsilon$, то имеет смысл "заморозить" вычисление инверсии якобиана, сохранив прежнее $C = J_Y^{-1}(X^{t_d}) (Y^{t_d} - Y^*)$ и итерируя далее по прямой:&lt;br /&gt;&lt;br /&gt;$$X^{t+1} = X^{t} - C \cdot \delta t$$&lt;br /&gt;&lt;br /&gt;до тех пор пока не станет снова $\det J_Y(X^{t}) &gt; \epsilon$.&lt;br /&gt;&lt;br /&gt;С другой стороны, в некоторых случаях непрерывной траектории $X(t)$, проходящей через $N_{\epsilon}$, не существует. Можно показать, что если&lt;br /&gt;&lt;br /&gt;$$ \operatorname{sign} \det J_Y(X(t_d)) \ne \operatorname{sign} \det J_Y(X(t_d) + \dot{X}_{t=t^d} dt) $$&lt;br /&gt;&lt;br /&gt;то никакое управление $U(t), t \in [t_d, \infty)$ не продлит траекторию через область сингулярности $N_{\epsilon}$.&lt;br /&gt;&lt;br /&gt;В этим примере нетривиально то, что мы получаем гетерогенную систему с двумя дискретными состояниями $S = \{ S_f, S_a \}$: $S_f$ -- состояние полной линеаризуемости системы и $S_a$ -- состояние приближенной линеаризации с замещением $\Sigma$ линейной моделью. И соответственно теория гетерогенных систем может быть использована для поиска ответов на такие вопросы:&lt;br /&gt;- всегда ли такой итеративный процесс сойдется к конечному состоянию (решению),&lt;br /&gt;- возможна ли другая стратегия управления в области сингулярности? &lt;br /&gt;и т.д.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-8476506162859445945?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/8476506162859445945/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=8476506162859445945' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/8476506162859445945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/8476506162859445945'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2010/02/on-simple-switching-feedback.html' title='On simple switching feedback linearization control'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-6668845400901604620</id><published>2010-02-20T12:59:00.000-08:00</published><updated>2010-02-20T13:12:55.442-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Newton method from a control theoretic point of view</title><content type='html'>Простой и очевидный результат, но в явном виде такого не видел и это понадобиться мне дальше.&lt;br /&gt;&lt;br /&gt;Пусть необходимо решить систему уравнений вида $Y(X)=Y^*$, которая все равно что $\hat Y(X)=Y(X)-Y_0=0$.&lt;br /&gt;&lt;br /&gt;Классический метод Ньютона (&lt;a href="http://en.wikipedia.org/wiki/Newton's_method"&gt;Newton's method&lt;/a&gt;) состоит том, что если $J_{Y}$ -- якобиан $Y(X)$, то итерируя по формуле с какого-то $X^{0}$:&lt;br /&gt;&lt;br /&gt;$$X^{t+1} = X^{t+1} - J_{Y}^{-1}(X^t) \cdot (Y(X^t)-Y^*)$$&lt;br /&gt;&lt;br /&gt;в конце мы получим искомый $Y(X^*) = Y^*$.&lt;br /&gt;&lt;br /&gt;Как на это можно посмотреть с позиций теории управления?&lt;br /&gt;&lt;br /&gt;В терминах управления, решить исходную систему -- значит перевести объект из какого-то исходного состояния $X^{0}$ в состояние решения $X^*$ где $Y^*=Y(X^*)$.&lt;br /&gt;&lt;br /&gt;Свяжем с решаемым уравнением следующую динамическую систему $\Sigma$:&lt;br /&gt;&lt;br /&gt;$$\dot{X} = U - X$$&lt;br /&gt;$$Y = Y(X)$$&lt;br /&gt;&lt;br /&gt;где $U \in \mathbb{R}^n$ -- входные воздействия, $X \in \mathbb{R}^n$ -- пространство состояний.&lt;br /&gt;&lt;br /&gt;Очевидно, эта динамическая система -- просто исходное уравнение, на вход которого подаются переменные, пропущенные через элемент задержки (лаг первого порядка).&lt;br /&gt;&lt;br /&gt;Поскольку речь идет про нелинейное управление, то осуществим полную линеаризацию (&lt;a href="http://en.wikipedia.org/wiki/Feedback_linearization"&gt;feedback linearization&lt;/a&gt;) системы $\Sigma$ -- т.е. сделав так, чтобы данная система "выглядела" снаружи как некоторая линейная система $\Delta$. Иными словами у нас есть морфизм $\mu$, отображающий системы управления:&lt;br /&gt;&lt;br /&gt;$$ \mu : \Sigma \to \Delta $$&lt;br /&gt;&lt;br /&gt;Проделав то, что предлагает метод полной линеаризации систем управления, получаем следующую систему $\Delta$:&lt;br /&gt;&lt;br /&gt;$$ \dot{Y} = V $$&lt;br /&gt;&lt;br /&gt;которая получается из исходной $\Sigma$ подстановкой $U = J_Y^{-1} V + X$.&lt;br /&gt;&lt;br /&gt;С помощью преобразования $\mu$ мы свели задачу управления нелинейной системой к задаче управления линейной. Как известно, система $\Delta$ может быть стабилизирована статической отрицательной обратной связью: положив $V = k \cdot (Y^* - Y)$, где $k$ -- коэффициент обратной связи и $Y^*$ -- правая часть уравнения как референсная точка. После переходного процесса в управляемой системе, получаем на выходе $Y^*$ и в пространстве состояний искомое решение $X^*$.&lt;br /&gt;&lt;br /&gt;Дискретизируем все это по времени с шагом $\delta t$. Получаем итерации в системе $\Delta$:&lt;br /&gt;&lt;br /&gt;$$V^{t+1} = k\cdot(Y^* - Y^t)$$&lt;br /&gt;$$Y^{t+1} = Y^t + V^{t+1} \delta t$$&lt;br /&gt;&lt;br /&gt;И в исходной системе $\Sigma$:&lt;br /&gt;&lt;br /&gt;$$V^{t+1} = k\cdot(Y^* - Y^t)$$&lt;br /&gt;$$U^{t+1} = J_Y^{-1}(X^t) V^{t+1} + X^t$$&lt;br /&gt;$$X^{t+1} = X^{t} + (U^{t+1} - X^t) \delta t$$&lt;br /&gt;&lt;br /&gt;что после подстановки дает&lt;br /&gt;&lt;br /&gt;$$X^{t+1} = X^{t} - J_Y^{-1}(X^t) \cdot (Y^t - Y^*) (k \cdot \delta t)$$&lt;br /&gt;&lt;br /&gt;Если сказать, что $(\delta t)^{-1} = k$ -- коэффициент обратной связи в стабилизаторе, то полученное выражение полностью совпадает с итерацией в методе Ньютона :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-6668845400901604620?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/6668845400901604620/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=6668845400901604620' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/6668845400901604620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/6668845400901604620'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2010/02/newton-method-from-control-theoretic.html' title='Newton method from a control theoretic point of view'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-6798981787012689111</id><published>2010-02-13T11:14:00.000-08:00</published><updated>2010-03-02T14:01:31.437-08:00</updated><title type='text'>DSP-based control : Hands-On example</title><content type='html'>Снова простой пример из практики дает повод к глубоким размышлениям.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Позиционирование.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Вернемся к задаче позиционирования. Речь идет об управлении системой с интегратором вида $P(s)=k/s$. Как можно решить эту задачу, применяя подход цифровой обработки сигналов? :-)&lt;br /&gt;&lt;br /&gt;Объект управления $P$, в самом деле, не более чем цифровой фильтр. Значит, необходимо синтезировать комплементарный ему цифровой фильтр $C(z)$ так, чтобы их композиция $P(z) \cdot C(z)=S(z)$ удовлетворяла некоторой спецификации $S(z)$.&lt;br /&gt;&lt;br /&gt;Очевидно, что разомкнутая система с интегратором неустойчива и последовательным соединением с фильтром не может быть стабилизирована. В таком случае, перед синтезом фильтра необходимо охватить $P$ обратной связью. Получим из $P(s)=k/s$ нечто вроде $P(s)=k/(s+\lambda)$. Легко проверить, что отрицательная обратная связь с коэффициентом усиления $\lambda/k$ дает искомый результат. &lt;br /&gt;&lt;br /&gt;Перейдя в дискретную область, получаем &lt;br /&gt;&lt;br /&gt;$$P(s)=k/(s+\lambda) \mapsto P(z)=\alpha z^{-1}/(1-\beta z^{-1})$$, &lt;br /&gt;&lt;br /&gt;где $\alpha = \frac{2 k T}{2+T \lambda}, \beta = \frac{2-T \lambda}{2+T \lambda}$. &lt;br /&gt;&lt;br /&gt;Идеальный вариант, если будет $S=1$, тогда $C(z)=P^{-1}(z)$. Но в данном случае такой контроллер не может быть реализован, поскольку не является каузальным: &lt;br /&gt;&lt;br /&gt;$$C(z)=\alpha^{-1}z/(1-z^{-1} \beta)$$&lt;br /&gt;&lt;br /&gt;Для реализации фильтра $C(z)$ можно применить подход Шеннона-Боде, который заключается в том (если грубо), что исходный фильтр представляется как суперпозиция $C(z)=H_w(z)H^{*}(z)$ стабильного и минимально-фазового выбеливающего фильтра $H_w(z)$ и фильтра $H^{*}(z)$ -- каузальной аппроксимации $H(z) = C(z)H^{-1}_w(z)$, полученной удалением всех некаузальных составляющих из импульсной характеристики.&lt;br /&gt;&lt;br /&gt;Получим $H_w(z)$, вычислив автокорреляционную функцию на выходе $P(z)$ и осуществив ее спектральную факторизацию:&lt;br /&gt;&lt;br /&gt;$$P(z)P(z^{-1}) = \frac{\alpha z^{-1}}{1-\beta z^{-1}} \cdot \frac{\alpha z}{1-\beta z} = \Phi_{+}(z) \Phi_{-}(z)$$,&lt;br /&gt;&lt;br /&gt;где компонент $\Phi_{+}(z) = \frac{\alpha}{1-\beta z^{-1}}$ содержит все нули и полюса внутри единичного круга, а $\Phi_{-}(z) = \frac{\alpha}{1-\beta z}$ -- вне. &lt;br /&gt;&lt;br /&gt;Из факторизации находится  $H_w(z) = \Phi_{+}^{-1}(z)$ -- всегда стабильный и каузальный выбеливающий фильтр. &lt;br /&gt;&lt;br /&gt;В данном случае: &lt;br /&gt;&lt;br /&gt;$$H_w(z) = \alpha^{-1}(1-\beta z^{-1})$$&lt;br /&gt;$$H(z) = z$$&lt;br /&gt;&lt;br /&gt;Исходя из выражения для $H(z)$, мы не можем отбросить некаузальные компоненты. Однако, если положить $H^{*}(z) = 1$, то в результате получится, что &lt;br /&gt;&lt;br /&gt;$$ H_w(z)H^{*}(z)P(z) = z^{-1} $$&lt;br /&gt;&lt;br /&gt;Иными словами, спецификация $S(z) = 1$ не может быть удовлетворена, однако может быть выполнена спецификация $S^{*}(z) = z^{-1}$, почти совпадающая с исходной.&lt;br /&gt;&lt;br /&gt;В общем случае, импульсная характеристика $H(z)$ раскладывается в убывающий ряд:&lt;br /&gt;&lt;br /&gt;$$H(z) = C(z)H^{-1}_w(z) = \sum_{i=0}^k h^{+}_i z^{-i} + \sum_{i=-\infty}^{-1} h^{-}_i z^{-i}$$&lt;br /&gt;&lt;br /&gt;причем $|h^{-}_i| &gt; |h^{-}_{i-1}|$.&lt;br /&gt;&lt;br /&gt;Таким образом, выбрав $S^{*}(z) = z^{-\Delta}$, можно получить конечную аппроксимацию заданной точности:&lt;br /&gt;&lt;br /&gt;$$H^{*}(z) = \sum_{i=0}^k h^{+}_i z^{-i-\Delta} + \sum_{i=-\Delta}^{-1} h^{-}_i z^{-i-\Delta} \approx H(z)$$&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Реальне железо.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Выше установлено, что для оптимального управления интегратором $P(s)=k/s$ необходимо:&lt;br /&gt;&lt;br /&gt;- охватить его отрицательной обратной связью с коэффициентом $\lambda/k$,&lt;br /&gt;&lt;br /&gt;- входные воздействия пропустить через КИХ фильтр $C(z) = \alpha^{-1}(1-\beta z^{-1})$.&lt;br /&gt;&lt;br /&gt;Положим, что $T = 0.015, k = 250, \lambda=5$, тогда мы реализуем систему:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_rpVqpiC1tw8/S3b6-X0p72I/AAAAAAAAAJU/dc4FHcWAYN0/s1600-h/Sh.GIF"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 150px;" src="http://3.bp.blogspot.com/_rpVqpiC1tw8/S3b6-X0p72I/AAAAAAAAAJU/dc4FHcWAYN0/s400/Sh.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5437809549550153570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Моделирование в Simulink на входном воздействии $u(t)=30 h(t)$, где $h(t)$ -- единичная функция, дает предсказанный результат:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_rpVqpiC1tw8/S3b7FolkhzI/AAAAAAAAAJc/gy_iOdHYTwY/s1600-h/Ml.GIF"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 302px;" src="http://3.bp.blogspot.com/_rpVqpiC1tw8/S3b7FolkhzI/AAAAAAAAAJc/gy_iOdHYTwY/s400/Ml.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5437809674309371698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Теперь проверим все это в железе. В нашем распоряжении есть частотник LG серии iS7, работающий в режиме полного векторного управления, энкодер на 500 меток на оборот и двигатель на 1,5 кВт. Система управления реализована на синтезируемом процессоре NIOS в FPGA Altera Cyclone II. Частота дискретизации 15 мс, установка скорости вращения осуществляется по шине Modbus.&lt;br /&gt;&lt;br /&gt;Это реакция на сигнал $u(t)=30 h(t)$ без фильтра-компенсатора $C(z)$.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_rpVqpiC1tw8/S3b7LdUJ1rI/AAAAAAAAAJk/8csI1B_vKFw/s1600-h/Ol.GIF"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_rpVqpiC1tw8/S3b7LdUJ1rI/AAAAAAAAAJk/8csI1B_vKFw/s400/Ol.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5437809774362744498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Вот реакция на $u(t)=30 h(t)$ с полностью реализованным регулятором.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_rpVqpiC1tw8/S3b7S2VmEZI/AAAAAAAAAJs/CjFQ58j6UrY/s1600-h/Cl.GIF"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_rpVqpiC1tw8/S3b7S2VmEZI/AAAAAAAAAJs/CjFQ58j6UrY/s400/Cl.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5437809901338759570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;В целом, совпадает с предсказанным теорией :)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Более общие мысли&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Пусть у нас есть объект управления $P$ и спецификация на систему $S$. Синтез управления состоит в том, чтобы найти такой стабилизатор $C$, для которого верно $P \circ C = S$, где $\circ$ -- некоторая композиция объекта управления и контроллера. Т.е. синтез стабилизатора -- это на самом деле декомпозиция (факторизация) спецификации $S$ с выделением $P$.&lt;br /&gt;&lt;br /&gt;Если рассматривать временную область, то очень хорошо когда $S=1$, т.е. контроллер представляет собой инверсию объекта управления $P$. Но такое редко возможно, потому как не всегда $P$ инвертируем, и в реальности на него действуют внешние неконтролируемые возмущения. &lt;br /&gt;Тогда имеет смысл рассматривать приближенную факторизацию: т.е. синтез такого $C^{*}$, что $C^* \circ P = S^*$, где $S^{*}$ -- приближение к $S$ по некоторой мере $\mu(S,S^{*}) \le \epsilon$.&lt;br /&gt;&lt;br /&gt;Реальный интерес представляют гетерогенные системы, где пространство состояний -- декартово произведение дискретных и непрерывных множеств состояний. Частный случай -- переключаемые системы управления (Switching Control). Тут возникает множество проблем, начиная с того, что основные понятия теории управления (устойчивость, наблюдаемость, etc) должны быть расширены с учетом того, что мы имеем иерархический процесс -- где непрерывная система не может достичь заданного состояния, мы заменяем ее не другую (как, например, в коробке скоростей). &lt;br /&gt;&lt;br /&gt;Работы такого рода имеются. Это активно развивающаяся область. Наверное, я напишу что-то сюда в этом ключе в ближайшее время.&lt;br /&gt;&lt;br /&gt;Кстати, отличное введение в гибридные системы -- &lt;a href="http://www.stanford.edu/class/aa278a/"&gt;этот курс лекций&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-6798981787012689111?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/6798981787012689111/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=6798981787012689111' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/6798981787012689111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/6798981787012689111'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2010/02/fx1.html' title='DSP-based control : Hands-On example'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_rpVqpiC1tw8/S3b6-X0p72I/AAAAAAAAAJU/dc4FHcWAYN0/s72-c/Sh.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-2613516495255799024</id><published>2010-01-07T14:52:00.000-08:00</published><updated>2010-01-07T14:53:30.303-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Немного о логике</title><content type='html'>&lt;i&gt; &gt; Логика также определяется как наука о правильном мышлении&lt;/i&gt; &lt;a href="http://ru.wikipedia.org/wiki/Логика"&gt;[отсюда]&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Я часто вижу это определение. И оно вызывает отторжение.&lt;br /&gt;&lt;br /&gt;1. Во-первых, что значит "правильное"? Мы можем говорить о "правильности" только в смысле какой-то метрики: насколько рассматриваемый процесс близок к какому-то идеалу. &lt;br /&gt;&lt;br /&gt;Например, если взять нечеткую логику и в качестве функции принадлежности для высказывания "x -- положительное" выбрать:&lt;br /&gt;&lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=%5Cmu_{%5Clambda}(x)=%5Cfrac{1}{1%2B%5Cexp(-{%5Clambda%20x})}"&gt;&lt;br /&gt;то тогда норма может быть записана как-то так:&lt;br /&gt;&lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=d({%5Clambda})=%5Cint_{-%5Cinfty}^{%5Cinfty}{||%5Cmu_{%5Clambda}(x)-step(x)||dx}"&gt;&lt;br /&gt;И в пределе при &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=%5Clambda%5Cto%5Cinfty"&gt; такая нечеткая логика переходит в классическую детерменированную.&lt;br /&gt;&lt;br /&gt;Если метрику можно как-то определить, то как определить идеал? Какое мышление является абсолютно "правильным"?&lt;br /&gt;&lt;br /&gt;2. Во-вторых, мышление -- это то, что не является совершенно понятным процессом. Мышление можно охарактеризовать как деятельность по анализу и синтезу информации. Мышление часто направлено на принятие решений, т.е. осмысленное действие является конечной целью рассуждений. В таком случае, анализ мышления скорее должен проводится с позиций теории оптимальных решений. И тут добавляется еще одна метрика -- критерий оптимальности решения, ведь разные критерии порождают совершенно разные процессы рассуждений и разные стратегии решений. &lt;br /&gt;&lt;br /&gt;На мой взгляд, интересным примером к сказанному может быть &lt;a href="http://ru.wikipedia.org/wiki/Парадокс_Монти_Холла"&gt;Парадокс Холла&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3. Во многих ситуациях мышление -- в самом деле задача распознавания. Мы не долго думаем, когда встречается какая-то стандартная ситуация, а просто извлекаем из памяти некоторый шаблон поведения и применяем его. Если ситуация нестандартная и попадает под множество таких "шаблонов", то опять же мы применяем некоторую метрику и определяем какому "шаблону" ближе всего соответствует анализируемое событие. Вероятно, таким образом мыслят юристы, когда применяют законы. ;-)&lt;br /&gt;&lt;br /&gt;4. Что же такое логика в самом деле? Логика -- это не более чем математический объект. Некоторые виды логики действительно могут быть хорошим моделями рассуждений, но только моделями. Классическая логика мало подходит для моделирования мышления, однако она безусловно играет исключительную роль в технике и математике. &lt;br /&gt;&lt;br /&gt;Вообще мы привыкли, что математика построена на классической логике. Но было бы забавно придумать и использовать такие конструкции, которые бы основаны на других вариантах логики, например на нечеткой. Например, теория групп, результаты которой получены нечетким выводом и переходящая в обычную классическую теорию групп при предельном значении параметра (как в п.1). Разумеется, такая структура вряд ли будет полезна для анализа чего-то существующего, но например можно было бы построить нечеткую в этом смысле теорию Галуа для описания корней нечетких многочленов. &lt;br /&gt;Вероятно такой подход применим для анализа каких-нибудь процессов реального мира (социология, экономика). Может быть кто-то такое делал, но я еще не видел... :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-2613516495255799024?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/2613516495255799024/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=2613516495255799024' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/2613516495255799024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/2613516495255799024'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2010/01/blog-post.html' title='Немного о логике'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-2180191282973183373</id><published>2009-09-09T12:17:00.000-07:00</published><updated>2009-09-09T12:24:51.402-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Что главное нужно знать, чтобы "крутить желесски":</title><content type='html'>Чтобы разрабатывать электронику нужно, в первую очередь, держать в голове две простые идеи:&lt;br /&gt;1. Не обязательно понимать как работает то, что ты применяешь в своих схемах. Главное точно знать, что оно делает, и что ему для этого нужно.&lt;br /&gt;2. Все электронные компоненты являются расходными материалами. Даже самые дорогие. Даже печатные платы. &lt;br /&gt;&lt;br /&gt;ПС: Кто-то конечно скажет сейчас, что так думают только быдло-схемотехники :-D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-2180191282973183373?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/2180191282973183373/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=2180191282973183373' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/2180191282973183373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/2180191282973183373'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2009/09/blog-post.html' title='Что главное нужно знать, чтобы &quot;крутить желесски&quot;:'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-1361284252433989428</id><published>2009-09-07T12:47:00.000-07:00</published><updated>2009-09-07T12:57:42.109-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>On semidefinite liftings)</title><content type='html'>Пытаясь в недавнем диалоге выяснить до чего все-таки додумались в методах полуопределенной релаксации для задач выполнимости (Semidefinite Relaxation for Satisfiability), я нашел аналогию с тривиальным.&lt;br /&gt;&lt;br /&gt;В методах релаксации мы конструируем задачу непрерывной оптимизации (в данном случае -- полуопределенного программирования) во множество решений которой входит решение исходной дискретной задачи. Полуопределенное программирование (как и линейное, а вообще -- как всякое выпуклое) решается просто, поэтому мы имеем профит. Ключевой момент в том, что существует классы формул, для которых известно, что если соответствующая задача полуопределенного программирования несовместна, то формула невыполнима.&lt;br /&gt;&lt;br /&gt;Вообще, такое умеет каждый школьник, потому что он знает формулу включения-исключения))&lt;br /&gt;&lt;br /&gt;Возьмем функцию &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\phi(X)"&gt; в ДНФ, определенную на &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\hbox{dom} \phi = \{0,1\}^n"&gt;. Разделим &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\hbox{dom} \phi = \hbox{dom}^{%2B} \phi \cup \hbox{dom}^{-} \phi"&gt; , где &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\forall X \in \hbox{dom}^{%2B} \phi : \phi(X) = 1"&gt;. &lt;br /&gt;&lt;br /&gt;Если &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\phi(X) \equiv 1"&gt;, то &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=|\hbox{dom}^{%2B} \phi| = 2^n"&gt;. Поскольку &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\phi"&gt; задана в ДНФ, то &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\phi = \bigvee_{i=1}^m C_i"&gt; и &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\hbox{dom}^{%2B} \phi = \bigcup_i \hbox{dom}^{%2B} C_i"&gt; &lt;br /&gt;&lt;br /&gt;Написав формулу включения-исключения:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\biggl | \hbox{dom}^{%2B} \phi \biggl | = \sum_{i} | \hbox{dom}^{%2B} C_i | - \sum_{i %3c j} | \hbox{dom}^{%2B} C_i \wedge C_j | %2B \sum_{i %3c j %3c k} | \hbox{dom}^{%2B} C_i \wedge C_j \wedge C_k | - \ldots %2B (-1)^{n-1} | \hbox{dom}^{%2B} C_1 \wedge C_2 \wedge \ldots \wedge C_m | "&gt;.&lt;br /&gt;&lt;br /&gt;становится понятно, что для того, чтобы получить полиномиальный алгоритм выполнимости с оценкой &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=O(m^k)"&gt; необходимо ограничить число слагаемых в сумме &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=| \hbox{dom}^{%2B} \phi |"&gt;, т.е. определить класс формул в которых для всех подмножеств индексов &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=I \in 2^m"&gt;, &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=|I| %3e k"&gt; &lt;br /&gt;&lt;br /&gt;&lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\bigwedge_{i \in I} C_i = 0"&gt; &lt;br /&gt;&lt;br /&gt;Релаксация с полуопределенным программирования еще использует более продвинутые идеи, но начинается все с этого же -- с исследования взаимозависимости конъюнкций транслированием их в ограничения оптимизационной задачи.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-1361284252433989428?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/1361284252433989428/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=1361284252433989428' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/1361284252433989428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/1361284252433989428'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2009/09/on-semidefinite-liftings.html' title='On semidefinite liftings)'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-178031899317925676</id><published>2009-08-12T21:39:00.001-07:00</published><updated>2009-08-14T21:00:14.917-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Jim Williams -- The art and science of analog circuit design</title><content type='html'>Попала в руки весьма удивительная и необычная книга. Фактически, является сборником статей и очерков с ценнейшими опытом, потоками сознания, размышлениями и просто эзотерикой (например, подключение к ламповому аудиоусилителю газоразрядных ламп для снятия их частотных характеристик) на темы начиная от общих вопросов электронного инжиниринга, заканчивая конкретными дизайнами (например, входного усилителя осциллографа). Офигенно. Очень.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://books.google.com/books?id=SPwqg7qpFWUC&amp;dq=The+Art+and+Science+of+Analog+Circuit+Design"&gt;@ books.google.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-178031899317925676?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/178031899317925676/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=178031899317925676' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/178031899317925676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/178031899317925676'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2009/08/jim-williams-art-and-science-of-analog_12.html' title='Jim Williams -- The art and science of analog circuit design'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-50079679474350267</id><published>2009-07-11T22:23:00.000-07:00</published><updated>2009-08-14T20:59:58.471-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>On a general set of adaptive controllers))</title><content type='html'>Однажды во время дискуссии по адаптивному управлению была высказана мысль, что, в общем случае, контроллер адаптируется к объекту управления и/или к внешним возмущениям, но адаптация ко входному сигналу -- абсурдна. Я возразил, что нельзя вообще говорить "невозможно" или "абсурдно" в инженерии. :-) Но этот довод не подействовал, и я вынужден был показать пример. Простой и интересный.&lt;br /&gt;&lt;br /&gt;Рассмотрим такую ползную вещь, как частотное управление электроприводом. У нас есть сигнал &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=u"&gt;, и с помощью него можно довольно точно управлять частотой вращения двигателя &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=v"&gt;. Собственно, в этом функция &lt;a href="http://en.wikipedia.org/wiki/Variable-frequency_drive"&gt;частотника&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Нам необходимо обеспечить позиционирование, т.е. передвинуть вал двигателя на &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\Delta x = x^* - x_0"&gt;. На скорость вращения &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=v"&gt; накладываются следующие ограничения:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex= |v| \le v_{max} "&gt;&lt;br /&gt;&lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex= a = dv/dt = \text{const} "&gt;&lt;br /&gt;&lt;br /&gt;Эти ограничения связаны с механической прочностью и безопаснотью эксплуатации того, что приводится в движение двигателем и его мощностью.&lt;br /&gt;&lt;br /&gt;Типичная кривая скорости показана на картинке и представляет собой трапецию с участками &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=v_1(t) = a t"&gt;, &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=v_2(t) = v_{max}"&gt;, &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=v_3(t) = v_{max} - a t"&gt;, длительностями соответствнно &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\tau_1"&gt;, &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\tau_2"&gt;, &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\tau_3"&gt;, причем &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\tau_1 = \tau_1 = v_{max}/a"&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i43.photobucket.com/albums/e390/dj_atmex/Speed.gif" border="0" alt="Photobucket"&gt;&lt;br /&gt;&lt;br /&gt;Очевидно, что оптимальное по времени управление выглядит именно так -- в виде трапеции. В этом случае вал двигателя быстрее всего повернется в заданное положение &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=x^*"&gt;. Можно было бы вычислить &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\tau_1"&gt;, &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\tau_2"&gt;, &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\tau_3"&gt; и просто осуществить поэтапное изменение скорости на входе частотника &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=u"&gt;, т.е. реализовать разомкнутое управление (open-loop control). Но поскольку на реальную систему позиционирования действуют внешние возмущения в виде неидеальности передаточной характеристики частотника, проскальзывания в редукторе и т.д., то необходимо замкнутое управление. В этом случае, мы имеем сигнал &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=x"&gt;, который снимается с датчика положения на валу двигателя и который формирует сигнал ошибки &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=x^* - x"&gt;.&lt;br /&gt;&lt;br /&gt;Из-за условия &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex= |v| \le v_{max} "&gt; передаточная характеристика частотника нелинейна. Но простое пропорциональное регулирование скорости по закону &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=u(t) = K (x^* - x(t))"&gt; является оптимальным (что кажется несколько необычным). Чтобы сделать этот факт очевидным, воспользуемся элементарными сведениями из школной физики.&lt;br /&gt;&lt;br /&gt;Для начала вычислим время, необходимое на перемещение: &lt;br /&gt;&lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex= \Delta x  = \int \limits_{0}^{\tau_1 %2B \tau_2 %2B \tau_3} v(t) dt = \frac{a \tau_1^2}{2}  %2B  \tau_2 v_{max}  %2B  \frac{a \tau_3^2}{2} = \frac{v_{max}^2}{a}  %2B  \tau_2 v_{max}"&gt;&lt;br /&gt;&lt;br /&gt;отсюда:&lt;br /&gt;&lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\tau_2 = \frac{\Delta x}{v_{max}}  -  \frac{v_{max}}{a}"&gt;&lt;br /&gt;&lt;br /&gt;Теперь заметим, что по прошествию времени &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\tau_1"&gt; и &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\tau_2"&gt; скорость должна начать снижаться и:&lt;br /&gt;&lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=v(\tau_1  %2B  \tau_2) = v_{max}"&gt;&lt;br /&gt;&lt;br /&gt;С другой стороны, на выходе пропорционального регулятора имеем:&lt;br /&gt;&lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=v(\tau_1  %2B  \tau_2) = K (x^* - x(\tau_1  %2B  \tau_2)) = K \left ( \Delta x - \frac{a \tau_1^2}{2} - \tau_2 v_{max} \right ) = K \frac{v_{max}^2}{2 a}"&gt;&lt;br /&gt;&lt;br /&gt;Из двух последних равенств получаем: &lt;br /&gt;&lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex= K = \frac{2 a}{v_{max}} "&gt;&lt;br /&gt;&lt;br /&gt;Рассмотрим особый случай, когда оказывается &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\tau_2 \le 0"&gt;. Зависимость скорость в этом случае перестает быть трапецией и переходит в треугольную с максимумом &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=v'_{max}"&gt;. Тогда перемещение определяется &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex= \Delta x  = a \tau^2 "&gt;, откуда время разгона и торможения &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\tau = \sqrt{\Delta x / a}"&gt;, и максимум скорости &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=v'_{max} = \sqrt{a \Delta x}"&gt;. Окончательно для &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\tau_2 \le 0"&gt; имеем коэффициент усиления регулятора:&lt;br /&gt;&lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex= K = 2 \sqrt{\frac{a}{\Delta x}}"&gt;&lt;br /&gt;&lt;br /&gt;Какие два вывода из этого получаются:&lt;br /&gt;- линейный регулятор может быть оптимальным для нелинейного объекта управления,&lt;br /&gt;- адаптация регулятора может быть также и от входного сигнала.&lt;br /&gt;&lt;br /&gt;Я бы не стал писать такие простые вещи, если бы не задумывался об управлении в самом широком смысле. В сущности, современная теория управления рассматривает регулятор как отображение &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=u \in U"&gt;, &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=u : S \to C "&gt; в векторном пространстве последовательностей состояний объекта управления &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=(s_{t-k}, s_{t-k %2B 1},... s_{t}) \in S"&gt; в векторное пространство последовательностей сигналов управления &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=(c_{t-k}, c_{t-k %2B 1},... c_{t}) \in C"&gt;. Возникает два фундаментальных вопроса: &lt;br /&gt;&lt;br /&gt;- дано множество неопределенностей (параметрических и структурных) объекта управления &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=F"&gt;, существует ли такое управление &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=u \in U"&gt; из заданного множества &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=U"&gt;, которое является стабилизирующим для всех &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=f \in F"&gt;,&lt;br /&gt;&lt;br /&gt;- дано множество управлений &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=U"&gt;, какое множество неопределенностей &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=F"&gt; стабилизирует &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=U"&gt;.&lt;br /&gt;&lt;br /&gt;Работы на эту тему известны. Самое простое -- это влияние распределений шума на регрессионные процедуры. Есть и гораздо более интересные результаты (в частности, невозможность стабилиации полиномиальной дискретной системы со степенью больше 4). Применение нестандартных частотных преобразований и алгебраического подхода к цифровой обработке сигналов -- об этом я сейчас думаю применительно к сабжу.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-50079679474350267?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/50079679474350267/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=50079679474350267' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/50079679474350267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/50079679474350267'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2009/07/on-general-set-of-adaptive-controllers.html' title='On a general set of adaptive controllers))'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-4382651157001230837</id><published>2009-06-01T12:41:00.000-07:00</published><updated>2009-06-02T12:23:36.201-07:00</updated><title type='text'>Quick and dirty PID</title><content type='html'>Пусть у нас есть устойчивый (в том смысле, что никакое статическое воздействие не приводит его в колебательный режим) объект управления, но с очень сложной динамикой. В силовой электронике это возникает, например, при работе на сложную нелинейную нагрузку с нестационарными компонентами схемы (лампа накаливания и изменяющиеся от выходного тока индуктивности фильтров).&lt;br /&gt;&lt;br /&gt;Что можно придумать в этом случае? Если не известна динамика, то лучше от нее избавиться. Зная передаточную функцию объекта управления &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=P(z)"&gt;, мы можем определить (или подобрать в реальных условиях) предельное время реакции объекта управления на входное воздействие &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\tau_{max}"&gt;. Тогда переходя от времени дискретизации &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\tau"&gt; для &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=P(z)"&gt; к &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\tau_{max} \gg \tau"&gt; получаем тривиально &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=P'(z) = \frac{1}{z}"&gt;. Стабилизирующим для &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=P'(z)"&gt; является регулятор с передаточной функцией:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=C(z) = {{1 %2B z^{-1}/3} \over {1 - z^{-1}} }"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-4382651157001230837?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/4382651157001230837/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=4382651157001230837' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/4382651157001230837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/4382651157001230837'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2009/06/quick-and-dirty-pid.html' title='Quick and dirty PID'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-3437762016054480096</id><published>2009-05-04T00:02:00.001-07:00</published><updated>2009-05-04T00:02:50.613-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Еще почему SAT \in P?</title><content type='html'>Потому что можно показать, что &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=SAT \in \rm NP \cap \rm coNP"&gt;. ;-)&lt;br /&gt;&lt;br /&gt;Пусть задана булева функция &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\phi(X)"&gt;, представленная в КНФ. Обозначим &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=SAT(\phi)"&gt; задачу выполнимости &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\phi"&gt;. Тогда &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=SAT(\phi)"&gt; эквивалентна последовательности задач &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=UNSAT(\phi)"&gt; на проверку предиката &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\forall x \phi(X) = 0"&gt;, которая приводит к очевидному жадному алгоритму:&lt;br /&gt;0. &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\Phi := \phi"&gt;&lt;br /&gt;1. Если &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=UNSAT(\Phi)=1"&gt;, то выход.&lt;br /&gt;2. До тех пор, пока не &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\Phi = 1"&gt;&lt;br /&gt;3. Взять какую-нибудь переменную &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=x_i"&gt; и доопределить ее, получив формулы &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\Phi_{x_i = 0}"&gt; и &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\Phi_{x_i = 1}"&gt;. Если &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=UNSAT(\Phi_{x_i = 0})=0"&gt;, то &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\Phi := \Phi_{x_i = 0}"&gt;, иначе &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\Phi := \Phi_{x_i = 1}"&gt;.&lt;br /&gt;&lt;br /&gt;Что это дает нового? Фактически, ничего нового. Однако, есть мнение, что если задача в пересечении NP и co-NP, то она имеет полиномиальное решение. Это верно для всех P, в т.ч. и для PRIMES. С факторизацией целых чисел (FACTOR) та же ситуация, но полиномиальный алгоритм не известен. ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-3437762016054480096?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/3437762016054480096/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=3437762016054480096' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/3437762016054480096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/3437762016054480096'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2009/05/sat-in-p.html' title='Еще почему SAT \in P?'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-8122569548465532899</id><published>2009-03-27T00:05:00.000-07:00</published><updated>2009-05-04T00:05:45.772-07:00</updated><title type='text'>Fuzzy Feedback Control</title><content type='html'>Жосткий гон на управление с применением нечеткой логики:&lt;br /&gt;&lt;a href="http://fuzzy.iau.dtu.dk/download/athans99/athans99.ppt"&gt;Crisp Control Is Always Better Than Fuzzy Feedback Control&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Автор говорит, что нечеткое управление -- паразитический метод, используемый быдло-инженерами, которые никогда не учили теорию управления :-D&lt;br /&gt;&lt;br /&gt;Что я могу сказать? Имхо, он не так далек от правды. Я эксперементировал с нечеткой логикой для управления электроприводом, и на мой взгляд, ее применение во многих случаях является неоправданным, поскольку стабильные результаты получаются только для простых линейных систем (первого и второго порядков).&lt;br /&gt;&lt;br /&gt;С другой стороны, нечеткая логика -- простой и понятный &lt;b&gt;инженерный&lt;/b&gt; метод для решения задач принятия решений, который может быть прямо применен для упралвения процессами, о которых имеются знания в виде экспертных правил (процессов, которые ранее не автоматизировалисиь и управлялись людьми).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-8122569548465532899?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/8122569548465532899/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=8122569548465532899' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/8122569548465532899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/8122569548465532899'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2009/03/fuzzy-feedback-control.html' title='Fuzzy Feedback Control'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-5996741891154137308</id><published>2009-03-11T16:28:00.000-07:00</published><updated>2009-03-11T16:38:33.546-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Convex optimization vs SAT</title><content type='html'>1. Задача выпуклой оптимизации (да и вообще все что находится в этой области -- линейное, полуопределенное программирование и т.д.) отличается тем, что имеет строго единственное решение. Грубо говоря, именно по-этому выпуклая оптимизация и является легкой задачей. ;-)&lt;br /&gt;&lt;br /&gt;Задача выполнимости булевой формулы тоже имеет одно решение. Точнее, оно может иметь несколько равноправных решений (все из которых выполняют булеву функцию), но мы всегда можем выбрать такой критерий, который бы позволял выбирать только одно решение из всех существующих. Надо-то нам только одно! &lt;br /&gt;&lt;br /&gt;2. Другая проблема в том, что для выпуклой оптимизации глобальный оптимум совпадает с локальным. Как сделать такое для SAT? Пусть минимум некоторой целевой функции соответствует выполняющему набору булевой формуы (можно показать, что целевая функция может быть полиномом 6-ой или 4-ой степени). Необходимо "деформировать" ландшафт этой функции таким образом, чтобы она была достаточно гладкой и без локальных минимумов. Такое можно сделать (привет топологам ;-)), однако при этом необходимо задать стационарную точку (которая, к несчастью, является искомым глобальным минимумом). Можно ли как-то исхтриться еще?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-5996741891154137308?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/5996741891154137308/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=5996741891154137308' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/5996741891154137308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/5996741891154137308'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2009/03/convex-optimization-vs-sat.html' title='Convex optimization vs SAT'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-7168152733599935715</id><published>2009-01-26T15:23:00.001-08:00</published><updated>2009-01-26T15:23:59.540-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>О связи теории и практики</title><content type='html'>Все-таки, меня неизменно забавляет, что знак тензорного произведения &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=A \otimes B"&gt; называется "лампочка", сколько бы я раз это не слышал :-D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-7168152733599935715?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/7168152733599935715/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=7168152733599935715' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/7168152733599935715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/7168152733599935715'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2009/01/blog-post_26.html' title='О связи теории и практики'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-2437127164177263150</id><published>2009-01-15T21:33:00.000-08:00</published><updated>2009-01-17T01:46:42.381-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Re: Hamiltonian cycle in Digraph with degree bound two</title><content type='html'>Вот &lt;a href="http://www.glrq.net/"&gt;этот&lt;/a&gt; человек написал &lt;a href="http://arxiv.org/abs/0704.0309v3"&gt;работу&lt;/a&gt;, в которой утверждает, что NP=P. Ссылка на сабж содержится пунктом 38 известного &lt;a href="http://www.win.tue.nl/~gwoegi/P-versus-NP.htm"&gt;линк-листа&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Прочитал статью с интересом. Речь идет про гамильтонов контур в ориентированном графе со степенью вершин не больше двух (DHCP_deg2).&lt;br /&gt;&lt;br /&gt;Доказательство NP-полноты этой задачи было получено в 70-х годах Яном Плесником (J.Plesnik). Эту работу я не читал, но известно, что ее рецензировал небезызвестный Ершов. Сразу была мысль, что на самом деле &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\rm DHCP_{deg2} \in P" /&gt; (ограничение на степень вершин кажется очень сильным).&lt;br /&gt;&lt;br /&gt;Однако, если взять задачу (3-SAT) выполнимости формулы &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\phi(X) = f_1(x_{1,1},x_{1,2},x_{1,3})...f_m(x_{m,1},x_{m,2},x_{m,3})" /&gt;, где &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=f_i(.)" /&gt; -- дизъюнкция трех переменных, то можно сконструировать такие отображения &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\phi(X) \mapsto G" /&gt;, &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=f_i(.) \mapsto G_i" /&gt;, &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=G = \bigcup_i G_i" /&gt;, что граф &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=G" /&gt; содержит гамильтонов контур тогда и только тогда, когда &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=\phi(X)=1" /&gt;. Это легко сделать, если в качестве подграфов &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=G_i" /&gt; брать такие конструкции:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_rpVqpiC1tw8/SXAdcmtxsOI/AAAAAAAAACY/zHzujgQ3mU8/s1600-h/%D0%A2%D0%BE%D1%87%D0%B5%D1%87%D0%BD%D1%8B%D0%B9+%D1%80%D0%B8%D1%81%D1%83%D0%BD%D0%BE%D0%BA.bmp"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 127px;" src="http://2.bp.blogspot.com/_rpVqpiC1tw8/SXAdcmtxsOI/AAAAAAAAACY/zHzujgQ3mU8/s400/%D0%A2%D0%BE%D1%87%D0%B5%D1%87%D0%BD%D1%8B%D0%B9+%D1%80%D0%B8%D1%81%D1%83%D0%BD%D0%BE%D0%BA.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5291761939426423010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Короче, что имеем в обсуждаемой статье!? Если перефразировать рассмотренный там алгоритм в терминах задачи выполнимости, то предложено буквально следующее:&lt;br /&gt;&lt;br /&gt;0. Положить &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=v(X) = \rm const" /&gt; (константа зависит от способа вычисления совершенного паросочетания, можно полагать, что &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=v(x_i) = 1" /&gt;).&lt;br /&gt;1. Для всех &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=x_i \in X" /&gt;: положить &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=v(x_i) = 1-v(x_i)" /&gt;, если после этого число выполненных скобок формулы увеличилось, то новое значение &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=v(x_i)" /&gt; сохранить, иначе -- продолжить.&lt;br /&gt;&lt;br /&gt;(Тут: &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=X" /&gt; -- множество переменных задачи, &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=v(x_i)" /&gt; -- значение переменной &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=x_i" /&gt;)&lt;br /&gt;&lt;br /&gt;Как по мне, то очень глупо. А жаль... ;-/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-2437127164177263150?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/2437127164177263150/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=2437127164177263150' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/2437127164177263150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/2437127164177263150'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2009/01/re-hamiltonain-cycle-in-digraph-with.html' title='Re: Hamiltonian cycle in Digraph with degree bound two'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_rpVqpiC1tw8/SXAdcmtxsOI/AAAAAAAAACY/zHzujgQ3mU8/s72-c/%D0%A2%D0%BE%D1%87%D0%B5%D1%87%D0%BD%D1%8B%D0%B9+%D1%80%D0%B8%D1%81%D1%83%D0%BD%D0%BE%D0%BA.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-7390705067131766645</id><published>2009-01-15T19:47:00.000-08:00</published><updated>2009-01-15T22:03:04.018-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Педагогическайа поэма</title><content type='html'>Во время изучения электроники в свою студенческую бытность я считал, что этот курс нужно читать по-другому. Исходный тезис -- познавательный интерес может быть удовлетворен на современной элементной базе. Вместо изучения, например, тиристоров можно было бы рассмотреть IGBT-транзисторы и т.д. Кроме того, крайне мало вообще внимания уделялось средствам параметрической оптимизации схем (вместо этого изучались графо-аналитические методы) и конструированию.&lt;br /&gt;&lt;br /&gt;Однако, пообщавшись с одним человеком, который только закончил изучение этого курса, я пришел к выводу, что электронику нужно давать не только по-другому, а вообще по-другому ;-) ВУЗовский курс не отвечает на те вопросы, которые возникают перед инженером непосредственно во время работы над продуктом. Электроника переполнена подробностями про функционирование разных элементов и схем, но, прямо скажем, не многие, прослушавшие этот курс вообще понимают зачем это и для чего.&lt;br /&gt;&lt;br /&gt;На мой взгляд, большее внимание должно быть уделено общесистемным проблемам в электронике. Нужно показать какое место в цикле проектирования электронного устройства занимает непосредственно схемотехника. Необходимо вообще рассказать про то, как разрабатываются экспериментальные устройства, и как серийные. Рассмотреть связи с вопросами менеджмента, разработки математических моделей и функционала, создания программного обеспечения, контроля качества, документирования и обслуживания. Только когда у человека в голове отложатся эти моменты и то, что разработка аппаратного обеспечения в этом ключе мало внешне отличается от разработки программ -- только тогда надо переходить к системному уровню проектирования.&lt;br /&gt;&lt;br /&gt;Системный уровень проектирования должен включать способы и средства задания функционала электронных систем и рассмотрение базовых блоков электроники. Тут необходимо рассматривать такие вопросы, как дискретные и непрерывные сигналы, передаточные функции, анализ во временной области, дискретные системы (булевы функции и автоматы), а также про то, что такое усилитель, модулятор, детектор, фильтр и т.д.&lt;br /&gt;&lt;br /&gt;Следующим шагом необходимо установить, что в современной электронике имеем два ключевых тезиса:&lt;br /&gt;- цифровое управление и обработка данных везде, где только можно;&lt;br /&gt;- импульсные режимы работы регуляторов и усилителей.&lt;br /&gt;&lt;br /&gt;Для цифрового управления тут же возникают вопросы параллельной и последовательной организации вычислений. Соответственно ПЛИС и микропроцессоры. Также смешанные идеи -- SOC и прочие извраты. Понятно, что никто не будет давать в общем курсе схемотехники программирование на языках C/C++, или Verilog/VHDL. Надо просто чтобы люди четко представляли, что такое ПЛИС, а что такое микроконтроллер, DSP, и какие бывают и где это нужно. А по поводу программирования сабжа -- можно ограничиться тем, как сгенерировать соответствующий код (для ПЛИС или МК) из Matlab-а ;-)&lt;br /&gt;&lt;br /&gt;Кроме того, сразу встают задачи аналого-цифрового и цифро-аналогового преобразования. Тут, на мой взгляд, нельзя рекомендовать что-то лучшее, чем обзорные лекции от Analog Device. Попутно можно рассмотреть операционные усилители -- это довольно просто для изучения (если не вдаваться в подробности) и полезно.&lt;br /&gt;&lt;br /&gt;Понимание импульсных систем целиком базируется на идеи ШИМ и использовании ключевых электронных компонентов. Тут рассматривается транзистор, полевик, IGBT (все в ключевых режимах и без физики). В качестве примеров, взять усилитель класса D и частотный преобразователь для электропривода (хотя бы на функциональном уровне).&lt;br /&gt;&lt;br /&gt;На последок можно уделить внимание системам питания электронных устройств. Сначала про общие вопросы: дерево питания, фильтрация и блокировка. Потом чуть схем: выпрямители, классические интегральные стабилизаторы, Step-Up и Step-Down импульсные преобразователи.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Вот таков курс общий электроники. Пусть в нем стало меньше схем, и не рассмотрены традиционные вопросы (работа полупроводниковых приборов), но, на мой взгляд, он на много полезнее для будущего инженера, чем читаемое сейчас...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-7390705067131766645?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/7390705067131766645/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=7390705067131766645' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/7390705067131766645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/7390705067131766645'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2009/01/blog-post.html' title='Педагогическайа поэма'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-7455681844737636392</id><published>2008-12-24T00:56:00.000-08:00</published><updated>2009-01-04T14:02:15.653-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Простое объяснение</title><content type='html'>Подумалось тут про простое понимание почему задача SAT может быть решена эффективно.&lt;br /&gt;&lt;br /&gt;Нам надо раскрыть скобки в выражении &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=(f_1(.))(f_2(.))...(f_m(.))" /&gt;, где &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=f_i" /&gt; -- дизъюнкция (сумма переменных). &lt;br /&gt;Проблема состоит в том, что если перемножать (как это учат делать в школе ;-) ) две скобки  &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex= (f_i(.))(f_j(.))" /&gt;, то число слагаемых в произведении &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=|f_i f_j| \approx |f_i| |f_j|" /&gt;. Если &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=k" /&gt; -- среднее число слагаемых в скобке, то при перемножении &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=m" /&gt; скобок получаем порядка &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=k^m" /&gt; слагаемых. Кроме того, когда мы будем умножать, допустим, последнюю скобку, то нам необходимо выполнить порядка &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=k^{m-1} m" /&gt; -- т.е. наивный алгоритм экспоненциально сложен как по времени, так и по объему памяти.&lt;br /&gt;&lt;br /&gt;Можно ли сделать так, чтобы в произведении число слагаемых не росло экспоненциально? Например, если мы возьмем некоторый изоморфизм &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=f_i \mapsto \Theta_i" /&gt;, и соответственно произведение &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex= (f_i(.))(f_j(.)) \mapsto \Theta_i \circ \Theta_j" /&gt; будет обладать, например, свойством, что &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=|\Theta_i \circ \Theta_j| \approx |\Theta_i|%2B|\Theta_j|" /&gt;. Фактически, нужно решить задачу "сжатия" информации, представляющей сочетания переменных в дизъюнктивной сумме, таким образом, чтобы из перечисления сочетаний квадратичной длины получить какой-то функционал линейной длины. &lt;br /&gt;&lt;br /&gt;Можно ли вообще достичь такого? В принципе, получить подобное сжатие физически возможно. Например, любой полином &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex=P_n(x) " /&gt; с рациональными коэффициентами отображает бесконечное число точек плоскости &lt;img src="http://mathtran.open.ac.uk/cgi-bin/mathtran?D=1;tex= (x,P_n(x)) " /&gt; во множество своих коэффициентов... Надо только придумать это для дизъюнктивных сумм. ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-7455681844737636392?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/7455681844737636392/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=7455681844737636392' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/7455681844737636392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/7455681844737636392'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2008/12/blog-post.html' title='Простое объяснение'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-9207945531025147509</id><published>2008-11-13T01:35:00.000-08:00</published><updated>2010-06-22T22:26:05.930-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Реализация интерфейса CAN в микроконтроллере NIOS</title><content type='html'>&lt;b&gt;Введение&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Шина CAN (Control Area Network) предназначена для управления разнообразным оборудованием, в первую очередь в области промышленной автоматизации и конечно же в автомобильных системах.&lt;br /&gt;Материалов о CAN относительно &lt;a href="http://www.gaw.ru/html.cgi/txt/interface/can/start.htm"&gt;много&lt;/a&gt;, поэтому я не буду что-то пытаться пересказать. Замечу, что действительно хорошим иллюстрированным введением в CAN является &lt;a href="http://www.efo.ru/ftp/pub/atmel/_C51_and_AVR_with_CAN/CAN_CD_June_2005/pdf/can_tutorial.pdf"&gt;презентация&lt;/a&gt; от Atmel.&lt;br /&gt;&lt;br /&gt;Нас интересует следующая задача -- как связать синтезируемый процессор NIOS с шиной CAN.&lt;br /&gt;&lt;br /&gt;Вариантов может быть несколько:&lt;br /&gt;&lt;br /&gt;1. Написание контроллера CAN с нуля,&lt;br /&gt;2. Использование &lt;a href="http://www.opencores.org/projects.cgi/web/can/overview"&gt;решения&lt;/a&gt; с OpenCores,&lt;br /&gt;3. использование готовых IP-Core (например, от CAST).&lt;br /&gt;&lt;br /&gt;Применение шины CAN в системах с FPGA весьма актуально, поскольку использование FPGA является эффективным решением для ряда задач промышленной автоматики. В моей практике было создание контроллеров для управления асинхронными и шаговыми двигателями на основе FPGA, при этом необходимым являлось оснащение устройств интерфейсом CAN с поддержкой соответствующего протокола управления.&lt;br /&gt;&lt;br /&gt;В условиях быстрого макетирования, наиболее логичным является выбор варианта 2. Далее рассмотрим применение контроллера CAN с OpenCores совместно с процессором NIOS. &lt;br /&gt;&lt;br /&gt;По проекту "CAN Protocol Controller" необходимо сделать некоторые замечания:&lt;br /&gt;&lt;br /&gt;1. На эту корку нет никакой документации. Но в действительности она является клоном контроллера SJA1000 от Philips, на который доступен &lt;a href="http://www.nxp.com/acrobat_download/datasheets/SJA1000_3.pdf"&gt;даташит&lt;/a&gt;. Вот &lt;a href="http://opencores.org/ptracker.cgi/view/can/127"&gt;комментарий&lt;/a&gt; автора по этому поводу.&lt;br /&gt;&lt;br /&gt;2. Несмотря на то, что заявлена совместимость с WISHBONE, заставить работать корку с этой шиной так и не удалось.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;CAN Protocol Controller с поддержкой Avalon&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Что предлагается полезного:&lt;br /&gt;&lt;br /&gt;- из корки удалена интерфейсная часть для поддержки 8051 и Wishbone, вместо этого контроллер напрямую можно подключить к шине Avalon.&lt;br /&gt;&lt;br /&gt;- написан простой код для NIOS, который отсылает через корку данные в шину на ID=0x20000 в режиме EFF CAN 2.0B и принимает обратно на ID=0x0.&lt;br /&gt;&lt;br /&gt;- написан тривиальный код для Atmel AT90CAN128, принимающий данные на ID=0x20000 и отсылающий обратно на ID=0x0.&lt;br /&gt;&lt;br /&gt;Главный модуль can_avalon имеет следующие входы и выходы:&lt;br /&gt;&lt;br /&gt;  bus_Address -- адрес шины Avalon&lt;br /&gt;  bus_ChipSelect -- CS шины Avalon (без инверсии)&lt;br /&gt;  bus_Read -- RD шины Avalon (без инверсии)&lt;br /&gt;  bus_Write -- WR шины Avalon (без инверсии)&lt;br /&gt;  bus_WriteData -- данные на запись шины Avalon&lt;br /&gt;  bus_ReadData -- данные на чтение шины Avalon&lt;br /&gt;  &lt;br /&gt;  clk_i -- тактовая частота,&lt;br /&gt;  rst_i -- вход сброса (без инверсии),&lt;br /&gt;  rx_i -- вход данных шины CAN,&lt;br /&gt;  tx_o -- выход данных шины CAN,&lt;br /&gt;&lt;br /&gt;Сигналы bus_off_on, clkout_o, irq_on -- можно не подключать (последний можно при желании подключить к входу запроса прерывания шины Avalon)&lt;br /&gt;&lt;br /&gt;Для тестирования написана простая библиотека функций (CANLib.c, CANLib.h), содержащая следующий процедуры:&lt;br /&gt;&lt;br /&gt;void Config_CAN2B_EFF() -- конфигурирует CAN контроллер для работы в режиме EFF CAN 2.0B;&lt;br /&gt;&lt;br /&gt;int SendDataPacket(int ID, unsigned char *Data) -- передает данные на заданный ID (причем параметр ID функции и реальный пересылаемый по шине ID_BUS связаны ID_BUS = ID &lt;&lt; 21 -- т.е. передаются только ID[28]-ID[21]); &lt;br /&gt;&lt;br /&gt;int RecieveDataPacket(int* ID, unsigned char *Data) -- принимает пакет, возвращая данные и ID (блокирующая процедура, про значение ID -- тоже самое, что и в SendDataPacket);&lt;br /&gt;&lt;br /&gt;int ReadDataPacket(int* ID, unsigned char *Data) -- считывает состояние приемного буфера;&lt;br /&gt;&lt;br /&gt;unsigned char IsDataPacketAvailable() -- возвращает 1, если в приемном буфере хранится несчитанное сообщение (для работы совместно с функцией ReadDataPacket);&lt;br /&gt;&lt;br /&gt;void ClearRxBuffer() -- отчистка приемного буфера.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Для использования процедур необходимо в CANLib.c определить константы:&lt;br /&gt;&lt;br /&gt;ADDR_CAN_BASE -- базовый адрес контроллера в системе NIOS,&lt;br /&gt;&lt;br /&gt;ACCEPT_ADDR1, ACCEPT_ADDR2 -- биты ID[28]-ID[21] фильтра принимаемых пакетов,&lt;br /&gt;&lt;br /&gt;CAN_TIMINGX -- константы таймингов, задающие скорость передачи (подробнее в документации на SJA1000)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Результаты&lt;/b&gt;&lt;br /&gt;По использованию ресурсов Cyclone II для can_avalon получилось:&lt;br /&gt;Logic Cells: 1867&lt;br /&gt;LC Registers: 1139&lt;br /&gt;Memory Bits: 320&lt;br /&gt;&lt;br /&gt;Вот как это выглядит в железе (для FPGA использована плата DE2, в качестве CAN-трансиверов -- SN65HVD232D).&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_rpVqpiC1tw8/SUODzHnf4-I/AAAAAAAAABo/vfI2CIlDkUA/s1600-h/P1000683.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_rpVqpiC1tw8/SUODzHnf4-I/AAAAAAAAABo/vfI2CIlDkUA/s400/P1000683.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5279208102449636322" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Вот осциллограммы (пакет в AVR от NIOS и эхо-ответ).&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_rpVqpiC1tw8/SUODzfpEQFI/AAAAAAAAABw/_BF9_unjEVQ/s1600-h/tek00011.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_rpVqpiC1tw8/SUODzfpEQFI/AAAAAAAAABw/_BF9_unjEVQ/s400/tek00011.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5279208108898664530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_rpVqpiC1tw8/SUODzShZjTI/AAAAAAAAAB4/gwM_5ufd9pQ/s1600-h/tek00012.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_rpVqpiC1tw8/SUODzShZjTI/AAAAAAAAAB4/gwM_5ufd9pQ/s400/tek00012.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5279208105376845106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Исходники&lt;/b&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/akpc806a/CANSystem_Echo_End.rar?attredirects=0&amp;d=1"&gt;Все для NIOS&lt;/a&gt;&lt;br /&gt;(там несколько проектов: CANSystem.qpf -- тот, который тестировался в железе; он содержит в себе NIOS от проекта CANHost.qpf, для которого написан софт в папке software)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sites.google.com/site/akpc806a/CAN_Echo_Plus.rar?attredirects=0&amp;d=1"&gt;Исходник для AVR&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-9207945531025147509?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/9207945531025147509/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=9207945531025147509' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/9207945531025147509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/9207945531025147509'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2008/12/can-nios.html' title='Реализация интерфейса CAN в микроконтроллере NIOS'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_rpVqpiC1tw8/SUODzHnf4-I/AAAAAAAAABo/vfI2CIlDkUA/s72-c/P1000683.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-6129222157013565581</id><published>2008-11-09T16:06:00.001-08:00</published><updated>2008-12-13T03:07:39.838-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>OpenCores 10/100 Ethernet MAC vs Altera LAN91C111</title><content type='html'>Казалось бы, LAN91C111 -- вещь с мозгами, "Non-PCI Ethernet Single Chip MAC + PHY", но при этом для ее подключения к FPGA требуется в 2+ раза больше выводов, чем для обычного PHY. Также ее драйвер для uC/OS-II занимает чуть больше места в памяти (что весьма удивительно). Прибавить сюда еще стоимость и доставаемость этой микросхемы ($25 в розницу против $7 за PHY типа DP83848CVV). &lt;br /&gt;&lt;br /&gt;Приведу результаты по использованию ресурсов FPGA двух модулей: OpenCores 10/100 Ethernet MAC -- свободно распространяемый модуль (см. &lt;a href="http://www.niosforum.com/pages/projects.php?cat_id=15"&gt;niosforum&lt;/a&gt;), реализующий Ethernet MAC с интерфейсом Avalon, которому для счастья нужно только PHY; и модуля LAN91C111 Interface из SOPC Builder, который на самом деле является тривиальным и все что он делает -- подключает сигналы от Avalon Tristate Bridge к LAN91C111.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. OpenCores 10/100 Ethernet MAC (eth_ocm) &lt;br /&gt;&lt;br /&gt;Логические ресурсы:&lt;br /&gt;Logic Cells: 2878&lt;br /&gt;LC Registers: 1457 &lt;br /&gt;Memory Bits: 47360&lt;br /&gt;&lt;br /&gt;Программа на основе шаблона simple_socket_server:&lt;br /&gt;Program size (code + initialized data): 282 KBytes &lt;br /&gt;&lt;br /&gt;Число задействованных выводов ПЛИС:&lt;br /&gt;20&lt;br /&gt;&lt;br /&gt;2. Altera LAN91C111 Interface&lt;br /&gt;&lt;br /&gt;Логические ресурсы:&lt;br /&gt;Logic Cells: 113&lt;br /&gt;LC Registers: 96 &lt;br /&gt;Memory Bits: 0&lt;br /&gt;&lt;br /&gt;Программа на основе шаблона simple_socket_server:&lt;br /&gt;Program size (code + initialized data): 290 KBytes&lt;br /&gt;&lt;br /&gt;Число задействованных выводов ПЛИС:&lt;br /&gt;56&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Как видно, выбор между обычным PHY и LAN91C111 не однозначен. &lt;br /&gt;1. Почти 3000 логических ячеек для eth_ocm -- не очень большие по современным меркам, но затраты. Зато значительно меньше выводов FPGA задействовано для организации Ethernet, отсюда меньше проблем с разводкой платы и целостностью сигналов. Микросхема Ethernet PHY оказывается несколько дешевле и меньше по габаритам, чем LAN91C111.&lt;br /&gt;2. LAN91C111 -- проверенное решение, не требующее никаких логических ресурсов FPGA, драйвер которого занимает почти столько же памяти, что и для eth_ocm. О недостатках сказано выше.&lt;br /&gt;&lt;br /&gt;Лично я обычно применяю в практике PHY с использованием eth_ocm. Работает стабильно. Никаких нареканий по функционированию нет.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-6129222157013565581?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/6129222157013565581/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=6129222157013565581' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/6129222157013565581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/6129222157013565581'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2008/11/opencores-10100-ethernet-mac-vs-altera.html' title='OpenCores 10/100 Ethernet MAC vs Altera LAN91C111'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-7873991474591607205</id><published>2008-10-21T12:25:00.000-07:00</published><updated>2008-12-13T03:07:16.972-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Некоторые сведения из силовой электроники :-))</title><content type='html'>&amp;bull; Стоимость разработки импульсного преобразователя напряжения считается так: 1 € за 1 Вт мощности в нагрузке.&lt;br /&gt;&lt;br /&gt;&amp;bull; Кабель для электродвигателя выбирается таким образом, чтобы за него электродвигатель можно было поднять.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-7873991474591607205?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/7873991474591607205/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=7873991474591607205' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/7873991474591607205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/7873991474591607205'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2008/10/blog-post.html' title='Некоторые сведения из силовой электроники :-))'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-5661264453448960281</id><published>2008-07-07T11:48:00.000-07:00</published><updated>2008-12-13T03:08:07.727-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Запретить топологию! :-)))</title><content type='html'>Действительно, зачем инженерам, программистам, офисным сотрудникам, рабочим и т.д. знать, например, что такое бутылка Клейна или как вывернуть сферу наизнанку!&lt;br /&gt;&lt;a href="http://www.livejournal.com/userinfo.bml?user=ban_topology"&gt; &lt;img height="17" border="0" src="http://www.livejournal.com/img/userinfo.gif" align="absmiddle" width="17"&gt;&lt;/a&gt;&lt;b&gt;&lt;a href="http://community.livejournal.com/ban_topology/"&gt;ban_topology&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;Жесть! ;-))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-5661264453448960281?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/5661264453448960281/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=5661264453448960281' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/5661264453448960281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/5661264453448960281'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2008/07/blog-post_3501.html' title='Запретить топологию! :-)))'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-3786774233289936178</id><published>2008-07-07T11:15:00.000-07:00</published><updated>2008-12-13T03:08:36.144-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Про выполнимость. Немного алгебры.</title><content type='html'>Алгебраизация – несомненно один из самых эффективных способов, позволяющих формализвать наше представление о различных объектах и отношениях между ними, и даже взглянуть на известные проблемы с "другой" стороны. ;-)&lt;br /&gt;&lt;br /&gt;Попробуем применить алгебраический подход к сабжу NP-полноты. :-)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Нотация&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?G" /&gt; – комбинаторная задача,&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?D" /&gt; – конечное множество алфавита задачи &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?G" /&gt;, &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?d \in D" /&gt;,&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?R" /&gt; – отношение на &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?D^r" /&gt;,&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi" /&gt; – операция на множестве &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?D" /&gt;, &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi : D^k \to D" /&gt;,&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\Gamma" /&gt; – множество отношений на &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?D" /&gt;, заданных условием задачи &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?G" /&gt;,&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\Phi" /&gt; – множество операций на &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?D" /&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Основная идея подхода.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Комбинаторная задача &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?G" /&gt; описывается структурой отношений &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\Gamma" /&gt; на множестве &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?D" /&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?G \longleftrightarrow (D,\Gamma)" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Что на входе&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Рассматривается обобщенная комбинаторная задача &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?G" /&gt;, как гомоморфизм между множествами отношений &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\Gamma \longrightarrow \Gamma^*" /&gt;, где &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\Gamma^*" /&gt; – множество отношений на &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?D" /&gt;, определяющих решение проблемы &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?G" /&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Определения&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Пусть &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?D = \{0,1\}" /&gt;, определим вектор &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\wp(\{D_k\}) \in \{0,1\}^r" /&gt;, такой что &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\wp_j = \phi(d_{1,j},...d_{k,j})" /&gt;, &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?D_k = (d_{k,1},...d_{k,r}) \in R" /&gt;. Множество &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?R" /&gt; замкнуто по &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi" /&gt;, если для всех &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?D_j \in R, j \in [1,k]" /&gt;, &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\wp(\{D_k\}) \in R" /&gt;.&lt;br /&gt;&lt;br /&gt;Определим следующие морфизмы:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\Gamma \longrightarrow \Delta \Gamma" /&gt;, &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\Delta \Gamma = \{\phi_k\}" /&gt; – множество всех операций, на которых замкнуты все отношения &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?R \in \Gamma" /&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\Phi \longrightarrow \nabla \Phi" /&gt;, &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\nabla \Phi = \{R_j\}" /&gt; – множество всех отношений, которые замкнуты на всех &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi\in \Phi" /&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Как найти &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\Delta \Gamma" /&gt;?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Из определения отношения &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?R" /&gt;, замкнутого по операции &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi" /&gt;, непосредственно следует, что:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi? \Delta \Gamma : \Gamma^k \longrightarrow \Gamma" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" /&gt;&lt;br /&gt;&lt;br /&gt;где произведение &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\Gamma^k = \Gamma \times ... \times \Gamma = \{R^k_i\}" /&gt; определяется следующим образом: если &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\Gamma = \{R_i\}" /&gt;, где &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?R_i" /&gt; – операция на множестве &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?D^{r(i)}" /&gt; и &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?(d_{1,j},...d_{r(i),j}) \in R_i" /&gt; для &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?j \in [1,k]" /&gt;, то &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?((d_{1,1},...d_{1,k}),...(d_{r(i),1},...d_{r(i),k})) \in R^k_i" /&gt;.&lt;br /&gt;&lt;br /&gt;Частный случай 3SAT: для &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?D=\{0,1\}" /&gt; и &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?k = 3" /&gt; определение &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\Delta \Gamma" /&gt; по множеству &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\Gamma" /&gt; представляет собой задачу выполнимости, содержающую &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?|D|^3 = 8" /&gt; переменных.&lt;br /&gt;&lt;br /&gt;Таким образом, задача определения множества операций на структуре отношений является комбинаторной в классе исходной задачи.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Какова природа &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\Delta \Gamma" /&gt;?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Очевидно, что все &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi_k \in \Delta \Gamma" /&gt; должны быть отображениями, замкнутыми относительно композиции [1]. В таком случае, &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\Delta \Gamma" /&gt; содержит по крайне мере одну из следующих обобщенных операций:&lt;br /&gt;&lt;br /&gt;1. Константную операцию &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^C" /&gt;: &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^C(d_1,...d_k) = d" /&gt;.&lt;br /&gt;&lt;br /&gt;2. Идемпотентную бинарную операцию &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^I" /&gt;, которая не является прямым отображением: &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^I(d_1,d_2) \ne d_1" /&gt;, &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^I(d_1,d_2) \ne d_2" /&gt;, &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^I(d,d) = d" /&gt;.&lt;br /&gt;&lt;br /&gt;3. Мажоритарную операцию &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^M" /&gt;: &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^M(a,a,b) = \phi^M(a,b,a) = \phi^M(b,a,a) = a" /&gt;.&lt;br /&gt;&lt;br /&gt;4. Операцию паритета &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^P" /&gt;: &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?(D, \phi^P)" /&gt; – элементарная абелева 2-группа.&lt;br /&gt;&lt;br /&gt;5. Операцию полуотображения &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^S" /&gt;: &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^S(d_1,... d_q) = d_i \in \{d_1,... d_q\}" /&gt;, &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?|\{d_1,... d_q\}|%20%3C%20k" /&gt;, &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^S(d_1,... d_k) \notin \{d_1,... d_k\}" /&gt;.&lt;br /&gt;&lt;br /&gt;6. Все операции, являющиеся унарными &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^U" /&gt;: &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^U(d_1,...d_k) = f(d_i)" /&gt;, &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?d_i \in \{d_1,... d_k\}" /&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Вычислительная сложность.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Если структура задачи &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?G" /&gt; пораждает множество операций &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\Delta \Gamma" /&gt;, то используя известные результаты теории сложности [2] для разных классов задач, можно доказать следующие свойства:&lt;br /&gt;&lt;br /&gt;1. Если &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^C \in \Delta \Gamma" /&gt;, то &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?G" /&gt; может быть решена с константными затратами памяти.&lt;br /&gt;&lt;br /&gt;2. Если &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^I \in \Delta \Gamma" /&gt; – ассоциативна и коммутативна, то &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?G \in \mathbf P" /&gt;.&lt;br /&gt;&lt;br /&gt;3. Если &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^M \in \Delta \Gamma" /&gt;, то &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?G \in \mathbf {NL}" /&gt;.&lt;br /&gt;&lt;br /&gt;4. Если &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^P \in \Delta \Gamma" /&gt;, то &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?G \in \mathbf P" /&gt;.&lt;br /&gt;&lt;br /&gt;5. Если &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^S \in \Delta \Gamma" /&gt;, а также &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^E \in \Delta \Gamma" /&gt;, где &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^E(d_1,...d_k) = d_i \in \{d_1,... d_k\}" /&gt;, то &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?G \in \mathbf {NP}" /&gt;.&lt;br /&gt;&lt;br /&gt;6. Если &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi^U \in \Delta \Gamma" /&gt;, то &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?G \in \mathbf {NP}" /&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;PS&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Алгебраический подход позволяет ответить на вопрос о принадлежности комбинаторной задачи к соответствующему классу сложности с помощью анализа ее структуры отношений. Принадлежность базовых классов операций к множеству операций, на которых замкнуты все отношения задачи, позволяет точно классифицировать ее вычислительную сложность. Введенная формалистика позволяет в целом ответить на один из поставленных вопросов: при каких условиях комбинаторная задача может быть решена эффективно.&lt;br /&gt;&lt;br /&gt;1. Maurice Pouzet, Ivo G.Rosenberg. Small clones and the projection property &lt;a href="http://arxiv.org/pdf/0705.1519"&gt;Архив&lt;/a&gt;&lt;br /&gt;2. Lewis, H. R. and Papadimitriou, C. H. Elements of the Theory of Computation, 2nd ed. Englewood Cliffs, NJ: Prentice-Hall, 1997. &lt;a href="http://lib.org.by/info/Cs_Computer%20science/CsNp_Computability/Papadimitriou%20C.H.%20Computational%20Complexity%20(1994)(600dpi)(T)(540s)_CsNp_.djvu"&gt;DjVu&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-3786774233289936178?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/3786774233289936178/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=3786774233289936178' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/3786774233289936178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/3786774233289936178'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2008/07/blog-post_07.html' title='Про выполнимость. Немного алгебры.'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-8870294589434175748</id><published>2008-07-01T06:20:00.000-07:00</published><updated>2008-12-13T03:08:57.834-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Про выполнимость. Общие слова.</title><content type='html'>Мы не можем разрешить NP-трудную задачу на тьюринговой машине в полиномиальное время и с полиномиальными затратами памяти. Что мы можем? Если не тьюринговая машина, то что? Что делает задачу неразрешимой?...&lt;br /&gt;&lt;br /&gt;Вопросы эти волнуют каждого специалиста по алгоритмам. Я задаю их сейчас как практикующий инженер. Если синтез логических схем, в общем случае, NP-труден, то какие схемы мы можем синтезировать эффективно? Если не тьюринговая детерменированная машина, то что -- что мы как хардварщики можем предложить взамен? А можем ли вообще? ;-)&lt;br /&gt;&lt;br /&gt;Вопросы очень общны. И нетривиальны. Я попробую немного порассуждать в будущих записях об этой проблеме, тем более, что с кое-какими вещами я знаком и в теории и на практике. Заранее извиняюсь за может быть не очень строгое изложение -- не чувствую себя формалистом по духу ;-))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-8870294589434175748?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/8870294589434175748/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=8870294589434175748' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/8870294589434175748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/8870294589434175748'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2008/07/blog-post.html' title='Про выполнимость. Общие слова.'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-6035005719318856492</id><published>2008-06-12T14:35:00.000-07:00</published><updated>2008-12-13T03:09:22.232-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Про эмо</title><content type='html'>&lt;b&gt;Anthropic Computing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&gt;&gt; There is at least one foolproof way to solve 3SAT in polynomial time: given a formula &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi" /&gt;, guess a random assignment &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?x" /&gt;, then &lt;i&gt;kill yourself if &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?x" /&gt; does not satisfy &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi" /&gt;&lt;/i&gt;. Conditioned on looking at anything at all, you will be looking at a satisfying assignment! Some would argue that this algorithm works even better if we assume the many-worlds interpretation of quantum mechanics. For according to that interpretation, with probability 1, there really is a universe in which you guess a satisfying assignment and therefore remain alive. Admittedly, if &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi" /&gt; is unsatisfiable, you might be out of luck. But this is a technicality: to fix it, simply guess a random assignment with probability &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?1 - 2^{-2n}" /&gt;, and do nothing with probability &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?2^{-2n}" /&gt;. If, after the algorithm is finished, you find that you have not done anything, then it is overwhelmingly likely that &lt;img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\phi" /&gt; is unsatisfiable, since otherwise you would have found yourself in one of the universes where you guessed a satisfying assignment...&lt;br /&gt;&lt;br /&gt;Подробнее:&lt;br /&gt;http://www.scottaaronson.com/talks/anthropic.html&lt;br /&gt;http://www.scottaaronson.com/papers/npcomplete.pdf&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-6035005719318856492?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/6035005719318856492/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=6035005719318856492' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/6035005719318856492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/6035005719318856492'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2008/06/blog-post.html' title='Про эмо'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7658835345163878861.post-4723354132857747057</id><published>2008-04-27T03:17:00.001-07:00</published><updated>2008-04-27T03:19:31.625-07:00</updated><title type='text'>Первая запись</title><content type='html'>Здравствуйте!&lt;br/&gt;Я начинаю ведение блога, в котором буду публиковать свои заметки по проектированию железа, цифровой обработке сигналов и прикладной математике. &lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7658835345163878861-4723354132857747057?l=akpc806a.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://akpc806a.blogspot.com/feeds/4723354132857747057/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7658835345163878861&amp;postID=4723354132857747057' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/4723354132857747057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7658835345163878861/posts/default/4723354132857747057'/><link rel='alternate' type='text/html' href='http://akpc806a.blogspot.com/2008/04/blog-post.html' title='Первая запись'/><author><name>Alex Borysewicz</name><uri>http://www.blogger.com/profile/12738266832921564035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
