# Defining signals

Recall that signals are functions. Thus, both declarative and imperative approaches can be used to define signals. Consider for example an audio signal, a pure tone at 440 Hz (middle A on the piano keyboard). Recall that audio signals are functions *Sound* : *Time* → *Pressure*, where the set *Time* ⊂ *Reals* represents a range of time and the set *Pressure* represents air pressure. To define this function, we might give a declarative description as follows:

∀
*t* ∈
*Time*,

*s*(*t*) = sin(440 ×
2 π *t*)

Here, we have shortened "*Sound*" to "*s*" to be more consistent with common mathematical notation, which prefers to use single-character names for variables and functions. Such an audio signal sounds like this:

An alternative way to define a signal is to construct a model for a physical system that produces that signal. Your textbook does this in chapter 2 where it gives an example where a pure tone is defined as a solution to a differential equation that describes the physics of a tuning fork.

Giving an imperative description of such a signal is a bit trickier. Do you give the value of *s* for a particular *t*? Or for all *t*? Suppose we want the latter, which seems like a more complete definition of the function. Then we have a problem. The domain of this function may be any time interval, or all time! Suppose we just want one second of sound. Define *t* = 0 to be the start of that one second. Then the domain is [0,1]. But there are an (uncountably) infinite number of values for *t* in this range! No computer
program could provide the value of *s* for all these values of *t*.

One alternative is to provide an imperative description that has the *potential* of providing values for *s*, given any *t*. For example, we could define a Matlab function by putting the following into
an m-file named "s.m":

function y = s(t) y = sin(440*2*pi*t);

(Note that it is uncommon, and not recommended, to use single-character names for functions and variables in programs, but we do so here to maintain consistency.)
Calling this function with a value for *t* as an argument yields a value for *s*.

Another alternative is to provide a set of *samples* of the signal. For example, in Matlab, we could define a vector that gives the values of *t* that we are interested in:

t = [0:1/8000:1];

In the vector `t` there are 8001 values evenly spaced between 0 and 1, so our *sample rate* is 8000 samples per second. Then we can compute values of *s* for these values of *t* and listen to the resulting sound:

s = sin(2*pi*440*t); sound(s,8000)

The vector `s` also has 8001 elements, representing evenly spaced samples
of one second of A-440.