1

我正在尝试绘制我拥有的信号的连续小波变换的输出。该信号只是频率随时间降低的余弦波。我只是用它来测试绘图功能。

我有一个绘制 CWT 比例图的函数,但我正在努力选择正确的水平范围以用于我的等高线。

我想知道的:

  1. 增加级别的数量基本上只是使颜色区域之间的差异变小吗?级别越多,相邻级别之间的差异就越小?

  2. 如果您查看下面的图,您会注意到第一个图中似乎有更多不同的区域(具有更多级别)所以我认为这是一件好事。在底部图中,使用较少的级别,我们将整个大的深红色部分视为一种颜色,而不是几种不同的色调。

我感谢任何反馈/评论/答案,或者如果您发现任何错误。太感谢了!

我用来创建绘图的函数:



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] 的图

在此处输入图像描述

4

0 回答 0