我正在尝试在 Python 中绘制 FM 信号的 Bessel 等效项的频域。
我遇到的第一个问题是提高 FFT 的分辨率以查看较小的带宽 - 我相信我已经通过将贝塞尔波函数的总和与一个大小为阵列的两倍的大型零填充数组连接起来解决了这个问题保存波形数据。
但是,这会对 Y 轴的缩放产生影响——当我增加零填充的大小时,Y 轴的大小会下降。我可以将 Y 轴乘以什么因素来反转这个?到目前为止的实验使我陷入了死胡同...
非常感谢!
import numpy as np
import matplotlib.pyplot as plt
import math as mt
import scipy.special as sc
def bWave(fc=10000, B=1.25):
time = np.linspace(0, 0.5, 20001, True)
data = np.zeros(len(time))
retarr = np.column_stack((time,data))
Vc = 6
fm = 3
for n in range(-5,5):
for row in range(len(retarr)):
retarr[row][1] += Vc*sc.jv(n,B)*mt.cos(2*mt.pi*
(fc+n*fm)*retarr[row][0])
return retarr
FM_array = bWave()
# ------------- SIGNAL PLOT OF AM -----------------
scaling = 2 #default 2, cuts out symmetry from FFT
buffer_ratio = 1
padded_array =
np.concatenate((FM_array[:,1],np.zeros(buffer_ratio*len(FM_array[:,1])))) #pad array with zeros
Y = np.fft.fft(padded_array) #perform FFT
N = len(Y)/scaling + 1 # get FFT length (avoid reflection)
T = FM_array[1][0] - FM_array[0][0] #get time interval of FFT
fa = 1/T #sampling frequency
Xaxis = np.linspace(0, fa/scaling, N, endpoint=True) # create x axis vector from 0 to nyquist freq. (fa/2) with N values
plt.plot(Xaxis, (2.0/((N)*scaling)) * np.abs(Y[0:N])) # multiply y axis by 2/N to get actual values
plt.grid(True)
plt.show()