import matplotlib.pyplot as plt
import numpy as np
import math
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False#用來正常顯示負(fù)號(hào)#信號(hào)持續(xù)時(shí)間T=7.24us,信號(hào)帶寬B=5.8MHz,將過采樣率設(shè)為5是為了更清晰地觀測(cè)信號(hào)波形
T =10e-6# 脈沖持續(xù)時(shí)間
B =15e6# 脈沖帶寬
K = B/T # 調(diào)頻率
ratio =5# 過采樣率
Fs = ratio*B # 采樣頻率
dt =1/Fs # 采樣間隔
N = math.ceil(T/dt)# 采樣點(diǎn)數(shù)t = np.arange((0-N/2)/N*T,(N-N/2)/N*T,dt)# 時(shí)間軸
st0 = np.exp(1j*math.pi*K*np.multiply(t-T/5, t-T/5))# 生成基本信號(hào)
space1 = np.zeros(round(N/5))# 生成空信號(hào)
space2 = np.zeros(N)# 生成空信號(hào)
st =[space1,st0,space2,st0,space2,st0,space1]#實(shí)際信號(hào)
st =[y for x in st for y in x]
N1 =len(st)
f = np.linspace((0-N1/2)/N1*Fs,(N1-N1/2)/N1*Fs,N1)# 頻率軸
space = np.zeros(N1-len(st0))
Sf = np.fft.fftshift(np.fft.fft(st))# FFT
a = np.conj(np.flip(st0))
b = space
e =[a,b]#補(bǔ)0
e =[y for x in e for y in x]
Hf1 = np.fft.fftshift(np.fft.fft(e))# 方式1的匹配濾波器:時(shí)間反褶后取復(fù)共軛,計(jì)算N點(diǎn)補(bǔ)零DFTa = st0
b = space
e =[a,b]#補(bǔ)0
e =[y for x in e for y in x]
Hf2 = np.fft.fftshift(np.conj(np.fft.fft(e)))# 方式2的匹配濾波器:補(bǔ)零后計(jì)算DFT,對(duì)結(jié)果取復(fù)共軛
Hf3 = np.exp(1j*math.pi*np.multiply(f,f)/K)# 方式3頻域匹配濾波器Out1 = np.fft.ifft(np.fft.ifftshift(Sf*Hf1))
Out2 = np.fft.ifft(np.fft.ifftshift(Sf*Hf2))
Out3 = np.fft.ifft(np.fft.ifftshift(Sf*Hf3))plt.figure(1)
plt.subplot(4,1,1)
plt.plot(np.real(st))
plt.axis('tight')
plt.title('(a)輸入陣列信號(hào)的實(shí)部')
plt.ylabel('幅度')
plt.subplot(4,1,2)
plt.plot(np.abs(Out1))
plt.axis('tight')
plt.title('(b)方式1的匹配濾波輸出')
plt.ylabel('幅度')
plt.subplot(4,1,3)
plt.plot(np.abs(Out2))
plt.axis('tight')
plt.title('(c)方式2的匹配濾波輸出')
plt.ylabel('幅度')
plt.subplot(4,1,4)
plt.plot(np.abs(Out3))
plt.axis('tight')
plt.title('(d)方式3的匹配濾波輸出')
plt.xlabel('時(shí)間(采樣點(diǎn))')
plt.ylabel('幅度')
plt.show()