當前位置:編程學習大全網 - 源碼下載 - 如何用Matlab計算離散信號的能量和功率?

如何用Matlab計算離散信號的能量和功率?

關於光譜能量有這樣壹個解釋,妳可以試著計算壹下。

信號可以分為能量信號和功率信號。非周期能量信號有能譜密度,是傅裏葉變換的平方,而功率信號有功率譜密度,是具有自相關函數的傅裏葉變換對,等於傅裏葉變換的平方/區間長度。不能混淆。能量信號沒有功率譜。

胡光樞老師在他的書中發現了這樣壹段話,“隨機信號在時間上是無限的,在樣本上也是無限的,所以隨機信號的能量也是無限的,應該是功率信號。功率信號不滿足傅裏葉變換的絕對可積條件,所以它的傅裏葉變換不存在。比如確定性正弦函數的傅裏葉變換是不存在的,它的傅裏葉變換只能通過引入脈沖函數來獲得。因此,隨機信號的頻譜分析不再是簡單的頻譜,而是功率譜。”

對於確定性信號,有沒有功率譜密度的能量信號,也有功率譜密度的功率信號。因此,信號的頻譜與它是否是確定性信號沒有必然聯系。

以下論點來自研究論壇:

頻譜是信號的傅立葉變換。它描述了信號在不同頻率下的分布。頻譜的平方(當能量有限,平均功率為零時稱為能譜)描述了信號能量在各種頻率下的分布。

在計算過程中,通過樣本數據的快速傅立葉變換進行計算。但不同的是,信號的頻譜是復雜的,包括幅頻響應和相頻響應,重復計算時結果基本相同。隨機信號的功率譜也可以用於FFT數據,但必須計算模的平方,因為功率譜是壹個實數。而且改變壹組樣本後,計算結果略有不同,因為隨機信號的樣本取值不同。要得到真實的功率譜,需要多次平均,次數越多越好。

根據帕塞瓦爾定理,信號傅裏葉變換的模平方定義為能量譜,即單位頻率範圍內包含的信號能量。自然地,能量和功率之間存在時間平均關系,因此能譜密度隨時間平均以得到功率譜。

經典功率譜估計的matlab實現

Fft是頻譜,psd是功率譜;功率譜丟失了頻譜的相位信息;不同頻譜的信號的功率譜可能是相同的;功率譜是振幅模的平方,結果是壹個實數。

在matlab中,通過psd函數可以直接得到自功率譜密度。根據matlab,psd可以實現Welch估計,相當於用改進的平均周期圖法估計隨機信號的功率譜密度。psd獲得的結果應該更平滑。

1,直接法:

直接法又稱周期圖法,將隨機序列x(n)的N個觀測數據視為能量有限的序列,直接計算x(n)的離散傅裏葉變換得到X(k),然後取其振幅的平方除以N,作為序列x(n)的真實功率譜的估計。

Matlab代碼示例:

清晰;

fs = 1000;?%采樣頻率

n = 0:1/Fs:1;

%產生包含噪聲的序列。

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

window=boxcar(長度(xn))。?%矩形窗口

nfft = 1024;

[Pxx,f]=周期圖(xn,window,nfft,Fs);?%直接法

plot(f,10 * log 10(Pxx));2.間接方法:

在間接法中,自相關函數R(n)由序列x(n)估計,然後x(n)的功率譜由傅立葉變換估計。

Matlab代碼示例:

清晰;

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,'無偏');?%計算序列的自相關函數

CXk=fft(cxn,nfft);

pxx = ABS(CXk);

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

k = index * Fs/nfft;

plot _ Pxx = 10 * log 10(Pxx(index+1));

plot(k,plot _ Pxx);3.改進的直接法:

對於直接功率譜估計,當數據長度n過大時,會加劇譜曲線的波動,而n過小時,譜分辨率較差,需要加以改善。

3.1,巴特利特法

Bartlett平均周期圖的方法是把n個點的有限序列x(n)分成段,找到周期圖,然後平均。

Matlab代碼示例:

清晰;

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 =棚車(長度(n));?%矩形窗口

no verlap = 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 * log 10(Pxx(index+1));

plot _ Pxxc = 10 * log 10(Pxxc(index+1));

圖(1)

plot(k,plot _ Pxx);

暫停;

圖(二)

plot(k,[plot_Pxx?plot_Pxx-plot_Pxxc?plot _ Pxx+plot _ Pxxc]);3.2、韋爾奇方法

Welch方法在兩個方面修改了Bartlett方法。壹種是選擇適當的窗口函數w(n ),並在計算周期圖之前直接添加它。加窗的好處是無論什麽窗函數,譜估計都可以是非負的。第二,在分段時,分段之間可以有重疊,這樣會減少方差。

Matlab代碼示例:

清晰;

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);?%矩形窗口

window 1 =漢明(100);?%漢明窗

window 2 = blackman(100);?%布萊克曼窗口

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 * log 10(Pxx);

plot _ px 1 = 10 * log 10(pxx 1);

plot _ px x2 = 10 * log 10(px x2);

圖(1)

plot(f,plot _ Pxx);

暫停;

圖(二)

plot(f,plot _ px 1);

暫停;

圖(三)

plot(f,plot _ px x2);

  • 上一篇:超級月亮首次出現在2021。這個月亮的亮點是什麽?
  • 下一篇:股票圖型中"築底"是什麽意思?什麽又是"形態支撐"?
  • copyright 2024編程學習大全網