48969 (588621), страница 8

Файл №588621 48969 (Система многомасштабного анализа дискретных сигналов. Подсистема вейвлет-анализа) 8 страница48969 (588621) страница 82016-07-29СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 8)

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 description for Signal.

///

[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 description for Wavelet.

///

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 description for ResultUtil.

///

[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 description for Analysis.

///

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

Характеристики

Список файлов ВКР

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6374
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее