[Scilab-users] circshift() : Scilab Enhancement Proposal

Samuel Gougeon sgougeon at free.fr
Wed Jun 6 21:35:27 CEST 2018


Rafael,

To me, this attempt looks not legitimate.
Indeed, the true original signal HAS a steep jump across its edges.
So, the best algorithm should  shift the signal and *keep this big slope**
**from one sample to the next*. The jump is /*at least*/ as steep as from
one sample to the next (and likely steeper). It must not be broadened.
There is no reason to interpolate and then decrease the slope.
Is there?

IMO, hybridating DFT and interpolation is not promising, and
DFT looks more powerful. So, to me, now the question is mainly:
with symetrization, versus with damping.

Read you soon
Samuel

Le 02/06/2018 à 15:23, Rafael Guerra a écrit :
> The previous fractional shift code was still not handling properly the endpoints.
> Herein an improvement.
> Fourier is still used but the sample laying between end and start points is interpolated.
>
> // START OF CODE
> // Circular fractional shift (R.Guerra, rev1, 02-Jun-2018)
>
> function v=cfshift(y, s)
>      // y: 1D series values
>      // s: shift, decimal number of samples
>      // v: y series shifted by s samples
>      N0 = length(y);
>      y2 = [y y($:-1:1)]; // make input even and continuous
>      N = length(y2);
>      m = N/2;
>      dw = -%i*2*%pi/N;
>      ix1 = 1:m;
>      ix = [0, ix1, -ix1(m-1:-1:1)];
>      s = modulo(s,N0);
>      lph = exp(ix*dw*s);
>      v0 = real((ifft(fft(y2).*lph)));
>      n0 = floor(s);
>      xi = s - n0;
>      yi = y(1) + xi*(y($)-y(1)); //interpolates sample between end and start
>      if n0>=0 then
>         v = [v0(N0+1:N0+n0) yi v0(n0+2:N0)];
>      else
>         v = [v0(1:N0+n0) yi v0(N+n0+2:N)];
>      end
> endfunction
>
> clf
> n = 30;  // number of input samples
> x = 1:n;  // domain of the series, with unit sampling rate
> sn = -33;  // ex.1: negative integer shift (modulo(sn,n) = -3)
> sp = 10.5; // ex.2: positive fractional shift
> y = cos(1.8*%pi*(x-10)/n); // input series, discontinuous at endpoints
>
> vi = cfshift(y, sn);
> vf = cfshift(y, sp);
>
> plot(x,y,'blacko',x,y,'black--',x,vi,'bo',x,vi,'b--',x,vf,'ro',x,vf,'r--');
> xgrid
> title("Original series (black), with circular integer shift = " + string(sn) + " (blue) and circular fractional shift = " + string(sp) +" (red)", "fontsize",4);
> gca().data_bounds = [0.5,-1.1;n+0.5,1.1]
> gca().tight_limits="on";
>
> // END OF CODE
>
> Regards,
> Rafael
>
>
> _______________________________________________
> users mailing list
> users at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/users


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20180606/b810172c/attachment.htm>


More information about the users mailing list