【发布时间】: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
这个谱图函数使用 scipy 和 pyplot:
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)
但是当我使用时:
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