Показаны сообщения с ярлыком python. Показать все сообщения
Показаны сообщения с ярлыком python. Показать все сообщения

четверг, 14 июля 2011 г.

wavelet shrinkage: threshold level

Если дисперсия щума нам заранее известна, тогда уровень threshold'а вычисляется довольно просто (см. предыдущий пример). В противном случае существует методика оценки дисперсии из высокочастотной части первого уровня разложения:

#вычисляем коэффициенты разложения
coeffs = pywt.wavedec(data, 'coif3', 'cpd', dec_level);

#оценка шумовой дисперсии из высокочастотной части первого уровня разложения
#как median absolute deviation (MAD) деленное на 0.6745
MAD = abs(max(coeffs[dec_level]) - median(coeffs[dec_level]));
sigma = MAD/0.6745;

#вычисление уровень threshold'а из шумовой дисперсии
tr_level = sigma*sqrt(2*log(len(data)));
print tr_level;

понедельник, 11 июля 2011 г.

wavelet shrinkage & python (pywt)

Делюсь примером, написанным на python с использованием pywt, который показывает как производится фильтрация сигнала от шумов при помощи техники wavelet shrinkage.

воскресенье, 19 июня 2011 г.

Python2.6 and control systems: building lapack, blas, slycot and python-control under win32_x86

Недавно начал разбираться с вейвлетами и решил под это дело изучать python. В тоже время на работе понадобилось считать АФЧХ линейных систем (ранее делал это в MATLAB, теперь же отказался от него в силу перехода на лицензионно чистый софт). Был найден пакет python-control, и началась эпопея установки всего этого дела под ОС Windows (ну что поделать, на работе пока не перешел на "кошерные" ОСи). Для начала установил сам python, модули numpy, scipy, matplotlib - это задача тривиальная, решается путем скачивания инсталляторов с соответствующих сайтов. Для установки python-control необходимо посетить http://sourceforge.net/projects/python-control/files/ и скачать архив с исходниками, после чего перейти в директорию с распакованными исходниками и выполнить setup.py install. Что тоже тривиально. Но вся эта канитель требует модуля slycot, который просто так не устанавливается, ибо использует модули написанные на фортране, которые надо собрать вместе с библиотеками lapack и blas. Итак:
  1. Сперва устанавливаем mingw32 (понадобится компилятор fortran, но я в придачу поставил и остальные) с http://mingw.org
  2. Посещаем http://www.netlib.org/lapack/ скачиваем релиз lapack-3.2.1. Распаковываем.
  3. В полученную директорию распаковываем LAPACK_gfortran_Win_7Nov2010.zip с http://gcc.gnu.org/wiki/LAPACK%20on%20Windows
  4. Запускаем bat-файл makelibs. Ждем. Полученные lapack.a и blas.a переименовываем в liblapack.a и libblas.a, копируем в mingw-dir/lib/gcc/mingw32/x.y.z, где mingw-dir - это директория куда установлен mingw (у меня D:/Program Files/MinGW), x.y.z - версия gcc (в моем случае 4.5.2)
  5. Скачиваем исходники slycot с https://github.com/avventi/Slycot и распаковываем. Переходим в распакованную директорию и правим setup.py: libraries=['lapack', 'blas']
  6. Далее топаем в Python26/Lib/site-packages/numpy/distutils и правим файл mingw32compiler.py: добавляем строку from distutils.version import LooseVersion после from distutils.version import StrictVersion и вместо self.gcc_version = StrictVersion(result.group(1)) пишем self.gcc_version = LooseVersion(result.group(1))
  7. Выполняем setup.py config_fc --fcompiler=gnu95 config_cc --compiler=mingw32 build
  8. Если все нормально соберется, выполняем setup.py install
В итоге имеем рабочий python-control. 

UPD. То же самое проделал в xubuntu 10.04, уже без плясок с бубном и всего за полчаса, из которых минут 20 собирался slycot. Что и ожидал, ибо нативность и доступность большинства вещей в репозитории (те же lapack и blas).

Получаются красивые картинки: