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 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Расчет PywaveLet на GPU
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Как найти среднюю амплитуду графика с блуждающей базовой линией?
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Получите среднюю амплитуду аудиофайла во время его воспроизведения.
    Anonymous » » в форуме Android
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Получите среднюю амплитуду аудиофайла во время его воспроизведения.
    Anonymous » » в форуме Android
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

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