С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
9 / 5 / 4
Регистрация: 11.12.2016
Сообщений: 166

Вейвлеты

09.02.2021, 17:29. Показов 4389. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, прошу помощи, так как не получается сделать вейвлетное преобразование

Имеется синус 3-х герц c частотой дискретизации 1000Гц, загруженный в программу и обработанный посредством PyWavelets - pywt.cwt
Мне необходимо взять ширину от 1 до 10 Гц, с дельтой 0.1
Но как мне кажется, результат не корректный

Код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
datafile = np.loadtxt("sin_3Hz_data.txt", float)
arrayofdatafile = np.array(datafile)
arrayofdatafile = arrayofdatafile.transpose()
times = arrayofdatafile[0, :]
datas = arrayofdatafile[1, :]
dt = 1 / 1000
scales = np.arange(1, 10, 0.1)
f = pywt.scale2frequency("gaus1", scales) / dt
[coefficients, frequencies] = pywt.cwt(datas, f, 'cmor1.0-0.4', dt)
 
power = (abs(coefficients)) ** 2
period = 1. / frequencies
 
fig, ax = subplots(figsize=(15, 10))
im = ax.contourf(times, scales, log2(power), extend='both',cmap="inferno")
 
show()
На картинке, насколько я понимаю, должен присутствовать максимум на частоте 3-х герц, но его там нет
Возможно кто-то может помочь

Добавлено через 6 минут
P.S Продолжительность синуса - 20 секунд, или 20к отсчетов
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.02.2021, 17:29
Ответы с готовыми решениями:

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

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

Вейвлеты в Mathcad
Ребята,помогите, пожалуйста! У меня есть гармоническая функция и вейвлет "мексиканская шляпа". График этих функция отдельно...

12
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
09.02.2021, 19:29
выложите sin_3Hz_data.txt
0
9 / 5 / 4
Регистрация: 11.12.2016
Сообщений: 166
09.02.2021, 20:33  [ТС]
u235, в архиве текстовый файл, содержащий два столбца - слева отсчет времени, а справа значение
Вложения
Тип файла: zip sin_3Hz_data.txt.zip (54.6 Кб, 11 просмотров)
0
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
09.02.2021, 20:53
Лучший ответ Сообщение было отмечено W0rtX как решение

Решение

W0rtX, у вас в 8 строке Гаусс, а в 9ой Морле. 'cmor1.0-0.4' я заменил на 'cmor7.0-1.0' и еще немного изменил вывод графиков:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import numpy as np
import pywt
from matplotlib import pyplot as plt
times=np.arange(0, 20, 0.001)
datas=np.sin(3*2*np.pi*times)
 
dt = 1 / 1000
scales = np.arange(0.1, 10, 0.01)
f = pywt.scale2frequency("cmor7.0-1.0", scales) / dt
[coefficients, frequencies] = pywt.cwt(datas, f, 'cmor7.0-1.0', dt)
 
power = (np.abs(coefficients)) 
period = 1. / frequencies
 
fig, ax = plt.subplots(figsize=(15, 10))
#im = ax.contourf(times, scales, power, extend='both',cmap="gray")
im = ax.imshow( power, aspect='auto', origin='lower', extent=[0,20, 0.1, 10])
 
 
#plt.plot(times, datas)
plt.show()
В итоге получил скейлограмму:
Миниатюры
Вейвлеты  
1
9 / 5 / 4
Регистрация: 11.12.2016
Сообщений: 166
09.02.2021, 21:12  [ТС]
u235, Большое спасибо, вейвлетами крутил уже от безысходности
0
9 / 5 / 4
Регистрация: 11.12.2016
Сообщений: 166
11.02.2021, 21:23  [ТС]
u235, прошу прощения, что не по теме, но может быть вы можете знать ответ - имееются несколько сигналов, и по каждому нужно сделать вейвлетное преобразование
Вот поэтому смотрю в сторону распаралеливания процессов - но тут незадача: время обработки сигнала последовательно меньше, чем если распаралелить
Возможно я что то не правильно делаю, но смотря примеры в интернете, вроде как все верно
Код прилагаю:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def wavelet(i):
    datas = arrayofdatafile[:, i]
    [coefficients, frequencies] = pywt.cwt(datas, f, 'cmor7.0-1.0', dt)
    #print("Graph's start")
    #a = timeit.default_timer()
    power = (np.abs(coefficients))
    #fig, ax = plt.subplots(figsize=(15, 10))
    #im = ax.imshow(power, aspect='auto', origin='lower', extent=[0, l * dt, 1, 5])
    #plt.savefig('saved' + str(i) + '.png')
    #plt.close()
    #plt.show()
    #print("Graph's complete. Time is: " + str(timeit.default_timer() - a))
 
threads = []
a = timeit.default_timer()
for i in range(0, 27):
    threads.append(threading.Thread(target=wavelet, args=(i, )))
    threads[i].start()
    threads[i].join()
 
#print("Number of processed electrode is: " + str(i))
print("Wavelet's complete. Time is: " + str(timeit.default_timer() - a))
#plt.show()
0
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
11.02.2021, 22:01
W0rtX, у вас нет распараллеливания. строка 18. запускает 0-ой поток, а строка 19 - ждет его завершения, затем запускается 1-ый поток, опять ждем его завершения...
Попробуйте заменить 16-19 строки на:

Python
1
2
3
4
5
6
for i in range(0, 27):
    threads.append(threading.Thread(target=wavelet, args=(i, )))
    threads[i].start() #старт всех потоков
 
for i in range(0, 27):
    threads[i].join()

Кстати, почему непрерывное вейвлет-преобразование, а не дискретное (оно быстрее)? Почему именно комплексный Морле?
1
9 / 5 / 4
Регистрация: 11.12.2016
Сообщений: 166
11.02.2021, 22:29  [ТС]
u235, по сути это вводные данные, если Вы знаете, как это можно еще ускорить - был бы очень признателен и премного благодарен
0
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
11.02.2021, 22:32
W0rtX, как звучит полное задание? Что есть и что нужно получить в итоге?
0
9 / 5 / 4
Регистрация: 11.12.2016
Сообщений: 166
11.02.2021, 22:40  [ТС]
u235, нужно построить вейвлетные поверхности максимально быстрым способом для нескольких сигналов

Добавлено через 2 минуты
u235, просто раньше писал на C# с такими данными, так как там это легче было сделать именно такими вводными
Цитата Сообщение от u235 Посмотреть сообщение
Кстати, почему непрерывное вейвлет-преобразование, а не дискретное (оно быстрее)? Почему именно комплексный Морле?
Но увидев, что может делать python - решил, что лучше копать в его сторону, и тут все делать легче и быстрее
0
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
12.02.2021, 07:13
W0rtX, если речь о скейлограммах, то есть модуль, специально для их быстрого построения, установка pip3 install scaleogram
См. примеры:
https://github.com/alsauve/sca... ency.ipynb
1
9 / 5 / 4
Регистрация: 11.12.2016
Сообщений: 166
26.10.2021, 11:09  [ТС]
u235, Добрый день!
Спасибо за вашу помощь, в свое время очень помогли!
Не подскажите один вопрос, для чего используется
Python
1
f = pywt.scale2frequency("cmor7.0-1.0", scales) / dt
,
Насколько я понимаю, то эта функция перерводит масштаб в частоту, но у нас уже ведь есть частоты
Python
1
scales = np.arange(0.1, 10, 0.01)
, получается, что этот код переводит частоты в - частоты?
0
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
26.10.2021, 18:22
W0rtX, не вникал в код, но scales это масштаб. А частота это обратная к нему величина для данного вейвлета.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.10.2021, 18:22
Помогаю со студенческими работами здесь

Вейвлеты на STM32F4
Почему я не могу найти информацию во вейвлет преобразованию (обработке сигналов) на STM32F4? Исходный сигнал int16 с частотой семплирования...

Получить спектр аудио сигнала используя вейвлеты
Кто знает, как получить значения спектра аудиосигнала, используя wavelet. У меня есть амплитудные значения. Но я не знаю, как получить...

Требуется изучить вейвлеты. Нужна доступная литература
Требуется изучить вейвлеты. Мною были прочитаны книги: Юкио Сато. Обработка сигналов. Первое знакомство (начинающим) Стивен В.Смит....


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru