下面的matlab程式分別使用週期圖法、相關函式法以及ar譜方法計算訊號的功率譜。
% power spectrum estimated
clear all;
clc;
close all;
fs=1000; % 取樣頻率
nfft = 1024; % fft計算點數
%產生含有雜訊的序列
n=0:1/fs:1;
xn=cos(2*pi*100*n)+3*cos(2*pi*200*n)+(2*randn(size(n)));
subplot(2,2,1);plot(xn);title('加噪訊號');grid on
% 週期圖法
window=boxcar(length(xn)); %矩形窗
[psd1,f]=periodogram(xn,window,nfft,fs); %直接法
psd1 = psd1 / max(psd1);
subplot(2,2,2);plot(f,10*log10(psd1+0.000001));title('週期圖法');grid on
% 自相關法
cxn=xcorr(xn,'unbiased'); %計算序列的自相關函式
cxk=fft(cxn,nfft);
psd2=abs(cxk);
index=0:round(nfft/2-1);
k=index*fs/nfft;
psd2 = psd2 / max(psd2);
psd2=10*log10(psd2(index+1)+0.000001);
subplot(2,2,3);plot(k,psd2);title('自相關法');grid on
% ar譜
psd3 = pyulear(xn, fs, nfft);
psd3=psd3/max(psd3);
psd3 = psd3 / max(psd3);
index=0:round(nfft/2-1);
psd3=10*log10(psd3(index+1)+0.000001);
subplot(2,2,4);plot(k, psd3);title('ar譜估計');grid on;
現在就此來說是關於功率譜的幾點理解:
功率譜的資料都是相對值,他無法給出訊號的實際絕對幅值,一般只要看峰值之間的比值就行了,也可以對資料歸一化
功率譜中的峰值代表的是訊號中的週期成分,隱含的週期訊號能量要比隨機訊號大(這個一般能理解的)。比如,上面xn是
xn=cos(2*pi*100*n)+3*cos(2*pi*200*n)+(2*randn(size(n)));
其週期包括200hz及100hz,200hz的幅值比100hz大,再看功率譜圖中,清晰的體現了訊號中含有200hz和100hz的訊號。
直接法又稱週期圖法,它是把隨機序列x(n)的n個觀測資料視為一能量有限的序列,直接計算x(n)的離散傅利葉變換,得x(k),然後再取其幅值的平方,並除以n,作為序列x(n)真實功率譜的估計
間接法先由序列x(n)估計出自相關函式r(n),然後對r(n)進行傅利葉變換,便得到x(n)的功率譜估計
直接採用平均週期圖法求功率譜時,功率普形狀呈鋸齒形,譜峰點的準確位置不大好定。於是可以採用其他的方法對譜進行平滑操作,平滑化,僅僅是為了使圖形光滑,並不會使得波的本質受到歪曲和畸變。反過來說,由於不純的東西去掉了,本質的東西必然會更加顯示出來!平滑化的程度可以根據所分析的訊號,選擇合理的窗函式和頻寬!
平均週期圖法和其他方法求出的結果,引數條件取得一樣的話,可以得到完全相同的結果。
對 threadfence的一點理解
一直沒搞清楚,cuda 2.2版增加的 threadfence到底有何作用,直到今天看到sdk 3.0手冊 中的下面例子才恍然大悟.中文為我的理解,嘿嘿 乙個求和的例子 device unsigned int count 0 統計有幾個block結束的變數 shared bool islastblo...
對GBDT的一點理解
gbdt由一系列的回歸樹組成,如下圖所示 樹的深度未必都要一樣,下圖僅為示意圖 gbdt原理 針對每乙個類別訓練一系列的回歸樹,再累加每個類別回歸樹的 值得到針對每個類別的最終的 值。單獨拿乙個類別來說,訓練的過程中假設需要 的值為f xi 實際的值為yi 有loss function l yi,f...
對block的一點理解
對block的理解 block宣告的寫法 property strong,nonatomic void block void property copy,nonatomic void block void block的本質 就是oc的物件,內部也有isa指標,block是封裝了函式呼叫以及函式呼叫環...