【问题标题】:Total power of sine in matlabmatlab中正弦的总功率
【发布时间】:2018-10-21 14:39:15
【问题描述】:

我正在尝试使用pwelchperiodogram 来获取不同频率信号的功率。作为测试,我尝试了一个正弦:

sqrt(2)*sin(x)

它应该具有 1 的幂。但是,我的脚本在情节和总功率中显示了不同的值。我在做什么错,为什么光谱取决于样本数量N

clc;
clear all;

fs=1e6;
fn=fs/2;
N=2^12;
df=fs/N;

t=0:1/fs:(N-1)/fs;

nu0=250e3;
nu0=df*floor(nu0/df);

a=sqrt(2);
x=a*sin(2*pi*nu0*t);

[px,f]=pwelch(x,[],0,[],fs);
%[px,f]=periodogram(x,[],[],fs);

semilogy(f,px);

disp(['Total power: ',num2str(sum(px))]);

编辑:澄清我的问题: 我得到了预期的结果:

f=0:df:fn-df;    
X=fft(x);
amp=(abs(X)./N).^2;
amp=2*amp(1:N/2);
amp(1)=amp(1)/2;

plot(f,pow2db(amp));

pwelch 和 periodogram 有什么区别?

谢谢!

【问题讨论】:

    标签: matlab signal-processing


    【解决方案1】:

    pwelchperiodogram 都给出了功率谱密度。要计算 功率,您需要相对于频率积分功率谱密度。用一个和来近似积分,这意味着您需要将sum(px) 乘以频率步长:

    sum(px) * (f(2)-f(1))
    

    或者使用trapz 和两个输入来计算积分:

    trapz(f, px)
    

    在您使用pwelch 的示例中,这给出了

    >> [px,f]=pwelch(x,[],0,[],fs);
    >> sum(px) * (f(2)-f(1))
    ans =
       1.000000000000001
    >> trapz(f, px)
    ans =
       0.999999999999995
    

    还有periodogram:

    >> [px,f]=periodogram(x,[],[],fs);
    >> sum(px) * (f(2)-f(1))
    ans =
       1.000000000000000
    >> trapz(f, px)
    ans =
       1.000000000000000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多