小波变换图不正确。不确定如何修复

问题描述 投票:0回答:1

我有使用 morlet 波进行小波变换的代码。我正在使用 pandas 数据框,其中有 4 个肌电图列。这是我的代码

import numpy as np
import matplotlib.pyplot as plt
import pywt

# List of column names for which you want to generate the Morlet wavelet transform
columns_to_process = ['VL_R', 'VM_R', 'VM_L', 'VL_L']

# Parameters for the Morlet wavelet transform
fs = 100  # Sample rate of EEG data
freqs = np.arange(1, 50, 1)  # Adjust the frequency range as needed
scales = fs / freqs  # Scales for Morlet wavelets

# Create subplots for each column
num_columns = len(columns_to_process)
fig, axs = plt.subplots(num_columns, 1, figsize=(10, 4 * num_columns))

for i, column in enumerate(columns_to_process):
    # Apply a moving average for smoothing 
    smoothed_data = df_cleaned[column].rolling(window=10).mean()

    # Generate Morlet wavelet transform
    coefficients, frequencies = pywt.cwt(smoothed_data, scales, 'morl')

    # Plot Morlet wavelet transform
    im = axs[i].imshow(np.abs(coefficients), extent=[0, len(smoothed_data)/fs, freqs.min(), freqs.max()], aspect='auto', cmap='jet')
    axs[i].set_title(f'{column} Morlet Wavelet Transform')
    axs[i].set_ylabel('Frequency [Hz]')
    axs[i].set_xlabel('Time [sec]')

    # Add colorbar
    cbar = plt.colorbar(im, ax=axs[i])
    cbar.set_label('Magnitude')

plt.tight_layout()
plt.show()

当我运行这个时,我得到的东西看起来像这样

enter image description here

这是当前绘制的比例尺并将其错误标记为图表上的频率吗?如果是这样,我如何更改此代码以使其看起来正确并使用频率。抱歉,我是编码新手,正在尝试将其用于研究

graphing wavelet-transform pywavelets
1个回答
0
投票

抓得好。

正如您所猜测的,频率轴颠倒了。 您可以通过查看左侧的影响锥来弄清楚这一点。

根据 the mathworks 文档 [边缘效应伪影]是尺度图中由拉伸小波延伸超出观察间隔边缘的区域产生的效应。频率越低,小波拉伸得越多,影响锥就越宽:因此低频应该出现在左上角。

您可以通过将 imshow 中的

origin
参数从默认的
upper
更改为
lower
来解决此问题:

im = axs[i].imshow(np.abs(coefficients), extent=[0, len(smoothed_data)/fs, freqs.min(), freqs.max()], aspect='auto', cmap='jet', origin = 'lower')
.

© www.soinside.com 2019 - 2024. All rights reserved.