PyWavelet: преобразовать величину в амплитуду?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 PyWavelet: преобразовать величину в амплитуду?

Сообщение Anonymous »

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

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • PyWavelet: преобразовать величину в амплитуду?
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Расчет PywaveLet на GPU
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Как найти среднюю амплитуду графика с блуждающей базовой линией?
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Получите среднюю амплитуду аудиофайла во время его воспроизведения.
    Anonymous » » в форуме Android
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Получите среднюю амплитуду аудиофайла во время его воспроизведения.
    Anonymous » » в форуме Android
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»