单音复信号的频谱图有两条暗线?

信息处理 Python 频谱图
2022-02-12 03:50:28

我正在尝试绘制我生成的复杂信号的频谱图。我已经编写了代码来生成这个信号并绘制频谱图。有用。但是我看到频谱图中存在两条暗线。我很想知道这些存在的原因。我还注意到,通过改变 NFFT,黑线往往会摇摆不定。

在此处输入图像描述

我在下面粘贴我的代码:

import matplotlib.pyplot as plt
import numpy as np
import scipy.signal as signal



def plot_spectrogram(data,NFFT,Fs,ex ):
    plt.specgram(data, NFFT=NFFT, Fs=Fs)
    plt.title("Spectrogram of data")
    plt.ylim(-Fs/2, Fs/2)
    plt.show()
    plt.close()

    if ex:
        exit()


###  Parameters
F_offset = 250000           
Fs = 1140000       

###  Generate a digital complex exponential with phase -F_offset/Fs
fc1 = np.exp(-1.0j*2.0*np.pi* F_offset/Fs*np.arange(len(x1)) )
plot_spectrogram(fc1, 512, Fs,ex=True)
1个回答

由于这是一个恒定的频谱图,您也可以对 |FFT|² 进行平均并绘制它!(可视化事物的最丰富多彩的方式并不总是最佳方式;您的信号不会随时间变化,因此您根本不需要频谱图的时间轴。)

很可能,在那个“更简单”的表示中,你会发现这个:

您的频谱图执行长度为 512 的 FFT。这不是离散复数正弦曲线周期的倍数。

因此你会看到泄漏(你已经知道这种效果了!)

但是,为了减少降低分辨率的泄漏效应,specgram默认情况下将 Hanning 窗口应用于您进行 FFT 的 512 个样本块。

该汉宁窗口导致零:

plt.plot(20*np.log10(np.abs(np.fft.fft(fc1[:512]*np.hanning(512)))))

阴谋

你去吧!