日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

线性调频信号及仿真[python]

發(fā)布時間:2023/12/31 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性调频信号及仿真[python] 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

線性調(diào)頻信號及仿真

線性調(diào)頻(LFM)是一種不需要偽隨機編碼序列的擴展頻譜調(diào)制技術。由于線性調(diào)頻信號占用的頻帶寬度遠大于信息帶寬,所以也可以獲得很大的系統(tǒng)處理增益。線性調(diào)頻信號又稱鳥聲(Chirp)信號,因為其頻譜帶寬落于可聽范圍,則聽若鳥聲,所以又稱Chirp擴展頻譜(CSS)技術。
啁啾(Chirp)是指頻率隨時間而改變(增加或減少)的信號。其名稱來源于這種信號聽起來類似鳥鳴的啾聲。
在水聲通信中,利用LFM作為前導信號,用于檢測同步。在瀏覽網(wǎng)上諸多文章后做如下匯總。


瞬時頻率

直觀上,瞬時頻率為相位的微分。

當有一信號x(t)=Asin(?(t)x(t)=Asin(\phi(t)x(t)=Asin(?(t),其瞬時頻率f(t)f(t)f(t)可表示為:
f(t)=12πd?2(t)dt(1)f(t)=\frac{1}{2\pi}\frac{d_{\phi}2(t)}{dt} \tag{1}f(t)=2π1?dtd??2(t)?(1)
對式(1)進行再次微分,則可表示頻率變化率k(t)k(t)k(t):
k(t)==12πd?22(t)dt2(2)k(t)==\frac{1}{2\pi}\frac{d^2_{\phi}2(t)}{dt^2} \tag{2}k(t)==2π1?dt2d?2?2(t)?(2)

chirp信號

因為定義了chirp信號是頻率隨時間而改變(增加或減少)的信號,則有

線性chirp信號

瞬時頻率f(t)f(t)f(t)是呈線性變化,f(t)=f0+kt,k=f1?f0T(1)f(t)=f_0+kt , k=\frac{f_1-f_0}{T}\tag{1}f(t)=f0?+kt,k=Tf1??f0??(1)f0f_0f0?為起始頻率,f1f_1f1?為最終頻率,TTT為從f0f_0f0?變化到f1f_1f1?所經(jīng)歷的時間,
相位和頻率的之間的關系為:?(t+Δt)=?(t)+2πf(t)Δt(2)\phi(t+\Delta t)=\phi (t)+2\pi f(t)\Delta t \tag{2}?(t+Δt)=?(t)+2πf(t)Δt(2)?′(t)=2πf(t)(3)\phi^{'}(t)=2\pi f(t)\tag{3}?(t)=2πf(t)(3)因此對于線性chirp信號,相位可以表達為:
?(t)=?0+2π∫0tf(t)dt(4)\phi(t)=\phi_{0}+2\pi\int_{0}^{t} f(t) dt\tag{4}?(t)=?0?+2π0t?f(t)dt(4)將式(1)帶入式(4)?(t)=?0+2π∫0t(f0+kt)dt(5)\phi(t)=\phi_{0}+2\pi\int_{0}^{t} (f_0+kt) dt\tag{5}?(t)=?0?+2π0t?(f0?+kt)dt(5)?(t)=?0+2π(f0t+k2t2)(6)\phi(t)=\phi_{0}+2\pi (f_0t+\frac{k}{2}t^2) \tag{6}?(t)=?0?+2π(f0?t+2k?t2)(6)?0\phi_0?0?為初始相位(t=0),故,正弦線性chirp對應的時域函數(shù)為:
x(t)=sin[(?0+2π(f0t+k2t2)](7)x(t)=sin[(\phi_0+2\pi(f_0t+\frac{k}{2}t^2)]\tag{7}x(t)=sin[(?0?+2π(f0?t+2k?t2)](7)

使用python完成以上仿真

import matplotlib.pyplot as plt import numpy as npt=np.arange(0,5,0.001) x = np.sin(2 * np.pi * (0.1 + t)* t)plt.plot(t, x) plt.xlabel('時間') plt.ylabel('振幅') plt.title('線性chirp仿真') plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.show()

chirp信號數(shù)學表達

正弦線性chirp對應的時域函數(shù)為:
x(t)=sin[(?0+2π(f0t+k2t2)](8)x(t)=sin[(\phi_0+2\pi(f_0t+\frac{k}{2}t^2)]\tag{8}x(t)=sin[(?0?+2π(f0?t+2k?t2)](8)
或者表達為:
x(t)=exp(j2π(f0t+12kt2))(9)x(t)=exp(j2\pi(f_0t+\frac{1}{2}kt^2))\tag{9}x(t)=exp(j2π(f0?t+21?kt2))(9)
一般的仿真中使用式(9)較多。

Python中的chirp信號函數(shù)

在python中可使用scipy.signal.chirp函數(shù)產(chǎn)生chirp信號。

scipy.signal.chirp(t, f0, t1, f1, method=‘linear’, phi=0, vertex_zero=True)
掃頻余弦發(fā)生器
t:評估波形的次數(shù) 數(shù)組
f0:時間t=0時的頻率(單位Hz)浮點型
t1:指定f1的時間 浮點型
f1:t1時刻波形的頻率(單位Hz)浮點型
method : 可選擇{‘linear’, ‘quadratic’, ‘logarithmic’, ‘hyperbolic’},
掃頻方式,默認為線性
phi:相位偏移,單位為度。默認值為0 浮點型
vertex_zero 只在quadratic模式下使用,它決定了拋物線的頂點是t=0還是t=t1
默認函數(shù)cos(phase+(π/180)??)cos(phase + (\pi/180)*\phi)cos(phase+(π/180)??)

from scipy.signal import chirp, spectrogram import matplotlib.pyplot as plt import numpy as np t = np.linspace(0, 10, 5001) w = chirp(t, f0=1, f1=15, t1=10, method='linear') plt.plot(t, w) plt.title("線性Chirp, f(0)=1, f(10)=15") plt.xlabel('時間(s)') plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.show() 同時通過一下代碼分析時間和頻率的關系可視化。 from scipy import signal import matplotlib.pyplot as plt from scipy.signal import chirp import numpy as npT=np.linspace(0, 10, 5001) X = chirp(T, f0=1, f1=15, t1=10, method='linear')f, t, S = signal.spectrogram(X) plt.pcolormesh(t, f, S) plt.ylabel('Frequency [Hz]') plt.xlabel('Time [sec]') plt.show() 可以看出為一直線。

較為詳細的chirp信號Python代碼實現(xiàn)

import numpy as np import matplotlib.pyplot as plt######################## T = 10e-6 #線性調(diào)頻信號時間長度 BW = 30e6 #線性調(diào)頻信號調(diào)頻帶寬 K = BW/T #調(diào)頻斜率 Fs_LFM = 2*BW #采樣頻率 Ts = 1/Fs_LFM N = int(T/Ts) t = np.linspace(-T/2,T/2,N) st_LFM = np.cos(np.pi*K*np.power(t,2))plt.subplot(311) plt.plot(t*1e6,st_LFM) plt.xlabel('時間(us)') plt.ylabel('振幅(W)') plt.title('時域LFM信號')plt.subplot(312) freq = np.linspace(-Fs_LFM/2,Fs_LFM/2,N) sf_LFM = np.fft.fftshift(np.fft.fft(st_LFM)) plt.plot(freq*1e-6,abs(sf_LFM.real)) plt.xlabel('頻率(MHz)') plt.ylabel('振幅(W)') plt.title('線性調(diào)頻信號的實部頻譜幅度')plt.subplot(313) st_complex = np.exp(1j*np.pi*K*np.power(t,2)) sf_complex = np.fft.fftshift(np.fft.fft(st_complex)) plt.plot(freq*1e-6,abs(sf_complex)) plt.xlabel('頻率(MHz)') plt.ylabel('振幅(W)') plt.title('線性調(diào)頻信號的復部頻譜幅度')fig = plt.gcf() plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.show()

參考文檔

[1]適合初學者的 chirp 理解與推導
[2]scipy.signal.chirp函數(shù)
[3]Chirp信號基礎知識及matlab實現(xiàn)

總結

以上是生活随笔為你收集整理的线性调频信号及仿真[python]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。