我有使用 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()
当我运行这个时,我得到的东西看起来像这样
这是当前绘制的比例尺并将其错误标记为图表上的频率吗?如果是这样,我如何更改此代码以使其看起来正确并使用频率。抱歉,我是编码新手,正在尝试将其用于研究
抓得好。
正如您所猜测的,频率轴颠倒了。 您可以通过查看左侧的影响锥来弄清楚这一点。
根据 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')
.