опитвам се да внедря собствения си код за 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
is it ok?