Oscillator and Signal Generator

A simple command-line function for generating standard waveforms, click trains and noise bursts.
3.3K Downloads
Updated 15 Oct 2015

View License

Given a duration and a frequency, this function can rapidly generate signals of different waveform types. The user may also optionally gate the signal on and off with a raised cosine ramp, as well as specify the starting phase and/or sample frequency.

oscillator(wavetype,duration,frequency)

Input arguments:

wavetype (case insensitive string):
'Sinusoid'
'Triangle'
'Square'
'Sawtooth'
'Reverse Sawtooth'
'Linear Sweep'
'Log Sweep'
'FM signal' or 'fm'
'Click Train' or 'click'
'White Noise' or 'white'
'Octave Band' or 'octave'
'Half Octave' or 'half'
'Third Octave' or 'third'
'Quarter Octave' or 'quarter'
'Brown Noise' or 'brown'
'Pink Noise' or 'pink'
'Blue Noise' or 'blue'
'Violet Noise' or 'violet'
'Grey Noise' or 'grey'
'Speech Noise' or 'speech'

duration (in seconds)

frequency (in Hz)
NOTE: linear and log sweeps require [start stop] frequency vector
'fm signals' require a num_samples-long vector of frequencies.

Optional input arguments:
oscillator(wavetype,duration,frequency,gate,phase,sample_freq)
gate (in seconds): duration of a raised cosine on/off ramp
phase (in radians): starting phase of the waveform.
sample_rate (in samples): 44100 is default, custom rates are possible

Examples:

wave = oscillator('Sinusoid',1,1000); % simple pure tone at 1000 Hz.
wave = oscillator('Sawtooth',2,440); % 2 second sawtooth at 440 Hz.
wave = oscillator('Pink Noise',1); % 1 second of pink (1/F) noise
wave = oscillator('Linear Sweep',2,[440 880]); % linear sweep from 440 to 880 Hz.
wave = oscillator('Log Sweep',2,[20 20000],.01); % ramped on/off log sweep.
wave = oscillator('FM',1,freq_vector); % signal changing in freq over time
wave = oscillator('White Noise',1,[],0.1); %ramped on and off noise
wave = oscillator('Half Octave',1,440); %half octave noise, 440 Hz centre.
wave = oscillator('Sinusoid',1,220,0,pi/2,48000); %pure tone with a
starting phase of 90 degrees and sample rate set to 48000.

Omitting 'wavetype' sets it to sinusoid, omitting 'duration' sets it to
one second, and omitting 'frequency sets it to 440 Hz. Gate is set to 0,
phase to 0 and sample rate to 44100; All output waves are scaled to a
peak absolute value of 1.0

For the 'FM signal' option, the function should be provided with a vector
of frequencies (in Hz) that is the same duration and sample frequency as
the desired signal. Failing this, the function will *attempt* to resample
the frequency vector using spline interpolation. YMMV.

Note that the 'grey noise' is *generic* grey and is based the ISO 66-phon
Equal-loudness contour.
(c) W. Owen Brimijoin - MRC Institute of Hearing Research
Tested on Matlab R2011b and R14

Cite As

W. Owen Brimijoin (2024). Oscillator and Signal Generator (https://www.mathworks.com/matlabcentral/fileexchange/37376-oscillator-and-signal-generator), MATLAB Central File Exchange. Retrieved .

MATLAB Release Compatibility
Created with R2011b
Compatible with any release
Platform Compatibility
Windows macOS Linux

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!
Version Published Release Notes
1.8.0.0

Changed function title on FileX
Updated tags
Fixed a bug in which long duration speech noise signals were shifted down in frequency

1.7.0.0

Added functionality: the function is now able to generate signals that vary continuously in frequency according to a supplied freq_vector argument.

1.6.0.0

Version 1.4 06/05/14 - added octave (and fractions) noise options.

1.5.0.0

The function now uses a somewhat slower but far more accurate means of generating spectrally shaped noises (ifft). The function also now includes blue noise and violet noise.

1.4.0.0

Function has been updated to include options for generating linear and logarithmic frequency sweeps, as well as brown and grey noise options

1.3.0.0

Fixed a bug related to the generation of short signals.

1.2.0.0

Fixed a bug related to the user specifying 'frequency' while selecting noise as a signal type.

1.1.0.0

Additional commenting for clarity.

1.0.0.0