Matlab - 与信号长度相同的PSD?

时间:2015-04-18 13:51:35

标签: matlab

我有一个音频信号(130k样本值),并希望用相同数量的样本创建其PSD。 (必须采用自适应预/去加重措施)

所以我的问题是:这是可能的,如果是的话,怎么样?

我尝试了几种方法,但都失败了.. 首先尝试(使用信号的自相关,然后使用四重变换,这是我确定理论上应该有效的唯一方法):

[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的功率谱,而不是功率谱密度。

我对此感到非常沮丧,并感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

psd的频率分辨率取决于窗口大小。获得正确的psd估计和最大化窗口长度的最简单方法是

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

在这种情况下,你会得到一个psd,它的长度是信号的一半。这是最大值,因为(假设您的信号是实值),负频率内容与正频率内容相同,这意味着从-fs / 2到+ fs / 2的完整psd是镜像对称的,因此没有任何意义使用负面部分。

但是,我不认为这个估计非常有用。 psd估计大致分布为具有2d自由度的标度卡方随机变量,其中d是估计值被平均的窗口单个估计的数量。对于最大分辨率,1个窗口估计,因此它是具有两个自由度的缩放卡方随机变量。对于这样的随机变量,估计的误差与估计本身的大小相同,这意味着这样的psd估计基本上没用。