信號可以分為能量信號和功率信號。非周期能量信號有能譜密度,是傅裏葉變換的平方,而功率信號有功率譜密度,是具有自相關函數的傅裏葉變換對,等於傅裏葉變換的平方/區間長度。不能混淆。能量信號沒有功率譜。
胡光樞老師在他的書中發現了這樣壹段話,“隨機信號在時間上是無限的,在樣本上也是無限的,所以隨機信號的能量也是無限的,應該是功率信號。功率信號不滿足傅裏葉變換的絕對可積條件,所以它的傅裏葉變換不存在。比如確定性正弦函數的傅裏葉變換是不存在的,它的傅裏葉變換只能通過引入脈沖函數來獲得。因此,隨機信號的頻譜分析不再是簡單的頻譜,而是功率譜。”
對於確定性信號,有沒有功率譜密度的能量信號,也有功率譜密度的功率信號。因此,信號的頻譜與它是否是確定性信號沒有必然聯系。
以下論點來自研究論壇:
頻譜是信號的傅立葉變換。它描述了信號在不同頻率下的分布。頻譜的平方(當能量有限,平均功率為零時稱為能譜)描述了信號能量在各種頻率下的分布。
在計算過程中,通過樣本數據的快速傅立葉變換進行計算。但不同的是,信號的頻譜是復雜的,包括幅頻響應和相頻響應,重復計算時結果基本相同。隨機信號的功率譜也可以用於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);