Linear and Exponential Chirp Functions
- To: mathgroup at smc.vnet.net
- Subject: [mg110634] Linear and Exponential Chirp Functions
- From: telefunkenvf14 <rgorka at gmail.com>
- Date: Tue, 29 Jun 2010 08:40:03 -0400 (EDT)
Group:
A while back I needed an exponential chirp function and was only able
to track down a linear version by Will Robertson. Hopefully someone
will find these useful.
linearChirp::usage = "linearChirp[f0_, f1_, t_, T_] generates a linear
chirp signal with initial frequency f0 and ending frequency f1 at time
T seconds; t represents the time index variable."
expChirp::usage = "expChirp[f0_, f1_, t_, T_] generates an exponential
chirp signal with initial frequency f0 and ending frequency f1 at time
T seconds; t represents the time index variable."
Attributes[linearChirp] = {NumericFunction}
linearChirp[f0_, f1_, t_, T_] :=Sin[2*Pi*t*(f0 + ((f1 - f0)/T*t)/2)]
Attributes[expChirp] = {NumericFunction}
expChirp[f0_, f1_, t_, T_] :=Sin[(2*f0*(-1 + (f1/f0)^(t/T))*Pi*T)/
Log[f1/f0]]
------------------------------------ Example Uses
------------------------------------------
(*Just gives you the function; plug a value in for t to get the
function value*)
linearChirp[10, 30, t, 1]
(*Compare plots... change the 10 to a 1 to see more of a difference*)
Plot[linearChirp[10, 30, t, 1], {t, 0, 1}]
Plot[expChirp[10, 30, t, 1], {t, 0, 1}]
(*Create a 40 second expChirp with starting frequency 20Hz, ending
frequency 400Hz. Evaluate[] forces the function to evaluate first---
speeds things up. Note that SampleDepth and SampleRate are overkill
for this example; my goal was to avoid digital shenanigans later.*)
Play[Evaluate@expChirp[20, 400, t, 40], {t, 0, 40}, SampleDepth -> 24,
SampleRate -> 44100]]
-RG