我正在尝试为plomb实现我自己的代码(因为我没有matlab 2014b),这是我的代码
function [PLS,f]=plomb(x,t);
diff=t(2)-t(1);
fs=1/diff;
x_mean=mean(x);
variance=var(x);
f=fs*(0:length(x)-1)/length(x);
part1=sum(((x-x_mean).*cos(2*pi*f*t)))^2/sum(cos(2*pi*f*t).^2);
part2=sum(((x-x_mean).*sin(2*pi*f*t)))^2/sum(sin(2*pi*f*t).^2);
PLS=(part1+part2)/(2*variance);
使用以下网站
的帮助完成http://www.mathworks.com/help/signal/ref/plomb.html?refresh=true
我已经在下面的简单正弦信号上测试了这段代码
>> t=0:0.01:2.93;
>> x=sin(2*pi*10*t);
但我收到了错误
[PLS,f]=plomb(x,t);
Error using *
Inner matrix dimensions must agree.
Error in plomb (line 7)
part1=sum(((x-x_mean).*cos(2*pi*f*t)))^2/sum(cos(2*pi*f*t).^2);
i did not get point,what i am doing incorrectly?thanks in advance
已编辑:
我已将代码更改为此
for k=1:length(x)
part1(k)=sum(((x-x_mean).*cos(2*pi*f(k)*t)))^2/sum(cos(2*pi*f(k)*t).^2);
part2(k)=sum(((x-x_mean).*sin(2*pi*f(k)*t)))^2/sum(sin(2*pi*f(k)*t).^2);
PLS=(part1+part2)/(2*variance);
end
没关系?
答案 0 :(得分:1)
似乎你需要在那里执行元素操作。所以,这样做 -
part1=sum(((x-x_mean).*cos(2*pi.*f.*t))).^2/sum(cos(2*pi.*f.*t).^2);
part2=sum(((x-x_mean).*sin(2*pi.*f.*t))).^2/sum(sin(2*pi.*f.*t).^2);
答案 1 :(得分:1)
看起来该语句试图逐个元素操作计算,但只有部分表达式正在这样做。特别是,f
和t
都是向量,但您尝试将它们与*
相乘,后者被解释为矩阵乘法。另外,你在语句中错过了.
运算符的第一个2的幂,但你似乎已经为2语句的第二个幂做了这个。
因此,您需要将两个语句修改为:
part1=sum(((x-x_mean).*cos(2*pi.*f.*t))).^2/sum(cos(2*pi.*f.*t).^2);
part2=sum(((x-x_mean).*sin(2*pi.*f.*t))).^2/sum(sin(2*pi.*f.*t).^2);