为什么我在每个子图中看到两条线?

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

我目前正在研究绘制一组信号的傅里叶变换。我目前面临的问题是,每个子图中似乎都有一条平线,我不确定其起源。每组数据只有一组 y 值,因此每个子图中应该只有一行。

这是我当前得到的图。注意每个子图底部附近的平线

这是图形生成的代码。

parsedData
变量是给定数据的二维数组。 parsedData[0] 给出时间步值,而所有后续索引都是 y 值的数组。 代码:

def GenerateFFT(parsedData,T):
    colors = ["red","green","blue","purple","orange","cyan","pink","black"]
    parsedDataY=parsedData[1:]


    print(parsedDataY[len(parsedDataY)-1])
    fig, ax = plt.subplots(len(parsedDataY),sharex=True,sharey=True)
    #FourierValues = [[] for _ in range(4)]
    for i in range(len(parsedDataY)):



        signal = np.array(parsedDataY[i],dtype=float)
        N=signal.size   
        print(f"Signal Size at i={i}: {N}")
        
        x=np.arange(30.0,49.035,.005)
        
        fourier =  np.fft.fft(signal)  
        fourierFreq = np.fft.fftfreq(n=signal.size,d=1.0/T)

        #FourierValues[i].append(fourier)

        print(np.sqrt(np.sqrt(fourier.real**2+fourier.imag**2)).tolist)
        ax[i].plot(fourierFreq,np.sqrt(fourier.real**2+fourier.imag**2),color=colors[i],linewidth=.75)
        ax[i].set_yscale("log")
        ax[i].set_xbound(lower=-10,upper=10)
    plt.setp(ax, xlim=(0,10),ylim=ax[0].get_ylim())
    fig.suptitle("Fourier Transforms of Monochromatic Wavetrains with Amplitude Modulation",fontweight="bold")
    fig.supxlabel("Frequency (Hz)",fontweight="bold")
    fig.supylabel("Amplitude (cm) on Logarithmic Scale",fontweight="bold")
    

    
    plt.show()
python numpy matplotlib fft numpy-ndarray
1个回答
0
投票

这是扭曲的频率轴。 使用 np.fft.fftshift

fourier=np.fft.fftshift(fourier)
fourierFreq=np.fftshift(fourierFreq)
© www.soinside.com 2019 - 2024. All rights reserved.