我有一个音频信号(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的功率谱,而不是功率谱密度。
我对此感到非常沮丧,并感谢任何帮助!
答案 0 :(得分:0)
psd的频率分辨率取决于窗口大小。获得正确的psd估计和最大化窗口长度的最简单方法是
[pyy,f]=pwelch(y,length(y),[],[],fs)
在这种情况下,你会得到一个psd,它的长度是信号的一半。这是最大值,因为(假设您的信号是实值),负频率内容与正频率内容相同,这意味着从-fs / 2到+ fs / 2的完整psd是镜像对称的,因此没有任何意义使用负面部分。
但是,我不认为这个估计非常有用。 psd估计大致分布为具有2d自由度的标度卡方随机变量,其中d是估计值被平均的窗口单个估计的数量。对于最大分辨率,1个窗口估计,因此它是具有两个自由度的缩放卡方随机变量。对于这样的随机变量,估计的误差与估计本身的大小相同,这意味着这样的psd估计基本上没用。