 |
Fourier transform to obtain a power spectrum using Flanagan
Source code name: "flanagan_fourier_transform.py"
Programming language: Python
Topic: Linear Algebra/Matrices
DMelt Version 2.3. Last modified: 10/29/1972. License: Pro
https://datamelt.org/code/cache/flanagan_fourier_transform_444.py
To run this script using the DMelt IDE,
copy the above URL link to the menu [File]→[Read script from URL] of the DMelt IDE.
# Uses external Michael Thomas Flanagan's Java Scientific Library
# https://www.ee.ucl.ac.uk/~mflanaga/java/
# illustrating the use of FourierTransform to obtain a Power Spectrum.
from flanagan.plot import PlotGraph
from jhplot import Web
from flanagan.math import FourierTransform
from java.lang import Math
url="http://www.ee.ucl.ac.uk/~mflanaga/java/flanagan.jar"
print "Loading ",url
print Web.load(url)
nPoints = 256
amplitude1 = 1.0
amplitude2 = 2.0
pointsPerCycle = 200;
deltaT = 1.0/pointsPerCycle;
ydata=[]
tdata=[]
# Create wave form
for i in range(nPoints):
ydata.append(amplitude1*Math.sin(2.0*Math.PI*i/pointsPerCycle)+ amplitude2*Math.sin(10.0*Math.PI*i/pointsPerCycle));
tdata.append(i*deltaT)
# Plot original data
pg0 = PlotGraph(tdata, ydata);
pg0.setGraphTitle("y = sin(2.pi.t) + 2sin(10.pi.t)");
pg0.setXaxisLegend("time");
pg0.setXaxisUnitsName("s");
pg0.setXaxisLegend("y");
pg0.plot()
ft0 = FourierTransform(ydata);
ft0.setDeltaT(deltaT);
powerSpectrum = ft0.powerSpectrum();
# Plot power spectrum
ft0.plotPowerSpectrum();
# Obtain the transformed data
transformedData = ft0.getTransformedDataAsAlternate();
# Inverse transform the transformed data
ft1 = FourierTransform();
ft1.setFftData(transformedData);
ft1.inverse();
# Obtain the inverse transformed data
inverseTransform = ft1.getTransformedDataAsAlternate();
# Arrange real parts for plotting
newYdata = []
k=0;
for i in range(nPoints):
newYdata.append(inverseTransform[k]);
k += 2;
# Plot inverse transformed data
pg1 = PlotGraph(tdata, newYdata);
pg1.setGraphTitle("y = sin(2.pi.t) + 2sin(10.pi.t) fft transformed and then inverse transformed");
pg1.setXaxisLegend("time");
pg1.setXaxisUnitsName("s");
pg1.setXaxisLegend("y");
pg1.plot();
You see the box below because you did not login.