Из выходных значений вейвлет-преобразования (комплексный спектр или полученная величина, нормализованная величина или мощность) я не получаю заключения об амплитудах входных сигналов.
Как я могу восстановить/вычислить амплитуды входных сигналов по выходным значениям (комплексному спектру, величине, мощности) вейвлет-преобразования?
Пример:
Дан сигнал, объединенный двумя синусоидами. Обе синусоидальные волны имеют одинаковую амплитуду (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
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение