2015-04-18 53 views
0

我有一個audiosignal(130k樣本值),並想用相同數量的樣本創建其PSD。 (必須做一些自適應預/去加重)Matlab - 與信號長度相同的PSD?

所以我的問題是:這是可能的,如果是的話,怎麼樣?

我試圖serveral的方式,但都以失敗告終.. 第一次嘗試(信號的使用自相關和事後傅立葉變換,這是我敢肯定,唯一的辦法就應該從理論上工作):

[y,fs]=audioread('test.wav'); 
N=length(y); 
r=xcorr(y); 
fft(r,length(y)) 

另一個方式將使用:

[pyy,f]=pwelch(y,[],[],[],fs) 

但在這種情況下pyy的長度是不正確的。 而且最後我發現這一點:

N=length(y); 
    bin_vals=0:N-1; 
    fax_Hz= bin_vals*fs/N; 
    N_2=ceil(N/2); 
    pyy=fft(y).*conj(fft(y)); 

但是,如果我理解正確的代碼它給我y和不功率譜密度的功率譜。

我對此感到非常沮喪,並對任何形式的幫助表示感謝!

+0

克勞斯,我的回答對你有幫助嗎? –

回答

0

psd的頻率分辨率取決於窗口大小。得到一個正確的PSD評估和最大化窗口長度最簡單的方法是

[pyy,f]=pwelch(y,length(y),[],[],fs) 

在這種情況下,你會得到一個PSD是一半,只要你的信號。這是最大的,因爲(假設你的信號是實值的),負頻率內容與正頻率內容相同,這意味着從-fs/2到+ fs/2的完整psd是鏡像對稱的,所以它沒有任何意義使用負面部分。

但是,我不認爲這個估計是非常有用的。 psd估計大致分佈爲具有2d自由度的縮放卡方隨機變量,其中d是估計平均的窗口單個估計的數量。對於最大分辨率,1窗口估計,因此它是具有兩個自由度的縮放的卡方隨機變量。對於這樣的隨機變量,估計誤差與估計本身的大小相同,這意味着這樣的psd估計基本上是無用的。