First-order lags

  • Difficulty: 003/100
  • Author: jeremy theler
  • Keywords: end_time, dt, lag, HEADER,

Whenever the special variable end_time is non-zero, wasora enters into transient mode. These examples introduce transient problems by illustrating how first-order lags can be used to filter signals.

lag.was

This example generates a signal \(r(t)\) which is zero except for \(a < t < b\), where it takes the value one. Then, the signal \(y(t)\) is computed as a first-order lag of \(r(t)\) with a characteristic time \(\tau\). The output consists of three columns containing \(t\), \(r(t)\) and \(y(t)\). By using the keyword HEADER a commented line is pre-prended to the output with a textual representation of the expressions passed to PRINT which are automatically understood by “qdp”: “https://bitbucket.org/gtheler/qdp” so a reasonable figure can be obtained with virtually no effort, as shown in terminal mimic where the output of wasora is piped to qdp.

# this is a transient problem and lasts 5 units of time
end_time = 5
# each time step is equal to 1/20th of a unit of time
dt = 1/20

# some parameters, which we define as constants
CONST a b tau
a = 1
b = 3
tau = 1.234

# signal r is equal to zero except for a < t < b
r = 0
r[a:b] = 1

# signal y is equal to signal r fitered through a lag
# of characteristic time tau
y = lag(r, tau)

PRINT t r y

# exercise: investigate how the result of the lag
# depends on the time step
$ wasora lag.was | qdp -o lag
$ 
lag.png
lag.png

compact.was

Instead of writing the long input shown in lag.was, we could have obtained the same result with a couple of lines. Indeed, the terminal shows that the output of this input is the same as the one of the previous longer example.

# the preceeding example could have been written in fewer
# lines as follows (although the SPOT rule is broken)
end_time = 5
dt = 1/20
PRINT t heaviside(t-1)-heaviside(t-3) lag(heaviside(t-1)-heaviside(t-3),1.234)
$ wasora lag.was > lag.dat
$ wasora compact.was > compact.dat
$ diff -s lag.dat compact.dat
Files lag.dat and compact.dat are identical
$ rm lag.dat compact.dat
$ 

The reported difference is due to the presence of the HEADER keyword in the first input so qdp can automatically label the bullets.

quasi-sine.was

Not only does this example illustrate the usage of a first-order lag, but also of a point-wise defined function~\(s(t)\) (more on one-dimensional functions in section ref{007-functions}). In this case, the data is interpolated using the Akima method, and end_time is set to the variable s_b which contains the last value of the one-dimensional function s (incidentally, s_a contains the first value).

FUNCTION s(t) INTERPOLATION akima DATA {
0     1
1     1+0.25
2     1-0.25
3     1+0.5
4     1-0.5
5     1+0.75
6     1-0.75
7     1+0.75
8     1-0.75
9     1+0.9
10    1-0.9
12    1
15    1
18    1    
20    1  
}

end_time = s_b

PRINT t s(t) lag(s(t),1) HEADER
$ wasora quasi-sine.was | qdp -o quasi-sine
$ 
quasi-sine.png
quasi-sine.png