Вот моя проблема/вопрос: из выходных значений вейвлет-преобразования (комплексный спектр или производная величина, нормализованная величина или мощность) я не получаю никаких выводов об амплитудах входных сигналов. >
Так как же я могу "реконструировать"/вычислить амплитуды входных сигналов по выходным значениям вейвлет-преобразования?
Вот пример: задан сигнал, объединенный двумя синусоидами. Обе синусоидальные волны имеют одинаковую амплитуду (1,25), но разные частоты (35,0 и 75,0).
Комбинированный входной сигнал
Выполнение вейвлет-преобразования с PyWavelets с использованием сложного вейвлета Морле (b = 2,5, cf = 2,0) дает нам разложение/"реконструкцию" двух сигналов в форме масштабограммы с выборками и масштабы (последние также могут быть показаны как частоты). Цвет показывает величину, которая рассчитывается с помощью abs(complex_spectrum). Мощность сигналов также может быть показана с помощью «**2» величины, чего не делается в коде.
Скалеограмма вейвлет-преобразования
В качестве дальнейшего шага выполняется нормализация величины путем деления величины на «sqrt(scales)», чтобы равные амплитуды входных сигналов отображались как равные величины.
Скалеограмма вейвлет-преобразования с нормализованным величина
Максимальные значения величины или нормальной величины составляют 4,72 или 0,62 соответственно, поэтому значения отличаются от амплитуд (1,25) входных сигналов.
Так как же я могу «реконструировать»/вычислить амплитуды входных сигналов по выходным значениям (комплексный спектр, величина, мощность) вейвлет-преобразования?
Я предполагаю, что должно быть «масштабирование», основанное на переменных используемого вейвлета, потому что изменение центральной частоты или полосы пропускания морлета-вейвлета изменяет выходные значения преобразования. >
Вот код:
import numpy as np
import matplotlib.pyplot as plt
import pywt
samples = 1000
dt = 1.0 / 1000
ampl1 = 1.25
freq1 = 35.0
ampl2 = 1.25
freq2 = 75.0
x: np.ndarray = np.arange(0, samples) * dt
signal = ampl1 * np.sin(2 * np.pi * freq1 * x) + ampl2 * np.sin(2 * np.pi * freq2 * x)
plt.plot(x, signal)
plt.show()
scales = np.arange(1, 100)
complex_sp, frequencies = pywt.cwt(signal, scales, "cmor2.5-2.0", dt)
magnitude = abs(complex_sp)
plt.imshow(magnitude, cmap="hot", aspect="auto")
plt.colorbar(label="Magnitude")
plt.xlabel("Samples")
plt.ylabel("Scales")
plt.show()
sqrt_scales = np.sqrt(scales)
norm_magnitude = np.divide(magnitude, sqrt_scales[:,None])
plt.imshow(norm_magnitude, cmap="hot", aspect="auto")
plt.colorbar(label="normalized Magnitude")
plt.xlabel("Samples")
plt.ylabel("Scales")
plt.show()
print(np.max(magnitude))
print(np.max(norm_magnitude))
Подробнее здесь: https://stackoverflow.com/questions/793 ... -amplitude
PyWavelet: преобразовать величину в амплитуду? ⇐ Python
Программы на Python
-
Anonymous
1735475300
Anonymous
Вот моя проблема/вопрос: из выходных значений вейвлет-преобразования (комплексный спектр или производная величина, нормализованная величина или мощность) я не получаю никаких выводов об амплитудах входных сигналов. >
[b]Так как же я могу[/b] [b]"реконструировать"/вычислить амплитуды входных сигналов по выходным значениям вейвлет-преобразования?[/b]
Вот пример: задан сигнал, объединенный двумя синусоидами. Обе синусоидальные волны имеют одинаковую амплитуду (1,25), но разные частоты (35,0 и 75,0).
Комбинированный входной сигнал
Выполнение вейвлет-преобразования с PyWavelets с использованием сложного вейвлета Морле (b = 2,5, cf = 2,0) дает нам разложение/"реконструкцию" двух сигналов в форме масштабограммы с выборками и масштабы (последние также могут быть показаны как частоты). Цвет показывает величину, которая рассчитывается с помощью abs(complex_spectrum). Мощность сигналов также может быть показана с помощью «**2» величины, чего не делается в коде.
Скалеограмма вейвлет-преобразования
В качестве дальнейшего шага выполняется нормализация величины путем деления величины на «sqrt(scales)», чтобы равные амплитуды входных сигналов отображались как равные величины.
Скалеограмма вейвлет-преобразования с нормализованным величина
Максимальные значения величины или нормальной величины составляют 4,72 или 0,62 соответственно, поэтому значения отличаются от амплитуд (1,25) входных сигналов.
[b]Так как же я могу «реконструировать»/вычислить амплитуды входных сигналов по выходным значениям (комплексный спектр, величина, мощность) вейвлет-преобразования?[/b]
Я предполагаю, что должно быть «масштабирование», основанное на переменных используемого вейвлета, потому что изменение центральной частоты или полосы пропускания морлета-вейвлета изменяет выходные значения преобразования. >
Вот код:
import numpy as np
import matplotlib.pyplot as plt
import pywt
samples = 1000
dt = 1.0 / 1000
ampl1 = 1.25
freq1 = 35.0
ampl2 = 1.25
freq2 = 75.0
x: np.ndarray = np.arange(0, samples) * dt
signal = ampl1 * np.sin(2 * np.pi * freq1 * x) + ampl2 * np.sin(2 * np.pi * freq2 * x)
plt.plot(x, signal)
plt.show()
scales = np.arange(1, 100)
complex_sp, frequencies = pywt.cwt(signal, scales, "cmor2.5-2.0", dt)
magnitude = abs(complex_sp)
plt.imshow(magnitude, cmap="hot", aspect="auto")
plt.colorbar(label="Magnitude")
plt.xlabel("Samples")
plt.ylabel("Scales")
plt.show()
sqrt_scales = np.sqrt(scales)
norm_magnitude = np.divide(magnitude, sqrt_scales[:,None])
plt.imshow(norm_magnitude, cmap="hot", aspect="auto")
plt.colorbar(label="normalized Magnitude")
plt.xlabel("Samples")
plt.ylabel("Scales")
plt.show()
print(np.max(magnitude))
print(np.max(norm_magnitude))
Подробнее здесь: [url]https://stackoverflow.com/questions/79315308/pywavelet-convert-magnitude-to-amplitude[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия