我寻求一种数值方法来计算时变信号V(t)的边带谱,使用:
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import hilbert, chirp
def ltrain(x, c, amp, gamma):
""" Return lorentzian pulse train at x0 with HWHM sigma """
fittrain = np.array(np.ones(len(x))*+c)
for li in range(1,500,1):
fittrain += np.array(amp/(1+ (np.power(((x-((li-200)*1/6))/(0.5*gamma)),2))))
fitmin = np.min(fittrain)
return fittrain-fitmin
popt = [-0.6131588, 1.40610615, 0.07610384]
duration = 1.0
fs = 10000.0
samples = int(fs*duration)
t = np.arange(samples) / fs
fitfn = ltrain(t, popt[0],popt[1], popt[2])
signal = fitfn
#signal = np.cos(24*t)
analytic_signal = hilbert(signal)
amplitude_envelope = np.abs(analytic_signal)
instantaneous_phase = np.unwrap(np.angle(analytic_signal))
instantaneous_frequency = (np.diff(instantaneous_phase) / (2.0*np.pi) * fs)
fig = plt.figure()
ax0 = fig.add_subplot(111)
ax0.plot(t, analytic_signal, label='Analytical signal')
hilbert_trafo = np.imag(analytic_signal)
ax0.plot(t, hilbert_trafo, label='Hilbert Transform')
#ax0.plot(t, np.real(analytic_signal), label='Original Signal')
ax0.plot(t, (signal)/(hilbert_trafo), label='x(t)/x_H (t)')
ax0.set_ylim([-2,2])
#ax0.plot(t, instantaneous_phase, label='Instantanous Phase')
#ax0.plot(t, amplitude_envelope, label='Envelope')
ax0.set_xlabel("Time")
ax0.legend()
plt.tight_layout()
我想使用python函数(如hilbert变换的FFT)或通过直接数值求解二重积分来获得任意周期脉冲的边带谱(在本例中,f>;0为指数衰减,否则我定义的脉冲为0)。 其结果应该是这样的绘图或曲线(左绘图时间,右绘图频率分量在第一exp(-i phi(t))公式的频谱上定义):
目前没有回答
相关问题 更多 >
编程相关推荐