РАЗРАБОТКА СИСТЕМЫ МНОГОМАСШТАБНОГО АНАЛИЗА ДИСКРЕТНЫХ СИГНАЛОВ
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к дипломной работе на тему:

«Система многомасштабного анализа дискретных сигналов.

Подсистема вейвлет-анализа»

 

Дипломник

Руководитель

Консультант по экономической части

Консультант по безопасности

и экологичности проекта

Нормоконтроль

Рецензент

вед. инженер-программист

Зав. кафедрой

д.т.н., профессор................................................................. Мурынов А.И.

 

 

ИЖЕВСК 2006

 


РЕФЕРАТ

 

Для написания соответствующего программного обеспечения были изучены материалы и публикации в области цифровой обработки сигналов.

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

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

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

 

 
ПЕРЕЧЕНЬ УСЛОВНЫХ ОБОЗНАЧЕНИЙ

 

МАДС – многомасштабный анализ дискретных сигналов

ПО – программное обеспечение

ОС – операционная система

ЭВМ – электронно-вычислительная машина





ВВЕДЕНИЕ

 

Данная работа посвящена вопросам многомасштабного анализа дискретных сигналов. Термин «сигнал» применяется для обозначения любого упорядоченного набора численно зафиксированной информации о каком-либо процессе, объекте, функции и т.п. Под «анализом» сигнала имеется в виду не только его чисто математическое преобразование, но и получение на основе этого преобразования выводов о специфике соответствующего процесса или объекта /1/.

Одним из методов многомасштабного анализа является вейвлет-анализ (от англ. «wave» – волна). Он используется уже более десятка лет и хорошо зарекомендовал себя в таких областях как архивация данных, медицина и биология (анализ интервалов сердцебиений, ЭКГ, последовательностей ДНК), анализ наблюдательных данных (метеорология, акустика, сейсмология) и др. /2/

Принципиально новым методом многомасштабного анализа является структурная индексация. Её суть заключается в выявлении структурных особенностей сигналов для последующего анализа этих особенностей.

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

Перед разработчиком были поставоены следующие задачи;

1) разработка модели данных подсистемы вейвлет-анализа;

2) разработка алгоритма вейвлет-анализа входного сигнала;

3) программная реализация подсистемы вейвлет-анализа;

4) интеграция подсистемы в единую систему многомасштабного анализа дискретных сигналов.

 



РАЗРАБОТКА СИСТЕМЫ МНОГОМАСШТАБНОГО АНАЛИЗА ДИСКРЕТНЫХ СИГНАЛОВ

 

Обоснование целесообразности разработки системы многомасштабного анализа дискретных сигналов

 

Назначение системы

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

 

Аналитический обзор

 

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

Однако метод вейвлет-анализа, используемый в системе МАДС для предварительного анализа и являющейся основой данной работы, известен достаточно давно и с появлением электронно-вычислительной техники начали появлятся программные продукты для вейвлет-преобразований дискретных сигналов.

AutoSignal

AutoSignal – программа компании Systat Software Inc, которая автоматизирует процесс анализа сигналов /4/. AutoSignal имеет графический интерфейс, позволяющий легко выполнять все операции, от ввода данных до вывода результатов. Существует возможность выбора технологии анализа, подбора соответствующего алгоритма. По результатам проведённого анализа AutoSignal формирует отчёты, содержащие двухмерные и трехмерные графики и краткие статистические обзоры /5/.

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

1) быстрое преобразование Фурье;

2) построение авторегрессионных моделей;

3) построение ARMA-моделей;

4) построение сложных экспоненциальных моделей;

5) анализ собственных частот и вейвлет-анализ.


1.2.2. MatLab Wavelet Toolbox

MatLab Wavelet Toolbox – это открытый, дружественный для пользователя пакет расширения MatLab, позволяющий синтезировать всевозможные алгоритмы обработки информации - данных, сигналов и изображений - с использованием вейвлет-функций /6/. В своей работе пакет широко использует возможности системы MatLab (матричные алгоритмы вычислений, стильную и в тоже время мощную графику) для решения задач анализа (шумоподавления, расфильтровки, сжатия и восстановления): это предоставляет в распоряжение как начинающего, так и профессионального пользователя исчерпывающий набор функций для реализации собственных алгоритмов обработки данных, т.е. написания собственного m-кода, а также средства графического интерфейса (GUI). Можно сказать, пакет Wavelet Toolbox оказывается превосходным средством для решения задач обработки одно- и двумерной информации: действительно, спектр задач, решаемых с использованием пакета, настолько широк, что упоминание таких проблем, как обработка звука, статических изображений и видеокартинок, не говоря уже о передаче данных, исследовании массивов геофизических, сейсмоакустических данных, биомедицинских сигналов и изображений, будет, естественно, далеко не полным.

MatLab Wavelet Toolbox включает обширную библиотека вейвлет-функций (континуальных неортогональных вейвлетов, в том числе комплексных; ортогональных семейств функций, функций Добеши, Койфмана, а также симлетов; биортогональных вейвлетов); широкий набор вейвлет-фильтров /7/.

Основные возможности:

1) всевозможные функции для реализации континуального анализа, дискретного одноуровневого и дискретного многоуровневого анализа;

2) функции анализа и синтеза данных с использованием вейвлет-пакетов;

3) функции для решения задач аппроксимации данных, статистических распределений и т.п.;

4) функции внедрения в пакет собственных вейвлет-функций и работы с ними;

5) набор средств визуализации результатов анализа и синтеза;

6) средства GUI.

 

1.2.3. Вывод по аналитическому обзору

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

Однако, несмотря на множество достоинств, они имеют следующие недостатки:

1) не реализуют метод структурной индексации исходных сигналов;

2) обладают высокими требованиями к аппаратному обеспечению;

3) имеют высокую стоимость;

4) понятие вейвлета в них строго детерминировано для реализации уже разработанных алгоритмов.

Этих недостатков лишена система МАДС. Кроме того, ограничения, накладываемые вышеупомянутыми системами на структуру вейвлета, в данной работе сняты: вейвлет по своей сущности здесь ничем не отличается от сигнала. Это открывает перед нами широкое поле для экспериментов, в том числе и по изучению фрактальных свойств сигнала.

Поэтому данная разработка является востребованной в современной индустрии компьютерной обработки сигналов.


1.3. Основные требования к системе

 



Требования к функциональной структуре

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

Подсистема вейвлет-анализа служит для вейвлет-преобразования исходного сигнала.

Подсистема структурной индексации предназначена для реализации методов структурной индексации исходного сигнала.

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

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

 

Требования к техническому обеспечению

Задача обработки дискретных сигналов в системе МАДС связана с автоматическим анализом больших массивов информации. Преобразования, проводимые в системе, должны проводиться в процессе интерактивного взаимодействия с пользователем, поэтому паузы на обработку не должны превышать нескольких минут. Исходя из этого, сформулированы требования к техническим характеристикам персонального компьютера, на котором будет функционировать система. Требования сведены в табл. 1.1.

Таблица 1.1

Технические характеристики персонального компьютера

Наименование Значение
Частота процессора, МГц от 900
Объем оперативной памяти, Мб от 128
Разрешение экрана монитора не менее 1024x768

 

Требования к информационному обеспечению

Основным видом информации, получаемым в системе МАДС, является графическая информация в растровом представлении. Такой вид данных воспринимается человеком непосредственно и целостно, поэтому необходимо обеспечить средства наглядной визуализации изображений на различных этапах обработки.

 

Требования к программному обеспечению

Систему МАДС целесообразно разрабатывать для функционирования под операционной системой семейства Windows, так как ОС данного класса наиболее широко распространены в современном мире. Платформой для разработки выбрана среда для разработки приложений Microsoft Visual Studio .NET. Эта среда поддерживает язык C# и обладает при этом возможностями быстрой разработки и проектирования визуальных интерфейсов, что особенно важно при работе с графической информацией.

 

Характеристика задачи

Для того чтобы функция  могла называться вейвлетом, должны выполняться два условия /8/:

1) ее среднее значение (т.е. интеграл по всей прямой) равно нулю: ;

2) функция  быстро убывает при .

Теперь возьмем произвольный сигнал – некоторую функцию  (переменную  будем называть временем), и произведем ее вейвлет-анализ при помощи вейвлета .

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

1) растянуть вейвлет  в  раз по горизонтали и в  раз по вертикали;

2) сдвинуть его в точку , полученный вейвлет обозначим ;

3) "усреднить" значения сигнала в окрестности точки a при помощи :

                        ,                         (2.1)

где  – вейвлет со смещением  и масштабом  /3/.


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

Таким образом, задача вейвлет-анализа может быть разбита на несколько подзадач:

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

2) перемножение сигнала и вейвлетва, т.е. расчёт одной строки матрицы результата вейвлет-анализа, соответствующей одному масштабу вейвлета;

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

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

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




Входная информация

Входной информацией являются текстовые файлы с расширением «.dat» (от англ. data – данные), содержащие данные исходного сигнала.

Структура входного файла «.dat»:

где  – количество данных;

,  – значение сигнала, целое число.

 

Выходная информация

Выходной информацией для данной задачи являются текстовые файлы с расширением «.war» (от англ. wavelet analysis result – результат вейвлет-анализа), содержащие результаты вейвлет-анализа.

Структура выходного файла «.war»:

где  – ширина растра;

 – высота растра;

, ,  – результат вейвлет-анализа, вещественное число.

 

Используемая информация

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

 

Результаты решения

Список условных обозначений

Алгоритм использует следующие условные обозначения:

src – исходный сигнал;

src_size – размер исходного сигнала;

res – передискретизированный сигнал;

res_size – размер результата передискретизации;

][ – взятие целой части.

 

Используемая информация

При реализации алгоритма используются размерные характеристики сигнала и вейвлета, а также их значения.



Результаты решения

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

 

Список условных обозначений

Алгоритм использует следующие условные обозначения:

y – анализируемый сигнал;

y_size – размер анализируемого сигнала;

psi – дискретизированный вейвлет;

psi_size – размер дискретизированного вейвлета;

res – резельтат переменожения сигнала и вейвлета;

res_size – размер результата.

 

Используемая информация

При реализации алгоритма используются размерные характеристики сигнала и вейвлета, а также их значения.

 

Результаты решения

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

 

Алгоритм вейвлет-анализа

 

1. i ::= 0;

2. Если i ≥ psi_size, то переход к п. 4;

3. psi_scaled ::= resample(psi, psi_size – i);
resi ::= multiply(y, psi_scaled);
i ::= i + 1;

4. Конец.

2.4.6. Требования к контрольному примеру

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





Список условных обозначений

Алгоритм использует следующие условные обозначения:

y – анализируемый сигнал;

psi – дискретизированнный исходный вейвлет;

psi_size – размер исходного вейвлета;

psi_scaled – смаштабированный (передискретизированный) вейвлет;

res – результат вейвлет анализа;

resample – оператор передискретизации вейвлета (см. п. 2.2);

multiply – оператор перемножения сигнала (см. п. 2.3).

 

Вводная часть

Подпрограмма Wavelet.Resample служит для масштабирования дисретизированного вейвлета. Подпрограмма производит изменение шага дискретизации вейвлета и соответсвующее усреднение значения сигнала в полученных интервалах. Текст программы приведен в приложении 1.2.

 

Функциональное назначение

Подпрограмма Wavelet.Resample предназначена для реализации алгоритма передискретизации сигнала.

 

Описание информации

Входные данные для данной подпрограммы представлены:

int [] data – массив, содержащий значения исходного вейвлета;

int size – требуемый размер вейвлета.

Выходные данные для данной подпрограммы представлены:

double [] res – передискретизированный вейвлет.

Используемые программы

В подпрограмме не используется других подпрограмм.

 

Вводная часть

Подпрограмма Result.FormRow служит для получения одной строки результата вейвлет-анализа, соответсвующей определенному масштабу вейвлета. Подпрограмма производит перемножение сигнала и вейвлета. Текст программы приведен в приложении 1.3.

 

Функциональное назначение

Подпрограмма Result.FormRow предназначена для реализации алгоритма перемножения сигнала и вейвлета.

 

Описание информации

Входные данные для данной подпрограммы представлены:

int [] x – массив, содержащий значения анализируемого сигнала;

double [] y – массив, содержащий значения смаштабированного вейвлета;

int row – номер строки, для который производится расчёт.

 

Выходные данные для данной подпрограммы представлены:

double [ , ] data – матрица, содержащая значения результата вейвлет-анализа.

 

Используемые программы

В подпрограмме не используется других подпрограмм.



Вводная часть

Подпрограмма Analyzer.Analyze служит для осуществления вейвлет-анализа. Подпрограмма производит последовательное масштабирование вейвлета и его перемножение с сигналом. Текст программы приведен в приложении 1.4.

 

Функциональное назначение

Подпрограмма Analyzer.Analyze предназначена для реализации алгоритма вейвлет-анализа.

 

Описание информации

Входные данные для данной подпрограммы представлены:

int [] data – массив, содержащий значения анализируемого сигнала;

int [] wavelet – массив, содержащий значения исходного вейвлета.

Выходные данные для данной подпрограммы представлены:

double [ , ] result – массив, содержащий значения исходного вейвлета.


Схема программы Result.FormRow

 

 

Рис. 2.3


2.7.4. Используемые программы

В подпрограмме используется подпрограммы Wavelet.Resample и Result.FormRow, описанные в п.п. 2.5, 2.6.



ЗАКЛЮЧЕНИЕ

 

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

1) спроектированы базовые модели данных, которые могут быть использованы для дальнейшей обработки и анализа;

2) реализован алгоритм вейвлет-анализа входного сигнала;

3) разработано программное средство реализующее вейвлет-анализ;

4) подсистема вейвлет-анализа интегрирована в единую систему многомасштабного анализа дискретных сигналов;

5) подсистема предоставляет базовый набор функций для анализа входных сигналов, результаты которого могут применяться в других подсистемах.

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

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

Посредством МАДС удается обнаружить структурные особенности сигналов, выявить и уменьшить шумы.

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

 



СПИСОК ЛИТЕРАТУРЫ

 

1. Добеши И. Десять лекций по вейвлетам. -Ижевск: НИЦ «Регулярная и хаотическая динамика», 2001.

2. Дремин И.М. Вейвлеты и их использование. –М: Наука – производству, 2000.

3.  Астафьева Н.М. Вейвлет-анализ: основы теории и примеры применения. –М: Фундаментальная и прикладная математика, 1998.

4. http://www.systat.com/products/AutoSignal/
AutoSignal – Spectral and time domain signal analysis and processing software.
// Проверено 06.06.2006.

5. http://education.softline.ru/product.asp?catalog_name=SoftLine&category_name=&product_id=Software-13545&view=tech_info_ru&cookie%5Ftest=1
AutoSignal – пакет для проведения автоматизированного анализа сигналов.
// Проверено 06.06.2006.

6. http://www.mathworks.com/products/wavelet/
Wavelet Toolbox 3.0.4. // Проверено 06.06.2006.

7. http://matlab.exponenta.ru/wavelet/index.php
Wavelet ToolBox - обработка сигналов и изображений. //Проверено 06.06.2006.

8.  Новиков И.Я. Основные конструкции всплесков. –М: Успехи математических наук, 1998.

9.  Петухов А.П. Введение в теорию базисов всплесков. –М: Радио и связь, 1995.

10. Строустрап Б. Язык программирования С++. – М.: Мир, 1994. – 278 с.

11.  Кнут Д. Искусство программирования для ЭВМ. - М.: Мир, 1976. – Т. 1-3.

12. Корн Г., Корн Т. Справочник по математике для научных работников и инженеров. - М.: Наука, 1979. – 720с.

13. Эйнджел Э. Интерактивная компьютерная графика. – М.: Вильямс, 2001. – 592 с.

14. ГОСТ 19.001-77 ЕСПД. Общие положения. -М.: Издательство стандартов, 1989.

15.  ГОСТ 19.701-90 ЕСПД. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения. -М.: Издательство стандартов, 1991.

16.  ГОСТ 19.105-78 ЕСПД. Общие требования к программным документам. -М.: Издательство стандартов, 1989.

17.  ГОСТ 19.401-78 ЕСПД. Текст программы. Требования к содержанию и оформлению. -М.: Издательство стандартов, 1989.

18.  ГОСТ 19.404-79 ЕСПД. Пояснительная записка. Требования к содержанию и оформлению. -М.: Издательство стандартов, 1989.

19.  ГОСТ 19.504-79 ЕСПД. Руководство программиста. Требования к содержанию и оформлению. -М.: Издательство стандартов, 1989.

20.  ГОСТ 19.505-79 ЕСПД. Руководство оператора. Требования к содержанию и оформлению. -М.: Издательство стандартов, 1989.

21. Почерняев С.В., Килин И.В. Методические указания по дипломному проектированию. – Ижевск: Издательство ИжГТУ, 1994.

22. Технико-экономическое обоснование дипломных проектов. – Ижевск: Издательство ИжГТУ, 2001.

23. Налоговый кодекс РФ. – М.: ГроссМедиа Ферлаг, 2004.

24. ГОСТ 12.0.002-80 Система стандартов безопасности труда. Термины и определения – М.: Издательство стандартов, 1984.

25. ГОСТ 12.1.003-89 Система стандартов безопасности труда. Шум. Общие требования безопасности. -М.: Издательство стандартов, 1989.

26. СанПиН 2.2.2.542-96 Гигиенические требования к видеодисплейным терминалам, персональным электронным вычислительным машинам и организации работы. -М.: Издательство стандартов, 1976.

27. ГОСТ 12.1.029-80 Система стандартов безопасности труда. Средства и методы защиты от шума. Классификация. -М.: Издательство стандартов, 1980.

28. Руководства по проектированию производственных помещений и промышленных предприятий. -М.: Стройиздат, 1981.

29. СанПиН 2.2.4.548-96 Гигиенические требования к микроклимату производственных помещений. -М.: Издательство стандартов, 1976.

30. СНиП 23-05-95 Нормы проектирования естественного и искусственного освещения. -М.: Издательство стандартов, 1995.

31. ГОСТ 12.1.004-91 Система стандартов безопасности труда. Пожарная безопасность. Общие требования. -М.: Издательство стандартов, 1992.


ПРИЛОЖЕНИЕ 1

ТЕКСТ ПРОГРАММЫ

 

П. 1.1. ТЕКСТ МОДУЛЯ SIGNAL.CS

 

using System;

using System.Collections;

using System.Drawing;

using System.IO;

using System.Windows.Forms;

using MultiScAn.Common.Attributes;

using MultiScAn.Common.Interfaces;

using MultiScAn.Common.Utils;

 

namespace MultiScAn.Common.Classes

{

    public delegate void CommonHandler();

 

    /// <summary>

    /// Summary description for Signal.

    /// </summary>

    [Filter("Текстовый файл данных (*.dat)|*.dat")]

    public class Signal : IData, ICleanable, IEnumerable

    {

              private int[] _data = new int[0];

              private int _minValue = int.MaxValue;

              private int _maxValue = int.MinValue;

              private Bitmap _bitmap;

 

              public Signal()

              {

              }

 

              public void Rebuild(int size)

              {

                       _data = new int[size];

                       _minValue = int.MaxValue;

                       _maxValue = int.MinValue;

                       _bitmap = null;

              }

 

              public void Load(string fileName)

              {

                       int min = int.MaxValue, max = int.MinValue;

                       ArrayList list = new ArrayList();

                       using(StreamReader reader = File.OpenText(fileName))

                       {

                                 string str = String.Empty;

                                 while((str = reader.ReadLine()) != null)

                                 {

                                          str = str.Trim();

                                          if (str != String.Empty)

                                          {

                                                   string [] vals = str.Split(' ', '\t');

                                                   foreach(string val in vals)

                                                   {

                                                             int iVal = int.Parse(val);

                                                             DataUtil.Sort(iVal, ref min, ref max);

                                                             list.Add(iVal);

                                                   }

                                          }

                                 }

                       }

                       if (list.Count == 0) throw new NotSupportedException();

                       _data = (int[]) list.ToArray(typeof(int));

                       _minValue = min; _maxValue = max;

                       _bitmap = null;

                       if(OnLoad != null) OnLoad();

              }

 

              public event CommonHandler OnLoad;

 

              public void Save(string fileName)

              {

                       using(StreamWriter writer = File.CreateText(fileName))

                       {

                                 foreach(int s in _data)

                                 {

               writer.WriteLine(s);

                                 }

                       }

                       if (OnSave != null) OnSave();

              }

 

              public event CommonHandler OnSave;

 

              public Bitmap Bitmap

              {

                       get

                       {

                                 if (_bitmap == null)

                                 {

                                          int min = _minValue > 0 ? 0 : -_minValue;

                                          int max = _maxValue < 0 ? 0 : _maxValue;

                                          Graphics g = null;

                                          _bitmap = new Bitmap(2 * _data.Length, min + max);

                                          g = Graphics.FromImage(_bitmap);

                                          g.FillRectangle(new SolidBrush(Color.White), g.ClipBounds);

                                          for(int i = 1; i <= _data.Length; i++)

                                          {

                                                   g.DrawLine(new Pen(Color.Black),

                                                             new Point(2*i-1 , max),

                                                             new Point(2*i-1, max - _data[i-1]));

                                          }

                                 }

                                 return _bitmap;

                       }

              }

 

              public void Clean()

              {

                       _data = new int[0];

                       _minValue = int.MaxValue;

                       _maxValue = int.MinValue;

              }

 

              public bool IsEmpty

              {

                       get { return _data.Length == 0; }

              }

 

              public int this[int index]

              {

                       get { return _data[index]; }

                       set { sorter = _data[index] = value; }

              }

 

              private int sorter

              {

                       set

                       {

                                 DataUtil.Sort(value, ref _minValue, ref _maxValue);

                       }

              }

 

              public IEnumerator GetEnumerator()

              {

                       return _data.GetEnumerator();

              }

 

              public int Length

              {

                       get { return _data.Length; }

              }

 

              public void CopyTo(int[] arr)

              {

                       _data.CopyTo(arr, 0);

              }

    }

}

 

П. 1.2. ТЕКСТ МОДУЛЯ WAVELET.CS

 

using MultiScAn.Common.Classes;

 

namespace MultiScAn.WaveletAnalysis

{

    /// <summary>

    /// Summary description for Wavelet.

    /// </summary>

    public class Wavelet : Signal

    {

              public Wavelet()

              {

              }

 

              public double[] Resample(int size)

              {

                       double[] res = new double[size];

                       for (int i = 0, offs = 0; i < size; i++, offs += base.Length)

                       {

                                 res[i] = 0.0;

                                 for (int j = 0; j < base.Length; j++)

                                 {

                                          res[i] += base[(offs + j)/size];

                                 }

                                 res[i] /= base.Length;

                       }

                       return res;

              }

    }

}

 

П. 1.3. ТЕКСТ МОДУЛЯ RESULT.CS

 

using System;

using System.Collections;

using System.Drawing;

using System.IO;

using MultiScAn.Common.Attributes;

using MultiScAn.Common.Classes;

using MultiScAn.Common.Interfaces;

using MultiScAn.Common.Utils;

 

namespace MultiScAn.WaveletAnalysis

{

    /// <summary>

    /// Summary description for ResultUtil.

    /// </summary>

    [Filter("Результат вейвлет анализа (*.war)|*.war")]

    public class Result : IResult

    {

              double [,] _Data = new double[0, 0];

              private Bitmap _bitmap;

              private double _minValue = double.MaxValue;

              private double _maxValue = double.MinValue;

              private Spectrum _spectrum = new Spectrum();

 

              public Result()

              {

              }

 

              internal void Rebuild(int height, int width)

              {

                       _bitmap = null;

                       _Data = new double[height, width];

                       _minValue = double.MaxValue;

                       _maxValue = double.MinValue;

              }

 

              public int Width

              {

                       get { return _Data.GetLength(1); }

              }

 

              public int Height

              {

                       get { return _Data.GetLength(0); }

              }

 

              public double this[int i, int j]

              {

                       get { return _Data[i, j]; }

                       set { sorter = _Data[i, j] = value; }

              }

                  

              public double MinValue

              {

                       get { return _minValue; }

              }

 

              public double MaxValue

              {

                       get { return _maxValue; }

              }

                  

              public void Load(string fileName)

              {

                       double min = double.MaxValue, max = double.MinValue;

                       double [,] data;

                       using(StreamReader reader = File.OpenText(fileName))

                       {

                                 int width = int.Parse(__read(reader));

                                 int height = int.Parse(__read(reader));

                                 data = new double[width, height];

                                 for(int i = 0; i < width; i++)

                                 {

                                          for(int j = 0; j < height; j++)

                                          {

                                                   DataUtil.Sort(data[i, j] = double.Parse(__read(reader)), ref min, ref max);

                                          }

                                 }

                       }

                       _Data = data;

                       _minValue = min;

                       _maxValue = max;

                       _bitmap = null;

                       if(OnLoad != null) OnLoad();

              }

 

              private string __read(StreamReader reader)

              {

       string str = reader.ReadLine();

                       if (str == null) throw new NotSupportedException();

                       return str;

              }

 

              public event CommonHandler OnLoad;

 

              public void Save(string fileName)

              {

                       using(StreamWriter writer = File.CreateText(fileName))

                       {

                                 int height = _Data.GetLength(0), width = _Data.GetLength(1);

                                 writer.WriteLine(height);

                                 writer.WriteLine(width);

                                 for(int i = 0; i < height; i++)

                                 {

                                          for(int j = 0; j < width; j++)

                                          {

                   writer.WriteLine(_Data[i, j]);                                                        

                                          }

                                 }

                       }

                       if (OnSave != null) OnSave();

              }

 

              public event CommonHandler OnSave;

 

              public Bitmap Bitmap

              {

                       get

                       {

                                 if (_bitmap == null)

                                 {

                                          if (_spectrum.Length == 0) _spectrum.LoadDefault();

        

                                          _bitmap = new Bitmap(Width, Height);

                                              

                                          double k = (_spectrum.Length - 1) / (_maxValue - _minValue);

        

                                          for(int i = 0; i < Height; i++)

                                          {

                                                   for(int j = 0; j < Width; j++)

                                                   {

                                                             _bitmap.SetPixel(j, i, _spectrum[(int) (k *(_Data[i, j] - _minValue))]);

                                                   }

                                          }

                                 }

                                 return _bitmap;

                       }

              }

 

              public void FormRow(Signal x, double[] y, int row)

              {

                       int result_size = 2 * x.Length,

                                 max_offset = x.Length - y.Length,

                                 null_offset = Math.Min(y.Length - 1, result_size);

 

                       if (result_size != _Data.GetLength(1)) throw new ArgumentOutOfRangeException();

                       for (int i = 0; i < null_offset; i++)

                       {

                                 this[row, i] = 0.0;

                       }

                       if (null_offset == result_size) return; // зачем делать лишние движения, если и так уже всё забито нулями

                       for (int i = 0; i <= max_offset; i++)

                       {

                                 double sum = 0.0;

                                 for (int j = 0; j < y.Length; j++)

                                 {

                                          sum += x[i+j] * y[j];

                                 }                

                                 this[row, 2*i+y.Length-1] = sum;

                                 this[row, 2*i+y.Length] = 0.0;

                       }       

                       for (int i = result_size - null_offset; i < result_size; i++)

                       {

                                 this[row, i] = 0.0;

                       }

              }

 

              public Spectrum Spectrum

              {

                       get { return _spectrum; }

                       set { _spectrum = value; }

              }

 

              private double sorter

              {

                       set

                       {

                                 DataUtil.Sort(value, ref _minValue, ref _maxValue);

                       }

              }

    }

}


П. 1.3. ТЕКСТ МОДУЛЯ ANALYZER.CS

 

using System;

using System.Diagnostics;

using MultiScAn.Common.Classes;

using MultiScAn.Common.Interfaces;

 

namespace MultiScAn.WaveletAnalysis

{

    /// <summary>

    /// Summary description for Analysis.

    /// </summary>

    public class Analyzer : IAnalyzer

    {

              public const double DEFAULT_SCALE = 1.0;

              private Wavelet _Wavelet = new Wavelet();

   private Signal _Data = new Signal();

 

              public Analyzer()

              {

              }

 

//            public Analyzer(Wavelet wavelet, Wavelet data)

//            {

//                     _Wavelet = wavelet;

//                     _Data = data;

//            }

 

              public Wavelet Wavelet

              {

                       get { return _Wavelet; }

                       set { _Wavelet = value; }

              }

 

              public Signal Data

              {

                       get { return _Data; }

                       set { _Data = value; }

              }

 

              public void Analyze(IResult result)

              {

                       Analyze(DEFAULT_SCALE, (Result)result);

              }

 

              public void Analyze(double scale, Result result)

              {

                       if (_Wavelet == null) throw new ArgumentNullException("Wavelet");

                       if (_Data == null) throw new ArgumentNullException("Data");

                       int size = (int)(_Wavelet.Length * scale);

//                     Wavelet [] result = new Wavelet[size];

                       result.Rebuild(size, 2 * _Data.Length);

                       for (int i = 0; i < size; i++)

                       {

                                 result.FormRow(_Data, _Wavelet.Resample(size - i), i);

//                               Trace.WriteLine(String.Format("{0} / {1}", i, size));

                       }

              }

    }

}

 











ПРИЛОЖЕНИЕ 2

РУКОВОДСТВО ПРОГРАММИСТА

 

П.2.1. НАЗНАЧЕНИЕ ПРОГРАММЫ

 

Программа вейвлет-анализа  имеет идентификатор WaveletAnalysis. Программа WaveletAnalysis выполняет следующие функции:

1) загрузка и сохранение дискретных сигналов (включая вейвлеты);

2) расчёт, загрузка и сохранение результатов вейвлет-анализа;

3) предоставление интерфейсов для подсистемы визуализации данных МАДС;

Программа WaveletAnalysis входит в состав системы МАДС в качестве динамически загружаемой библиотеки. Система МАДС реализует многомасштабный анализ дискретных сигналов методами вейвлет-анализа и структурной индексации.

 

П.2.2. УСЛОВИЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ

 

Программа WaveletAnalysis предъявляет следующие требования к техническим средствам:

1) стандартный x86-совместимый ПК;

2) тактовая частота процессора не менее 900 МГц;

3) объем оперативной памяти не менее 128 Мб;

4) разрешение экрана монитора не менее 1024x768.

Программа WaveletAnalysis предъявляет следующие требования к программным средствам:

1) операционная система семейства Windows (Windows NT/2000/XP);

2) .NET Framework версии 1.1;


П.2.3. ХАРАКТЕРИСТИКА ПРОГРАММЫ

 

Программа WaveletAnalysis входит в состав системы МАДС в качестве динамически загружаемой библиотеки.

В состав программы входят следующие файлы, необходимые для ее функционирования:

1) MultiScAn.Visualization.exe – исполняемый модуль подсистемы визуализации данных;

2) MultiScAn.Common.dll – библиотека, содержащая базовые классы и интерфейсы необходимые для функционирования системы МАДС;

3) MultiScAn.WaveletAnalysis.dll – библиотека, реализующая вейвлет-анализ;

4) DialCol.txt – файл цветовой шкалы, используемой для визуализации результатов вейвлет-анализа.

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

 

П.2.4. ОБРАЩЕНИЕ К ПРОГРАММЕ

 

Для вызова программы необходимо запустить на выполнение файл MultiScAn.Visualization.exe и выбрать закладку «Вейвлет-анализ».

Интерфейс программы WaveletAnalysis представлен на рис. П.2.1.

Описание панели инструментов программы WaveletAnalysis представлено в табл. П.2.1.

 


Интерфейс программы WaveletAnalysis

Рис. П.2.1

 

Таблица П.2.1

Панель инструментов программы WaveletAnalysis

 

Кнопка на панели инструментов Значение
Выход из приложения
Загрузка анализируемого сигнала из текстового файла
Загрузка вейвелета из текстового файла
Вейвлет-анализ сигнала
Сохранение результатов вейвлет-анализа в текстовый файл
Настройка программы
Просмотр диалога «О программе»

 

Для загрузки, сохранения или сохранения изображения анализируемого сигнала, вейвлета или результата вейвлет-анализа в соответсвующей закладке («Данные», «Вейвлет» или «Результат») необходимо выбрать соответсвующий пункт контекстного меню («Загрузить», «Сохранить» или «Сохранить изображение…») или нажать на соответствующую кнопку панели инструментов (см. табл. П.2.1).

В стандартном диалоге открытия файла необходимо выбрать нужный файл. В итоге на соответсвующей закладке («Данные», «Вейвлет» или «Результат») появляется графическое изображение анализируемого сигнала, вейвлета или результата вейвлет-анализа.

 

П.2.5. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ

 

Входной информацией являются текстовые файлы с расширением «.dat» (от англ. data – данные), содержащие данные исходного сигнала.

Структура входного файла «.dat»:

где  – количество данных;

,  – значение сигнала, целое число.

Выходной информацией для данной задачи являются текстовые файлы с расширением «.war» (от англ. wavelet analysis result – результат вейвлет-анализа), содержащие результаты вейвлет-анализа.


Структура выходного файла «.war»:

где  – ширина растра;

 – высота растра;

, ,  – результат вейвлет-анализа, вещественное число.

 

П.2.6. СООБЩЕНИЯ ПРОГРАММИСТУ

 

Сообщения, выдаваемые программисту, приведены в табл. П.2.2.

 

Таблица П.2.2

Сообщения программисту

 

Сообщение Действие программиста
Неверный формат входной строки Выбранный файл данных имеет некорректный формат. При необходимости попытаться загрузить другой файл данных
Невозможно найти файл «Resources\DialCol.txt» Результат вейвлет-анализа успешно рассчитан или загружен, но не может быть отображен в связи с тем, что не найден файл цветовой шкалы. Необходимые действия описаны в приложении 2.7

 

Результаты загрузки и вычислений выводятся в интерфейсном элементе так, как это приведено на рис.П.2.2 и П.2.3.

 


Результат загрузки вейвлета

Рис. П.2.2

 

Результат вейвлет-анализа сигнала

 

Рис. П.2.3

 


П.2.7. НАСТРОЙКА ПРОГРАММЫ

 

Для функционирования программы WaveletAnalysis необходимо установить .NET Framework версии 1.1.

Визуализация результатов вейвлет-анализа требует наличие файла цветовой шкалы. Для этого необходимо создать каталог Resources в каталоге с программой и поместить в него файл DialCol.txt.








ПРИЛОЖЕНИЕ 3

РУКОВОДСТВО ОПЕРАТОРА

 

П.3.1. НАЗНАЧЕНИЕ ПРОГРАММЫ

 

Программа вейвлет-анализа имеет идентификатор WaveletAnalysis. Программа WaveletAnalysis выполняет следующие функции:

1) загрузка и сохранение дискретных сигналов (включая вейвлеты);

2) расчёт, загрузка и сохранение результатов вейвлет-анализа;

3) предоставление интерфейсов для подсистемы визуализации данных МАДС;

Программа WaveletAnalysis входит в состав системы МАДС в качестве динамически загружаемой библиотеки. Система МАДС реализует многомасштабный анализ дискретных сигналов методами вейвлет-анализа и структурной индексации.

 

П.3.2. УСЛОВИЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ

 

Программа WaveletAnalysis предъявляет следующие требования к техническим средствам:

1) стандартный x86-совместимый ПК;

2) тактовая частота процессора не менее 900 МГц;

3) объем оперативной памяти не менее 128 Мб;

4) разрешение экрана монитора не менее 1024x768.

Программа WaveletAnalysis предъявляет следующие требования к программным средствам:

1) операционная система семейства Windows (Windows NT/2000/XP);

2) .NET Framework версии 1.1;

3) наличие в каталоге программы файлов MultiScAn.Visualization.exe, MultiScAn.Common.dll, MultiScAn.WaveletAnalysis.dll и Resources\DialCol.txt.


П.3.3. ВЫПОЛНЕНИЕ ПРОГРАММЫ

 

Для вызова программы необходимо запустить на выполнение файл MultiScAn.Visualization.exe и выбрать закладку «Вейвлет-анализ».

Интерфейс программы WaveletAnalysis представлен на рис. П.3.1.

 

Интерфейс программы WaveletAnalysis

Рис. П.3.1

 

Описание панели инструментов программы WaveletAnalysis представлено в табл. П.3.1.

Для загрузки, сохранения или сохранения изображения анализируемого сигнала, вейвлета или результата вейвлет-анализа в соответсвующей закладке («Данные», «Вейвлет» или «Результат») необходимо выбрать соответсвующий пункт контекстного меню («Загрузить», «Сохранить» или «Сохранить изображение…») или нажать на соответствующую кнопку панели инструментов (см. табл. П.3.1).

В стандартном диалоге открытия файла необходимо выбрать нужный файл. В итоге на соответсвующей закладке («Данные», «Вейвлет» или «Результат») появляется графическое изображение анализируемого сигнала, вейвлета или результата вейвлет-анализа.


Таблица П.3.1

Панель инструментов программы WaveletAnalysis

Кнопка на панели инструментов Значение
Выход из приложения
Загрузка анализируемого сигнала из текстового файла
Загрузка вейвелета из текстового файла
Вейвлет-анализ сигнала
Сохранение результатов вейвлет-анализа в текстовый файл
Настройка программы
Просмотр диалога «О программе»

 

П. 3.4. СООБЩЕНИЯ ОПЕРАТОРУ

 

Сообщения, выдаваемые оператору, приведены в табл. П.3.2.

 

Таблица П.3.2

Сообщения оператору

Сообщение Действие программиста
Неверный формат входной строки Выбранный файл данных имеет некорректный формат. При необходимости попытаться загрузить другой файл данных
Невозможно найти файл «Resources\DialCol.txt» Результат вейвлет-анализа успешно рассчитан или загружен, но не может быть отображен в связи с тем, что не найден файл цветовой шкалы. Необходимые действия описаны в приложении 2.7

Результаты вычислений выводятся в интерфейсном элементе так, как это приведено на рис. П.3.2.

 

Результат вейвлет-анализа сигнала

Рис. П.3.2

 



ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к дипломной работе на тему:

«Система многомасштабного анализа дискретных сигналов.

Подсистема вейвлет-анализа»

 

Дипломник

Руководитель

Консультант по экономической части

Консультант по безопасности

и экологичности проекта

Нормоконтроль

Рецензент

вед. инженер-программист

Зав. кафедрой

д.т.н., профессор................................................................. Мурынов А.И.

 

 

ИЖЕВСК 2006

 


РЕФЕРАТ

 

Для написания соответствующего программного обеспечения были изучены материалы и публикации в области цифровой обработки сигналов.

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

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

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

 

 
ПЕРЕЧЕНЬ УСЛОВНЫХ ОБОЗНАЧЕНИЙ

 

МАДС – многомасштабный анализ дискретных сигналов

ПО – программное обеспечение

ОС – операционная система

ЭВМ – электронно-вычислительная машина





ВВЕДЕНИЕ

 

Данная работа посвящена вопросам многомасштабного анализа дискретных сигналов. Термин «сигнал» применяется для обозначения любого упорядоченного набора численно зафиксированной информации о каком-либо процессе, объекте, функции и т.п. Под «анализом» сигнала имеется в виду не только его чисто математическое преобразование, но и получение на основе этого преобразования выводов о специфике соответствующего процесса или объекта /1/.

Одним из методов многомасштабного анализа является вейвлет-анализ (от англ. «wave» – волна). Он используется уже более десятка лет и хорошо зарекомендовал себя в таких областях как архивация данных, медицина и биология (анализ интервалов сердцебиений, ЭКГ, последовательностей ДНК), анализ наблюдательных данных (метеорология, акустика, сейсмология) и др. /2/

Принципиально новым методом многомасштабного анализа является структурная индексация. Её суть заключается в выявлении структурных особенностей сигналов для последующего анализа этих особенностей.

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

Перед разработчиком были поставоены следующие задачи;

1) разработка модели данных подсистемы вейвлет-анализа;

2) разработка алгоритма вейвлет-анализа входного сигнала;

3) программная реализация подсистемы вейвлет-анализа;

4) интеграция подсистемы в единую систему многомасштабного анализа дискретных сигналов.

 



РАЗРАБОТКА СИСТЕМЫ МНОГОМАСШТАБНОГО АНАЛИЗА ДИСКРЕТНЫХ СИГНАЛОВ

 

Дата: 2019-04-22, просмотров: 419.