非平穩信號的頻譜分析方法---(短時傅立葉變換)

   非平穩信號又稱時變信號。對這一類信號,其一階、二階統計量和功率譜的估計顯然不能簡單的使用平穩信號的估計方法,必須考慮它們的時變因素。

基本原理

   對非平穩信號,人們希望能有一種分析方法把時域分析和頻域分析結合起來,即找到一個二維函數,它既能反映信號的頻率內容,也能反映出該頻率內容隨時間變化的規律。研究這一問題的信號處理理論稱爲信號的聯合時頻分佈。其中最重要的是以Cohen類爲代表的雙線性時頻分佈,此分佈可表示爲

   

   式中是一個二維的窗函數,給定不同的窗函數可以得到不同的時頻分佈。在上式中x(t)出現了兩次,且是相乘的形式,這一特點稱爲雙線性。

       

   式中w是一個一維的窗函數,則(1)式可以簡化成如下的譜圖

          

式中

               

稱爲信號x(t)的短時傅里葉變換,它反映了信號的頻譜隨時間和頻率的分佈。

Matlab仿真分析

   生成的信號兩個LFM信號,一個頻率隨時間由小變大,另一個由大變小,中心頻率都爲150KHz。

Matlab代碼爲:

f0 = 150e3;            %定義LFM信號的中心頻率
d_f = 100e3;            %定義LFM信號的頻率變化大小
fs = 5*f0;             %定義採樣率
points = 2^15;         %採樣點數
SNR = 40;              %信噪比
 
nTs = (0:points-1)/fs;
Delta_f = (0:points-1)*fs/points;
%生成LFM信號
signal = sin(2*pi*(f0 + (d_f*fs)/(2*points)*(nTs - points/(2*fs))).*(nTs - points/(2*fs))) + ...  %頻率由小變大
         sin(2*pi*(f0 + (-d_f*fs)/(2*points)*(nTs - points/(2*fs))).*(nTs - points/(2*fs)));      %頻率由大變小                                                                    
%加入一定功率的白噪聲
signal_noise = signal + 10^(-SNR/20)*randn(1,points);
N = 2^8;                                          %截取信號片段點數
window = hanning(N);                              %窗函數類型
Noverlap = N - N/2;                               %相鄰兩段之間重疊的點數
[S,F,T] = specgram(signal_noise,N,fs,window,Noverlap);
abs_S = abs(S);
max_abs_S = max(max(abs_S));
abs_S = abs_S/max_abs_S;
log10_abs_S = 20*log10(abs_S);
[tt,ff] = meshgrid(T,F/1000);
figure;
surf(tt,ff,log10_abs_S);
xlabel('時間/s');
ylabel('頻率KHz');
zlabel('歸一化功率譜P(w,t)/dB');
string = ['短時傅里葉變換,採樣點數=',num2str(points),',LFM信號中心頻率f0=',num2str(f0/1000),...
          'KHz,信號頻率變化量d_f=',num2str(d_f/1000),'KHz,採樣率fs=',num2str(fs/1000),'KHz,信噪比SNR=',...
          num2str(SNR),'dB'];
title(string);

運行一下得到如下圖:

調整一下得到如下的俯視圖




發佈了41 篇原創文章 · 獲贊 277 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章