Chapter 3. Non-Periodic Signals

The signals we have worked with so far are periodic, which means that they repeat forever. It also means that the frequency components they contain do not change over time. In this chapter, we consider non-periodic signals, whose frequency components do change over time. In other words, pretty much all sound signals.

This chapter also presents spectrograms, a common way to visualize non-periodic signals.

The code for this chapter is in chap03.ipynb, which is in the repository for this book (see “Using the Code”). You can also view it at

Linear Chirp

We’ll start with a chirp, which is a signal with variable frequency. thinkdsp provides a Signal called Chirp that makes a sinusoid that sweeps linearly through a range of frequencies.

Here’s an example that sweeps from 220 to 880 Hz, which is two octaves from A3 to A5:

signal = thinkdsp.Chirp(start=220, end=880)
wave = signal.make_wave()

Figure 3-1 shows segments of this wave near the beginning, middle, and end. It’s clear that the frequency is increasing.

Figure 3-1. Chirp waveform near the beginning, middle, and end.

Before we go on, let’s see how Chirp is implemented. Here is the class definition:

class Chirp(Signal):
    def __init__(self, start=440, end=880, amp=1.0):
        self.start = start
        self.end = end
        self.amp = amp

start and end are the frequencies, in Hz, at the start and end of ...

Get Think DSP now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.