File: operl.help

package info (click to toggle)
xoscope 2.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,772 kB
  • sloc: ansic: 5,644; sh: 1,080; xml: 281; makefile: 61
file content (45 lines) | stat: -rw-r--r-- 2,044 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

	      Arbitrary signal math with Perl functions

Variables available for your function:

$ch1    channel 1 input
$ch2    channel 2 input
$out    output: '$out = ' is assumed before your function; don't use $out
@ch1    channel 1 "memory", $ch1[0] = previous sample, $ch1[1] = one before that
@ch2    channel 2 "memory",         ... all the way to sample length
@out    output "memory", $out[0] = previous function output calculation, ...
$t      sample number, or "time", 0=left edge or trigger point
$pi     a constant: 3.14159265359, for your trigonometric convenience

                          Example functions

Functions of channel 1 (would also work for channel 2):

abs($ch1)                       # rectify (absolute value)
-$ch1                           # negate (invert)
$ch1 - $ch1[0]                  # integral or rate of change since last sample
$ch1 - $ch1[2]                  # same but over more time (3 sample periods)
$ch1 + 32                       # add a "DC offset" of 32 sample units
$t > 43 ? $ch1[43] : 0          # delay by 1 msec @ 44000 S/s = 44th sample

Functions of both channel 1 and channel 2:

$ch1 * $ch2                     # multiply 1 * 2
$ch1 / ($ch2 || 1)              # divide 1 / 2, avoiding divide by 0 error
$ch2 / ($ch1 || 1)              # divide 2 / 1
$ch1 > $ch2 ? $ch1 : $ch2       # max(1, 2)
$ch1 < $ch2 ? $ch1 : $ch2       # min(1, 2)
$ch1 + $ch2                     # sum, like the oscope builtin
$ch1 - $ch2                     # diff, like the oscope builtin
($ch1 + $ch2) / 2               # average, like the oscope builtin

Time position ($t) functions, independent of channel 1 and 2 inputs:

$t / 88 % 2 ? 64 : -64          #  250 Hz square wave (88 = 44000 / 2 /  250)
sin($t * $pi / 44) * 64         #  500 Hz    sin wave (44 = 44000 / 2 /  500)
cos($t * $pi / 22) * 64         # 1000 Hz cosine wave (22 = 44000 / 2 / 1000)

Low-pass filter: a difference equation of previous input and output:

1.899105 * $out[0] - .901531 * $out[1] + .001213 * ($ch1 + $ch1[1] + 2 * $ch1[0])