help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Help to vectorize THIS loop


From: Macy
Subject: Re: Help to vectorize THIS loop
Date: Wed, 25 Sep 2013 09:21:54 -0700

Anybody have any comments on this one?

Compare these two, which seems like they should yield similar results:
[watch for wrap]

CLOCKJITTERCOMPARE.m
%  these values are 'kind of' like what is being used
SP=20e3;
SR=200e6;
t=([1:SP]-1)/SR;
sig=.99*cos(2*pi()*t*20e6);
clkjtr=200e-15;

% actual code
dtn=clkjtr*randn(1,SP);
tb=t+dtn;

sigcn1=sig;
for i=2:(SP-1)
  if (tb(i)<t(i))
    sigcn1(i)=sig(i)-SR*(sig(i)-sig(i-1))*(t(i)-tb(i));
  else
    sigcn1(i)=sig(i)+SR*(sig(i+1)-sig(i))*(tb(i)-t(i));
  endif
endfor
%  end points, note t(1) == 0
  sigcn1(1)=sig(1)+SR*(sig(2)-sig(1))*tb(1);
%  
  sigcn1(end)=sig(end)+SR*(sig(end)-sig(end-1))*(tb(end)-t(end));

%  save original value
dtno=dtn;
dtn=SR*dtno;
%

sigcn2=sig;
idxp=dtn>0;idxp(1)=0;idxp(end)=0;
idxn=dtn<0;idxn(1)=0;idxn(end)=0;

dsigup=[0,diff(sig(2:end)),0];
dsigdn=[0,diff(sig)];
sigcn2=sig+(dsigup.*idxp+dsigdn.*idxn).*dtn;
sigcn2(1)=sig(1)+(sig(2)-sig(1))*dtn(1);
sigcn2(end)=sig(end)+(sig(end)-sig(end-1))*dtn(end);

%  restore original value
dtn=dtno;

plot(sigcn2-sigcn1);
% shouldn't this be a 'zero' line?



--- address@hidden wrote:

From: Roberto Fabio Leonarduzzi <address@hidden>
To: Macy <address@hidden>
Cc: address@hidden
Subject: Re: Help to vectorize THIS loop
Date: Mon, 23 Sep 2013 11:36:23 -0300

Hi

2013/9/23 Macy <address@hidden>

>
> sigwn=sig;
> for i=2:hugenumber-1
>   if ( tn(i)<t(i) )
>    sigwn(i)=sig(i)-( sig(i)-sig(i-1) )*SR*( t(i)-tn)i) );
>   else
>    sigwn(i)=sig(i)+( sig(i+1)-sig(i) )*SR*( tn(i)-t)i) );
>  endif
> endfor
>
> any slick ways to vectorize this?
>

How about something like:

delta_sig_back = [0 diff(sig)];
delta_sig_forw = [0 diff(sig)(2 : end) 0]
idx = tn < t;
sigwn(idx) = sig(idx) + delta_sig_back(idx) .* SR .* (t(idx) - tn(idx));
idx = tn >= t;
sigwn(idx) = sig(idx) + delta_sig_forw(idx) .* SR .* (tn(idx) - t(idx));

?

I don't have octave installed in this computer so I couldn't try it out,
but I suppose something like that could work. If you don't want the
endpoints just erase them: sigwn=sigwn(2:end-1);

HTH,
Roberto




reply via email to

[Prev in Thread] Current Thread [Next in Thread]