我正在尝试绘制我拥有的信号的连续小波变换的输出。该信号只是频率随时间降低的余弦波。我只是用它来测试绘图功能。
我有一个绘制 CWT 比例图的函数,但我正在努力选择正确的水平范围以用于我的等高线。
我想知道的:
增加级别的数量基本上只是使颜色区域之间的差异变小吗?级别越多,相邻级别之间的差异就越小?
如果您查看下面的图,您会注意到第一个图中似乎有更多不同的区域(具有更多级别)所以我认为这是一件好事。在底部图中,使用较少的级别,我们将整个大的深红色部分视为一种颜色,而不是几种不同的色调。
我感谢任何反馈/评论/答案,或者如果您发现任何错误。太感谢了!
我用来创建绘图的函数:
def plot_wavelet(ax, time2, signal, scales, waveletname = 'cmor',
cmap =plt.cm.seismic, title = '', ylabel = '', xlabel = ''):
dt=time2
coefficients, frequencies = pywt.cwt(signal, scales, waveletname, dt)
print ("coeff shape is:",coefficients.shape)
print ("frequency shape is:", frequencies.shape)
power = (abs(coefficients)) ** 2
period = frequencies
# different level lists to test
levels = [0.015625, 0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16] #option 1
#levels = [0.015625, 0.03125, 0.0625, 0.125, 0.25, 0.5, 1] #option 2
contourlevels = np.log2(levels) #convert to log2 for plotting
time=range(2048) # Sampling frequency is 2048, so this is a 1 second sample
im = ax.contourf(time, np.log2(period), np.log2(power), contourlevels, extend='both',cmap=cmap)
ax.set_title(title, fontsize=20)
ax.set_ylabel(ylabel, fontsize=18)
ax.set_xlabel(xlabel, fontsize=18)
yticks = 2**np.arange(np.ceil(np.log2(period.min())), np.ceil(np.log2(period.max())))
ax.set_yticks(np.log2(yticks)) #original
ax.set_yticklabels(yticks) #original
ax.invert_yaxis()
ylim = ax.get_ylim()
cbar_ax = fig.add_axes([0.95, 0.5, 0.03, 0.25])
fig.colorbar(im, cax=cbar_ax, orientation="vertical")
return yticks, ylim
下面两个图之间的唯一区别是使用的级别,其他一切都相同:
这是水平 = [0.015625, 0.03125, 0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16] 的图
这是级别 = [0.015625, 0.03125, 0.0625, 0.125, 0.25, 0.5, 1] 的图