Add fourier problem
This commit is contained in:
parent
d00d580a20
commit
7a798e2def
47
fourier.py
Normal file
47
fourier.py
Normal file
@ -0,0 +1,47 @@
|
||||
import numpy as np
|
||||
import pylab as pl
|
||||
|
||||
n_period_points = 32 # Number of points in period
|
||||
dx = 1.0 / n_period_points
|
||||
x_vals = np.arange(0.0, 1.0, dx) # This is the interval to be analyzed
|
||||
|
||||
waveName = "Step Sawtooth"
|
||||
|
||||
wave_y_vals = [0.0, 0.0, 0.5, 0.5, 0.5, 0.5, 1.0, 1.0,
|
||||
1.0, 1.0, 1.5, 1.5, 1.5, 1.5, 2.0, 2.0,
|
||||
-2.0, -2.0, -1.5, -1.5, -1.5, -1.5, -1.0, -1.0,
|
||||
-1.0, -1.0, -0.5, -0.5, -0.5, -0.5, 0.0, 0.0]
|
||||
|
||||
print("PHY372 Spring 2024 Problem Set 6")
|
||||
print("Fourier analysis and re-synthesis of a", waveName)
|
||||
print("P372-PS06-FourierSeriesTemplate")
|
||||
print("Matthew Oros Feb 2024")
|
||||
|
||||
m_vals = np.arange(0, n_period_points // 2)
|
||||
|
||||
s_list: list[np.ndarray] = []
|
||||
c_list: list[np.ndarray] = []
|
||||
for m in m_vals:
|
||||
s_list.append(np.sin(m * 2 * np.pi * x_vals))
|
||||
c_list.append(np.cos(m * 2 * np.pi * x_vals))
|
||||
|
||||
a_coeffs: list[float] = []
|
||||
for c in c_list:
|
||||
a_coeffs.append(2.0 * np.dot(wave_y_vals, c) * dx)
|
||||
|
||||
b_coeffs: list[float] = []
|
||||
for s in s_list:
|
||||
b_coeffs.append(2.0 * np.dot(wave_y_vals, s) * dx)
|
||||
|
||||
y_vals = np.zeros(n_period_points)
|
||||
for i in range(len(m_vals)):
|
||||
y_vals += a_coeffs[i] * c_list[i] + b_coeffs[i] * s_list[i]
|
||||
|
||||
pl.plot(x_vals, y_vals, 'r', linewidth=2.0)
|
||||
pl.plot(x_vals, wave_y_vals, linewidth=1.0)
|
||||
pl.axis((0.0, 1.0, -2.5, 2.5))
|
||||
pl.xlabel('position x')
|
||||
pl.ylabel('function')
|
||||
pl.title('Fourier re-synthesis of ' + waveName)
|
||||
|
||||
pl.show()
|
66
functions.py
Normal file
66
functions.py
Normal file
@ -0,0 +1,66 @@
|
||||
# P372-PS06-functions.py
|
||||
# Find your function and cut and paste into your program.
|
||||
# -----------------------------------------------------------
|
||||
waveName = "square wave" # Your function
|
||||
|
||||
g = [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
0.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0,
|
||||
-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0]
|
||||
# -----------------------------------------------------------
|
||||
waveName = "2 cycle square " # Your function
|
||||
|
||||
g = [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
0.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0,
|
||||
0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
0.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0]
|
||||
# -----------------------------------------------------------
|
||||
waveName = "Impulse" # Your function
|
||||
|
||||
g = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
||||
1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
||||
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
||||
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
# -----------------------------------------------------------
|
||||
waveName = "Wide Impulse" # Your function
|
||||
|
||||
g = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
||||
0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
|
||||
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
# -----------------------------------------------------------
|
||||
waveName = "Impulse Pair" # Your function
|
||||
|
||||
g = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
||||
1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
||||
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
||||
-1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
# -----------------------------------------------------------
|
||||
waveName = "Triangle Wave" # Your function
|
||||
|
||||
g = [0.0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875,
|
||||
1.0, 0.875, 0.75, 0.625, 0.5, 0.375, 0.25, 0.125,
|
||||
0.0, -0.125, -0.25, -0.375, -0.5, -0.625, -0.75, -0.875,
|
||||
-1.0, -0.875, -0.75, -0.625, -0.5, -0.375, -0.25, -0.125]
|
||||
# -----------------------------------------------------------
|
||||
waveName = "Sawtooth" # Your function
|
||||
|
||||
g = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7,
|
||||
0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5,
|
||||
0.0, -1.5, -1.4, -1.3, -1.2, -1.1, -1.0, -0.9,
|
||||
-0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1]
|
||||
# -----------------------------------------------------------
|
||||
waveName = "Wide Pulse Pair" # Your function
|
||||
|
||||
g = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0,
|
||||
1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
||||
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0, -1.0,
|
||||
-1.0, -1.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
# -----------------------------------------------------------
|
||||
waveName = "Step Sawtooth" # Your function
|
||||
|
||||
g = [0.0, 0.0, 0.5, 0.5, 0.5, 0.5, 1.0, 1.0,
|
||||
1.0, 1.0, 1.5, 1.5, 1.5, 1.5, 2.0, 2.0,
|
||||
-2.0, -2.0, -1.5, -1.5, -1.5, -1.5, -1.0, -1.0,
|
||||
-1.0, -1.0, -0.5, -0.5, -0.5, -0.5, 0.0, 0.0]
|
||||
# -----------------------------------------------------------
|
Loading…
Reference in New Issue
Block a user