On 07.11.2018, at 20:57, Samuel Gougeon <[email protected]> wrote: > > Hello, > > Is there anyone here that uses to use the last filter() optional argument? > > In the example of the thread reminded below: > V = Z; > for i=2:n > V(i) = a*V(i-1) + b*Z(i); > end
In my case, a^2 + b^2 =1, if that should make any difference? Has the problem been sorted out, how to use "filter"? Heinz > the input is Z, the output is V, a and b are fixed parameters. > The filter() description tells: > >> Syntax >> ------ >> [y,zf] = filter(B, A, x [,zi]) >> >> Parameters >> ---------- >> B : real vector : the coefficients of the filter numerator in decreasing >> power order, or >> a polynomial. >> A : real vector : the coefficients of the filter denominator in >> decreasing power order, >> or a polynomial. >> x : real row vector : the input signal >> zi : real row vector of length max(length(a),length(b))-1: the initial >> condition >> relative to a "direct form II transposed" state space representation. >> The default >> value is a vector filled with zeros. > > So here i assume that zi is V(0) (so actually Z(1)). Then, how to get > [Z(1) V(2:n)] > as from the above loop? I have tried the following, without success: > y = filter(b, [1 -a], Z); > or > y = [Z(1) filter(b, [1 -a], Z(2:$), Z(1))]; > or > y = filter(b, [1 -a], Z, Z(1)*(1-b)/a); > > The zi option has no example, and unless filter() is bugged, the way zi > works/is taken into account is unclear. > > Any hint (before analyzing its hard code..)? > > Regards > Samuel > > > Le 01/11/2018 à 15:16, Samuel Gougeon a écrit : >> Le 01/11/2018 à 13:40, Samuel Gougeon a écrit : >>> Hello, >>> >>> Le 01/11/2018 à 09:27, Heinz Nabielek a écrit : >>>> Sorry, Scilab friends, I am still not fluid with vector operations. >>>> Can someone rewrite the for loop for me into something much more efficient? >>>> >>>> n=1000; >>>> Z=grand(1,n,'nor',0,1); >>>> r=0.9; >>>> V=Z; >>>> for i=2:n; >>>> V(i)=r*V(i-1)+sqrt(1-r^2)*Z(i); >>>> end; >>>> >>>> The transformation generates an autocorrelated (here rho=0.9) normal >>>> distribution V from an uncorrelated normal distribution Z and eventually I >>>> will need it for very much larger n values.... >>>> >>> >>> You may use filter(), with a feedback component (since V(i) depends on the >>> previous state V(i-1) computed at the previous step). >>> However, as shown below, a quick trial shows an initial discrepancy between >>> filter() result and yours with the explicit loop. >>> I don't know why. May be the setting for the initial condition should be >>> carefully considered/tuned... >> >> This is certainly the reason. For i=1, V(i-1) is unknown and must be >> somewhat provided. The last filter() option zi is not really documented (i >> have no time to go to the reference to get clear about how "the initial >> condition relative to a "direct form II transposed" state space >> representation." works. Trying to provide a value V(0) such that V(1)==Z(1) >> decreases the initial discrepancy by a factor 10. But it is still non zero. >> y = filter(sqrt(1-r^2), [1 -r], Z, Z(1)*(1-sqrt(1-r^2))/r); >> >> >> >> _______________________________________________ >> users mailing list >> >> [email protected] >> http://lists.scilab.org/mailman/listinfo/users > > > _______________________________________________ > users mailing list > [email protected] > http://lists.scilab.org/mailman/listinfo/users _______________________________________________ users mailing list [email protected] http://lists.scilab.org/mailman/listinfo/users
