回覆列表
  • 1 # 使用者1118065681947

    關於譜能量,有這樣一種解釋,你可以試著去算一算

    訊號可以分成能量訊號與功率訊號,非週期能量訊號具有能量譜密度,是傅立葉變換的平方,功率訊號具有功率譜密度,其與自相關函式是一對傅立葉變換對,等於傅立葉變換的平方/區間長度。不能混淆。能量訊號是沒有功率譜的。

    胡廣書老師的書上找到這麼一段話,“隨機訊號在時間上是無限的,在樣本上也是無窮多,因此隨機訊號的能量是無限的,它應是功率訊號。功率訊號不滿足付裡葉變換的絕對可積的條件,因此其付裡葉變換是不存在的。如確定性的正弦函式的付裡葉變換是不存在,只有引入了衝激函式才求得其付裡葉變換。因此,對隨機訊號的頻譜分析,不再簡單的是頻譜,而是功率譜。”

    對於確定性訊號而言,裡面存在能量訊號,是沒有功率譜密度的,也存在功率訊號,是有功率譜密度的。所以訊號的頻譜與是否是確定性訊號沒有必然聯絡。

    頻譜是訊號的傅立葉變換。它描述了訊號在各個頻率上的分佈大小。頻譜的平方(當能量有限,平均功率為0時稱為能量譜)描述了訊號能量在各個頻率上的分佈大小。

    計算過程中,都是透過樣本資料的快速傅立葉變換來計算。但不同的是,訊號的頻譜是複數,包含幅頻響應和相頻響應,重複計算時的結果基本相同。 而隨機訊號的功率譜也可以對資料進行FFT,但必須計算模值的平方,因為功率譜是實數。而且換一組樣本後,計算的結果略有不同,因為隨機訊號的樣本取值不同。要得到真實的功率譜必須進行多次平均,次數越多越好。

    根據parseval定理,訊號傅氏變換模平方被定義為能量譜,即單位頻率範圍內包含的訊號能量。自然,能量跟功率有一個時間平均的關係,所以,能量譜密度在時間上平均就得到了功率譜。

    matlab實現經典功率譜估計

    fft做出來是頻譜,psd做出來是功率譜;功率譜丟失了頻譜的相位資訊;頻譜不同的訊號其功率譜是可能相同的;功率譜是幅度取模後平方,結果是個實數

    matlab中自功率譜密度直接用psd函式就可以求,按照matlab的說法,psd能實現Welch法估計,即相當於用改進的平均週期圖法來求取隨機訊號的功率譜密度估計。psd求出的結果應該更光滑吧。

    1、直接法:

    直接法又稱週期圖法,它是把隨機序列x(n)的N個觀測資料視為一能量有限的序列,直接計算x(n)的離散傅立葉變換,得X(k),然後再取其幅值的平方,併除以N,作為序列x(n)真實功率譜的估計。

    Matlab程式碼示例:

    clear;

    Fs=1000; %取樣頻率

    n=0:1/Fs:1;

    %產生含有噪聲的序列

    xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n));

    window=boxcar(length(xn)); %矩形窗

    nfft=1024;

    [Pxx,f]=periodogram(xn,window,nfft,Fs); %直接法

    plot(f,10*log10(Pxx));

    2、間接法:

    間接法先由序列x(n)估計出自相關函式R(n),然後對R(n)進行傅立葉變換,便得到x(n)的功率譜估計。

    Matlab程式碼示例:

    clear;

    Fs=1000; %取樣頻率

    n=0:1/Fs:1;

    %產生含有噪聲的序列

    xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n));

    nfft=1024;

    cxn=xcorr(xn,"unbiased"); %計算序列的自相關函式

    CXk=fft(cxn,nfft);

    Pxx=abs(CXk);

    index=0:round(nfft/2-1);

    k=index*Fs/nfft;

    plot_Pxx=10*log10(Pxx(index+1));

    plot(k,plot_Pxx);

    3、改進的直接法:

    對於直接法的功率譜估計,當資料長度N太大時,譜曲線起伏加劇,若N太小,譜的解析度又不好,因此需要改進。

    3.1、Bartlett法

    Bartlett平均週期圖的方法是將N點的有限長序列x(n)分段求週期圖再平均。

    Matlab程式碼示例:

    clear;

    Fs=1000;

    n=0:1/Fs:1;

    xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n));

    nfft=1024;

    window=boxcar(length(n)); %矩形窗

    noverlap=0; %資料無重疊

    p=0.9; %置信機率

    [Pxx,Pxxc]=psd(xn,nfft,Fs,window,noverlap,p);

    index=0:round(nfft/2-1);

    k=index*Fs/nfft;

    plot_Pxx=10*log10(Pxx(index+1));

    plot_Pxxc=10*log10(Pxxc(index+1));

    figure(1)

    plot(k,plot_Pxx);

    pause;

    figure(2)

    plot(k,[plot_Pxx plot_Pxx-plot_Pxxc plot_Pxx+plot_Pxxc]);

    3.2、Welch法

    Welch法對Bartlett法進行了兩方面的修正,一是選擇適當的窗函式w(n),並再週期圖計算前直接加進去,加窗的優點是無論什麼樣的窗函式均可使譜估計非負。二是在分段時,可使各段之間有重疊,這樣會使方差減小。

    Matlab程式碼示例:

    clear;

    Fs=1000;

    n=0:1/Fs:1;

    xn=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n));

    nfft=1024;

    window=boxcar(100); %矩形窗

    window1=hamming(100); %海明窗

    window2=blackman(100); %blackman窗

    noverlap=20; %資料無重疊

    range="half"; %頻率間隔為[0 Fs/2],只計算一半的頻率

    [Pxx,f]=pwelch(xn,window,noverlap,nfft,Fs,range);

    [Pxx1,f]=pwelch(xn,window1,noverlap,nfft,Fs,range);

    [Pxx2,f]=pwelch(xn,window2,noverlap,nfft,Fs,range);

    plot_Pxx=10*log10(Pxx);

    plot_Pxx1=10*log10(Pxx1);

    plot_Pxx2=10*log10(Pxx2);

    figure(1)

    plot(f,plot_Pxx);

    pause;

    figure(2)

    plot(f,plot_Pxx1);

    pause;

    figure(3)

    plot(f,plot_Pxx2);

  • 中秋節和大豐收的關聯?
  • 俄羅斯的陸基中程導彈都有哪些?與美國相比效能如何?