User Tools

Site Tools


4rpl:commands:signalgenerator

This is an old revision of the document!


SignalGenerator

SignalGenerator(<-interval <-sigFrequency <-phaseShift false <-signalType) ->sigValue

Description

Computes the value for a given signal waveform and pushes it to the stack.

A function to derive the y-coordinate for a given x-co-ordiante on a graph line following one of the indicated wave patterns. Uselful to animate an object or to a given pattern over time. Could be used for instance to vary output from an emitter. Oscillating rightness of light source or beacon; Oscillating strength of an emitter over time - both of these can be thought of as a a use case for this function.

Arguments and type in order:

  1. Integer. the X coordinate in the waveform (Eg. time)
  2. Float. Frequency of the waveform
  3. Float. Phase Shift of the waveform
  4. Bool. invert the waveform
  5. Integer. Signal type (0 to 6 in types, below)

Signal types.

  • 0 = NONE
  • 1 = SINE
  • 2 = SQUARE
  • 3 = TRIANGLE
  • 4 = SAW-TOOTH
  • 5 = RANDOM
  • 6 = CONSTANT

Notes

Phase Shift

The phase difference or phase shift as it is also called of a Sinusoidal Waveform is the angle Φ (Greek letter Phi), in degrees or radians that the waveform has shifted from a certain reference point along the horizontal zero axis. In other words phase shift is the lateral difference between two or more waveforms along a common axis and sinusoidal waveforms of the same frequency can have a phase difference.

The phase difference, Φ of an alternating waveform can vary from between 0 to its maximum time period, T of the waveform during one complete cycle and this can be anywhere along the horizontal axis between, Φ = 0 to 2π (radians) or Φ = 0 to 360o depending upon the angular units used.

Examples

#  On a map with terrain of 200 in X direction and at least 150 in Z direction (3D coordinates)
# generate a sine wave of creeper across the map.
200    ->numFrames
      ->frequency (1 div (AsFloat (<-numFrames)))
0     ->phaseShift
false ->invert
1     ->signalType #sine
 
do  (<-numFrames 0)
    SignalGenerator(I <-frequency <-phaseShift <-invert <-signalType )  ->sigValue
    round (<-sigValue) 2) ->sigValue
    print3 (I " : " <-sigValue )
    SetCreeper(I 75 add (<-sigValue mul (50)) 15 true)
loop
4rpl/commands/signalgenerator.1556551151.txt.gz · Last modified: 2019/04/29 11:19 by Karsten75