【问题标题】:Why am i getting doubled frequency for chirp spectrogram为什么啁啾频谱图的频率加倍
【发布时间】:2020-10-27 18:14:32
【问题描述】:

我编写了这段代码来生成线性 fmcw 啁啾声:

def generate_fmcw(BW, Tc, Fs, initial_phase=0, num_chirps=2, delay=0):
        t = np.arange(0, Tc-1/Fs, 1 / Fs)
        nsamples = len(t)
        w = 2 * pi * np.linspace(0, BW, nsamples)
        return np.tile(np.cos(w * (t-delay) + initial_phase), num_chirps)

使用时:

BW = 1e6
Tc = 2e-3
Fs = 2e6
num_chirps = 1

这个谱图函数使用 scipypyplot:

import matplotlib.pyplot as plt
from scipy import signal

def display_spectrogram(s,fs):
    f, t, Sxx = signal.spectrogram(s, fs,mode='magnitude')
    plt.pcolormesh(t, f, Sxx)
    plt.ylabel('Frequency [Hz]')
    plt.xlabel('Time [sec]')
    plt.show()

我得到了一些欠采样行为:

a = generate_fmcw(BW, Tc,Fs,num_chirps=1)
display_spectrogram(a,Fs)

undersampled fmcw chirp

但是当我使用时:

Fs = 4e6

我得到了我想要的双倍最大频率(这是 BW): double frequency

为什么我会出现这种奇怪的行为?我根据奈奎斯特定理使用正确的采样频率...

【问题讨论】:

  • 你知道scipy.signal.chirp吗?
  • 要创建线性啁啾,cos 的参数必须是时变频率的积分。另一种说法是:对于函数 θ(t),cos(θ(t)) 的瞬时频率为 θ'(t)(θ(t) 的导数)。你的表达式大致是c*t*(t-d) + i,它的导数是2*c*t - c*d,因此频率加倍。只需在您的表达式中添加 0.5 的附加因子即可。
  • 查看我的第二条评论。
  • 谢谢先生!你帮了我很多!请将此作为答案,以便我将其标记为正确!

标签: python scipy signal-processing spectrogram


【解决方案1】:

要创建诸如线性啁啾之类的时变频率,cos 的参数必须是时变频率的积分。另一种说法是:对于函数 θ(t),cos(θ(t)) 的瞬时频率是 θ'(t)(θ(t) 的导数)。你的表达式基本上相当于c*(t-d)**2 + i,它的导数是2*c*t - c*d,因此频率加倍。解决的办法是调整cos的参数,使表达式的导数就是想要的时变频率。

另外,您可能对scipy.signal.chirp 感兴趣。

【讨论】:

    猜你喜欢
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    相关资源
    最近更新 更多