ljsr1001 发表于 2008-3-5 20:18

有个功率谱的程序,谁来解释下

clear;
t=0:1/1000:0.6;
x=sin(2*pi*100*t)+sin(2*pi*300*t);
plot(x);
figure(2);
n=1024;
y=fft(x,n);
plot(abs(y));
figure(3);
cxn=xcorr(x,'unbiased'); %计算序列的自相关函数
Pxx=abs(y);
index=0:round(n/2-1);
k=index*1000/n;
plot_Pxx=10*log10(Pxx(index+1));
plot(k,plot_Pxx);
最下面求它功率的程序不懂,谁能一句一句解释下,谢谢了

Galaxy163 发表于 2008-3-6 08:55

应该是根据自相关法计算功率谱,你可以试着根据书上的介绍来理解这段程序。

songzy41 发表于 2008-3-6 08:58

由FFT后求功率谱是最常用的方法之一,称作为周期图法。但程序中应把
plot_Pxx=10*log10(Pxx(index+1));
改为
plot_Pxx=20*log10(Pxx(index+1));
才是功率谱。因为
y=fft(x,n);      %x的频谱
Pxx=abs(y);%幅值谱
只有幅值的平方才是功率谱。上式中是取成分贝值。

qyb6688 发表于 2008-3-6 18:24

本帖最后由 wdhd 于 2016-9-9 13:17 编辑

  引用书中的一段话。
  功率谱估计总的来讲可以分成经典谱估计法与现代谱估计法。经典法实质上就是传统的傅氏分析法,它又可分成二种。
  一种是间接的方法,它先通过对自相关函数进行估计(一般都需要窗函数将自相关值加权,以减小自相关序列截段的影响),然后再通过作傅氏变换得功率谱估计值。这种方法是1958年由Blackman与Tukey提出的,简称BT PSD估计法。
  ---就是我们传统的求自相关函数,然后求其离散时间傅立叶反变换。
  另一种是直接法,它是将观察到的有限个样本数据用FFT算法作傅氏变换直接按式进行功率谱估计(不通过自相关函数的估计),这种方法称为周期图法。
  ---这就是我们一般用的对数据进行FFT然后取模的平法再除以N.
  周期图法的缺点:周期图(包括平滑后的周期图)作为功率谱估计的方法可利用FFT进行计算,因而有计算效率高的优点,在谱分辨率要求不高的地方常用这种周期图法进行谱估计。它的一个主要缺点是频率分辨率低。这是由于周期图法在计算中把观察到的有限长的N个数据以外的数据认为是零。

zhangnan3509 发表于 2008-3-6 22:05

回复 4楼 的帖子

能不能把哪本书 哪一页补充上去呢?:handshake

ljsr1001 发表于 2008-3-7 14:54

老师跟我说,x=sin(2*pi*100*t)+sin(2*pi*300*t);是确定信号,用自相关法求的是随机信号的,应该怎么改啊,求助啊:@Q :@Q

VibrationMaster 发表于 2008-3-7 19:53

确实是个问题。对于确定性信号,你就认为傅立叶谱的幅值平方就是功率谱。

ljsr1001 发表于 2008-3-7 20:28

那怎么实现呢,y=fft(x,n)后执行abs(y),然后怎么求出他的平方?我输入y*y,他告送我错误,按计算来说应该这个式子的功率应该等于1,怎么验证:@Q :@Q

qyb6688 发表于 2008-3-8 01:23

回复 8楼 的帖子

建议随便找一本MATLAB的书来看看如何求向量和矩阵的乘积或乘方

VibrationMaster 发表于 2008-3-8 07:14

1. abs(y)^2 or y.*conj(y);% 注意点乘
2. sum(abs(y/n)^2)是否接近2?

ljsr1001 发表于 2008-3-8 10:03

y.*conj(y);%只有这个成,可是ans =

1.0e+004 * 怎么那么大!
页: [1]
查看完整版本: 有个功率谱的程序,谁来解释下