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

Reply via email to