To aid the construction of signals with predetermined properties, the scipy.signal
module has a nice collection of the most frequent one-dimensional waveforms in the literature – chirp
and sweep_poly
(for the frequency-swept cosine generator), gausspulse
(a Gaussian modulated sinusoid), sawtooth
and square
(for the waveforms with those names). They all take as their main parameter a one-dimensional ndarray
representing the times at which the signal is to be evaluated. Other parameters control the design of the signal according to frequency or time constraints. Let's take a look into the following code snippet which illustrates the use of these one dimensional waveforms that we just discussed:
>>> import numpy >>> from scipy.signal import chirp, sawtooth, square, gausspulse >>> import matplotlib.pyplot as plt >>> t=numpy.linspace(-1,1,1000) >>> plt.subplot(221); plt.ylim([-2,2]) >>> plt.plot(t,chirp(t,f0=100,t1=0.5,f1=200)) # plot a chirp >>> plt.title("Chirp signal") >>> plt.subplot(222); plt.ylim([-2,2]) >>> plt.plot(t,gausspulse(t,fc=10,bw=0.5)) # Gauss pulse >>> plt.title("Gauss pulse") >>> plt.subplot(223); plt.ylim([-2,2]) >>> t*=3*numpy.pi >>> plt.plot(t,sawtooth(t)) # sawtooth >>> plt.xlabel("Sawtooth signal") >>> plt.subplot(224); plt.ylim([-2,2]) >>> plt.plot(t,square(t)) # Square wave >>> plt.xlabel("Square signal") >>> plt.show()
Generated by this code, the following diagram shows waveforms for chirp
, gausspulse
, sawtooth
, and square
:
The usual method of creating signals is to import them from a file. This is possible by using purely NumPy routines; for example, fromfile
:
fromfile(file, dtype=float, count=-1, sep='')
The file
argument may point to either a file or a string, the count
argument is used to determine the number of items to read, and sep
indicates what constitutes a separator in the original file/string. For images, we have the versatile routine, imread
in in either the scipy.ndimage
or scipy.misc
module:
imread(fname, flatten=False)
The fname
argument is a string containing the location of an image. The routine infers the type of file, and reads the data into array accordingly. In case if the flatten
argument is turned to True
, the image is converted to gray scale. Note that, in order for fromfile
and imread
to work, the Python Imaging Library (PIL) needs to be installed.
It is also possible to load .wav
files for analysis, with the read
and write
routines from the wavfile
submodule in the scipy.io
module. For instance, the following line of code reads an audio file, say audio.wav
, using the read
routine:
>>> rate,data = scipy.io.wavfile.read("audio.wav")
The command assigns an integer value to the rate
variable, indicating the sample rate of the file (in samples per second), and a NumPy ndarray
to the data
variable, containing the numerical values assigned to the different notes. If we wish to write some one-dimensional ndarray data
into an audio file of this kind, with the sample rate given by the rate
variable, we may do so by issuing the following command:
>>> scipy.io.wavfile.write("filename.wav",rate,data)
3.15.206.25