Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/34: Рейтинг темы: голосов - 34, средняя оценка - 4.68
5 / 5 / 1
Регистрация: 12.04.2014
Сообщений: 35

Лабораторная работа по вейвлетам (вейвлет-преобразования)

14.06.2014, 16:43. Показов 6418. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте выполняю лабораторную работу по вейвлетам.
Задание:
Кликните здесь для просмотра всего текста
1.Построить графики функций WAVE-вейвлета и «Сомбреро». Шаг дискретизации функции выбрать самостоятельно.
2.Построить график исходной функции, которая будет подвергнута анализу. Функцию взять из первой работы.
3.Построить результат вейвлет-преобразования. Результат вейвлет-преобразования должен быть выполнен в виде двухмерной картинки. Этапы построения изображения:
a.Создать двухмерный массив с размерностью, равной размеру будущего изображения.
b.Посчитать для каждого элемента массива значение функции (1).
c.Нормализовать значения элементов массива в интервал [0,255]. Пример: минимальное значение элемента в массиве равно 0, максимальное – 2550. Тогда каждое значение элемента массива нужно умножить на коэффициент 0.1
d.Для каждого элемента массива вывести точку с нужными координатами. Яркость точки будет соответствовать нормализованному значению вейвлет-преобразования. Для простоты цвет точки задавать как серый, с цветовыми составляющими R=G=B = Value, где Value – нормализованное значение.

первые три сделал
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using System.Numerics;
using System.Drawing.Imaging;
 
namespace _2.Wavelet
{
    public partial class Form1 : Form
    {
        const int k = 200;
 
        const double Period = 2 * Math.PI;
 
        double[,] mass;
 
        double step = Period / (k - 1);
 
        Bitmap bmp = new Bitmap(k, k);
 
        public Form1()
        {
            InitializeComponent();
            mass = new double[k, k];
        }
 
        //Wave-вейвлет
        private double WAVE_wavelet(double t)
        {
            return -1 / Math.Sqrt(Period) * t * Math.Exp(-Math.Pow(t, 2) / 2);
        }
 
        private void rez_WAVE_wavelet_Click(object sender, EventArgs e)
        {
            chart1.Visible = true;
            chart2.Visible = false;
            chart3.Visible = false;
            chart1.Series[0].ChartType = SeriesChartType.Spline;
            for (double i = -Period; i <= Period; i += step)
            { 
            chart1.Series[0].Points.AddXY(i,WAVE_wavelet(i));
            }
        }
 
        //Вейвлет "Мексиканская шляпа"
        private double FHAT_wavelet(double t)
        {
            return -1 / Math.Sqrt(Period) * (Math.Pow(t, 2) - 1) * Math.Exp(-Math.Pow(t, 2) / 2);
        }
 
        private void rez_FHAT_wavelet_Click(object sender, EventArgs e)
        {
            chart1.Visible = false;
            chart2.Visible = true;
            chart3.Visible = false;
            chart2.Series[0].ChartType = SeriesChartType.Spline;
            for (double i = -Period; i <= Period; i += step)
            {
                chart2.Series[0].Points.AddXY(i, FHAT_wavelet(i));
            }
        }
 
        //Исходный график
        private double initial_chart(double j)
        {
            return Math.Cos(Math.Pow(Math.E, Math.Sin(3 * j * 0.33 )));
        }
 
        private void build_initial_chart_Click(object sender, EventArgs e)
        {
            chart1.Visible = false;
            chart2.Visible = false;
            chart3.Visible = true;
            chart3.Series[0].ChartType = SeriesChartType.Spline;
            for (double i = -Period; i <= Period; i += step)
            {
                chart3.Series[0].Points.AddXY(i, initial_chart(i));
            }
        }
   }
}

, в этом нет ничего сложного,а последнее не знаю. пока сделал некоторые предпосылки, метод по которому считается вейвлет-преобразование Название: 123.jpg
Просмотров: 460

Размер: 6.7 Кб , а также нахождение минимального и максимального значения в массиве:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//Вейвлет-преобразование
        private double wavelet_transformation(double tao, double s)
        {
            double preob = 0;
            for (double t = -Period; t <= Period; t += step)
            {
                preob += (initial_chart(t) * WAVE_wavelet((t - tao) / s));
            }
            return preob * 0.1;
        }
 
        //Поиск минимального элемента в массиве
        private void Min()
        {
            double min=0;
            for (int i = 0; i < k; i++)
            {
                for (int j = 0; j < k; j++)
                {
                    if (mass[i, j] < min)
                    {
                        min = mass[i, j]; 
                    }
                }
            }
        }
 
        //Поиск наибольшего элемента в массиве
        private void Max()
        {
            double max = 0;
            for (int i = 0; i < k; i++)
            {
                for (int j = 0; j < k; j++)
                {
                    if (mass[i, j] > max)
                    {
                        max = mass[i, j];
                    }
                }
            }
        }
подскажите пожалуйста,что делать дальше
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.06.2014, 16:43
Ответы с готовыми решениями:

Вейвлет преобразования для кардиосигналов
Нужно создать программу в matlab для вейвлет анализа экг. Есть данные экг(в блокноте) нужно отобразить данные в виде графика и выделить QRS...

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

Алгоритм непрерывного вейвлет-преобразования (НВП)
Здравствуйте. Передо мной стоит следующая задача: необходимо реализовать программу, анализирующую человеческую речь, на основе...

1
5 / 5 / 1
Регистрация: 12.04.2014
Сообщений: 35
14.06.2014, 22:34  [ТС]
сделал! может кому-нибудь поможет.
Код:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using System.Numerics;
using System.Drawing.Imaging;
 
namespace _2.Wavelet
{
    public partial class Form1 : Form
    {
        const int k = 200;
 
        const double Period = 2 * Math.PI;
 
        double[] mas_initial_chart = new double[500];
 
        double[] mass_WAVE_wavelet = new double[500];
 
        double[] mass_FHAT_wavelet = new double[500];
 
        double[,] mass = new double[500, 500];
 
        double[,] mass_drawing = new double[500,500];
 
        double step = Period / (k - 1);
 
        double max = 0;
 
        double min = 0;
 
        double coefficient = 0;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        //Wave-вейвлет
        private double WAVE_wavelet(double t)
        {
            return -1 / Math.Sqrt(Period) * t * Math.Exp(-Math.Pow(t, 2) / 2);
        }
 
        private void rez_WAVE_wavelet_Click(object sender, EventArgs e)
        {
            chart1.Visible = true;
            chart2.Visible = false;
            chart3.Visible = false;
            chart1.Series[0].ChartType = SeriesChartType.Spline;
            int x=0;
            for (double i = -Period; i <= Period; i += step)
            {
            mass_WAVE_wavelet[x] = WAVE_wavelet(i);
            chart1.Series[0].Points.AddXY(i,WAVE_wavelet(i));
            x++;
            }
        }
 
        //Вейвлет "Мексиканская шляпа"
        private double FHAT_wavelet(double t)
        {
            return -1 / Math.Sqrt(Period) * (Math.Pow(t, 2) - 1) * Math.Exp(-Math.Pow(t, 2) / 2);
        }
 
        private void rez_FHAT_wavelet_Click(object sender, EventArgs e)
        {
            chart1.Visible = false;
            chart2.Visible = true;
            chart3.Visible = false;
            chart2.Series[0].ChartType = SeriesChartType.Spline;
            int m = 0;
            for (double i = -Period; i <= Period; i += step)
            {
                mass_FHAT_wavelet[m] = FHAT_wavelet(i);
                chart2.Series[0].Points.AddXY(i, FHAT_wavelet(i));
                m++;
            }
        }
 
        //Исходный график
        private double initial_chart(double j)
        {
            return Math.Cos(Math.Pow(Math.E, Math.Sin(3 * j * 0.33 )));
        }
 
        private void build_initial_chart_Click(object sender, EventArgs e)
        {
            chart1.Visible = false;
            chart2.Visible = false;
            chart3.Visible = true;
            chart3.Series[0].ChartType = SeriesChartType.Spline;
            int n = 0;
            for (double i = -Period; i <= Period; i += step)
            {
                mas_initial_chart[n] = initial_chart(i);
                chart3.Series[0].Points.AddXY(i, initial_chart(i));
                n++;
            }
        }
 
        //Вейвлет-преобразование
        private void wavelet_transformation()
        {
            int Tao, S;
            Tao = 0;
            double little_step = (1 - 0.01) / (k - 1);
            for (double tau = -Period; tau <= Period; tau += step)
            {
                S = 0;
                for (double s = 0.01; s <= 1; s += little_step)
                {
                    for (double t = -Period; t <= Period; t += step)
 
                        mass[Tao, S] += 1.0 / Math.Sqrt(Math.Abs(s)) * initial_chart(t) * WAVE_wavelet((t - tau) / s);
                    S++;
                }
                Tao++;
            }
 
            for (int i = 0; i < k; i++)
            {
                for (int j = 0; j < k; j++)
                {
                    if (min > mass[i, j])
                    {
                        min = mass[i, j];
                    }
 
                }
            }
            
            for (int i = 0; i < k; i++)
            {
                for (int j = 0; j < k; j++)
                {
                    mass[i, j] = mass[i, j] - min;
                }
            }
            
            for (int i = 0; i < k; i++)
            {
                for (int j = 0; j < k; j++)
                {
                    if (max < mass[i, j])
                    {
                        max = mass[i, j];
                    }
 
                }
            }
            
            coefficient = 255 / max;
            for (int i = 0; i < k; i++)
            {
                for (int j = 0; j < k; j++)
                {
                    mass[i, j] = mass[i, j] * coefficient;
 
                }
            }
 
        }
 
        private void rez_drawing_Click(object sender, EventArgs e)
        {
            wavelet_transformation();
            Bitmap bmp = new Bitmap(k, k);
            this.pictureBox1.Size = new System.Drawing.Size(k, k);
            int r, g, b;
            for (int i = 0; i < k; i++)
            {
                for (int j = 0; j < k; j++)
                {
                    mass_drawing[i, j] = mass[i, j];
                    r = g = b = (int)mass_drawing[i, j];
                    bmp.SetPixel(i, j, Color.FromArgb(r, g, b));
                    pictureBox1.Image = bmp;
                }
            }
        }
    }
}

Архив с программой:
Кликните здесь для просмотра всего текста

Скрин программы:


Люблю себя <3
5
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.06.2014, 22:34
Помогаю со студенческими работами здесь

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

Как построить спектр с помощью Вейвлет преобразования?
Помогите пожалуйста как построить спектр с помощью Вейвлет преобразования например обычной синусоиды. Посмотрел встроенные функции wave и...

Кто знает о всех возможностях дискретного вейвлет преобразования (ДВП)
Всем доброго времени суток=) Не так давно передо мной встала задача : снять данные с АЦП , обработать их в режиме realtime и сделать...

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

Использование функций MatLab или Вейвлет-преобразования с подавлением шума (VisualStudio)
Не знаю в какой раздел писать, простите если что Ситуация следующая, есть код написанный в MatLab, в котором используются...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru