My Project
fourierSpectrumPlotsSpike.py
Go to the documentation of this file.
1 import numpy as np
2 from matplotlib import pyplot as plt
3 import scipy.fftpack
4 
5 import sys
6 import os
7 from plotSetUp import setSvgLatexMatplotlibSettings
8 sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)) + "/..")
9 
10 from helpFunctions import LoadFile
11 from plotSetUp import colors_diverging_short
12 
13 loader = LoadFile()
15 #NB! this is a spike, which in non-extreme-programming terms is a sketch/demo of some implementation
16 
17 def load_csv_data(
18  run_name,
19  output_type,
20  use_shared_names=False
21 ):
22  if("-frictionphase"):
23  file_name = "/friction_phase/" + output_type
24  else:
25  file_name = output_type
26  parameters = loader.load_yaml_parameters(run_name)
27  phase_data = loader.load_simulation_output(
28  parameters,
29  run_name,
30  file_name,
31  use_shared_names=use_shared_names
32  )
33  return phase_data
34 
35 
36 def make_sin_curve(
37  data,
38  amplitude=1,
39  period=1,
40  phase_shift=1,
41  vertical_shift=0
42 ):
43  return ((amplitude * np.sin(period * 2*np.pi * data + phase_shift)) + vertical_shift)
44 
45 
47  data,
48  suptitle=""
49 ):
50  # plt.plot(data)
51  # plt.show()
52 
53  sample_points = len(data)
54  sample_spacing = 0.5
55 
56  x_range = np.linspace(0.0, sample_points*0.005, sample_points)
57 
58  y_values = scipy.fftpack.fft(data)
59 
60 
61  x_values = np.linspace(0.0, 1.0/sample_spacing, sample_points/2)
62 
63  y_values = 2.0/sample_points*np.abs(y_values[:sample_points//2])
64  print(y_values)
65  plt.plot(x_values[1:], y_values[1:])
66  plt.xlim(0.0, 2.0)
67  plt.suptitle(suptitle)
68  # plt.show()
69  # plt.plot(x_values, y_values)
70  # plt.xlim(0.0, 2.0)
71  # plt.show()
72 
73 
75 ):
76  sample_points = 800
77  sample_spacing = 1/800.0
78  max_value = sample_points * sample_spacing
79  x_range = np.linspace(0, max_value, num=sample_points)
80  sine_range = make_sin_curve(x_range, 1.0, 50.0, 0.0, 0.0)
81  sine_range_2 = make_sin_curve(x_range, 0.5, 80.0, 0, 0)
82 
83  x_values = np.linspace(0.0, 1.0/(2.0*sample_spacing), sample_points/2)
84  plt.plot(x_range, sine_range + sine_range_2, color="#7fcdbb", linewidth=2.0)
85  plt.xlabel("\$x\$")
86  plt.ylabel("\$g(x)=\sin(50*x)+0.5*\sin(80x)\$")
87  plt.show()
88 
89  y_values = scipy.fftpack.fft(sine_range + sine_range_2)
90 
91  y_values = 2.0/sample_points * np.abs(y_values[:sample_points//2])
92  print(y_values)
93  plt.plot(x_values, y_values, color="#7fcdbb", linewidth=2.0)
94  plt.ylabel("\$A\$")
95  plt.xlabel("\$f\$")
96  plt.show()
97 
98 
100  run_name,
101  output_name="pad_phase_"
102 ):
103  for i in range(100, 120):
104  loaded_data_pad = load_csv_data(run_name, output_name + str(i))
105  position_data_pad = loaded_data_pad[0]
106 
107  loaded_data_block = load_csv_data(run_name, "block_phase_" + str(i))
108  position_data_block_1 = loaded_data_block[0]
109  # position_data_block_6 = loaded_data_block[2]
110  # position_data_block_7 = loaded_data_block[4]
111  # position_data_block_50 = loaded_data_block[6]
112 
113  #calculate_fourier_spectrum(position_data_pad, suptitle = str(i))
114  #plt.show()
115  calculate_fourier_spectrum(-position_data_block_1)
116  #calculate_fourier_spectrum(position_data_block_6, suptitle=str(i))
117  # calculate_fourier_spectrum(position_data_block_7)
118  # calculate_fourier_spectrum(position_data_block_50)
119 
120  plt.xlim(0,0.4)
121  plt.show()
122 
124 
125 def run(
126  run_name
127 ):
128  make_fourier_spectrum(run_name)
129 
130 
131 if __name__ == "__main__":
132  if(len(sys.argv) > 1):
133  print("Info: script call has one or more arguments,\
134  trying to use the first as run name.")
135  run_name = sys.argv[1]
136  run(run_name)
def make_sin_curve(data, amplitude=1, period=1, phase_shift=1, vertical_shift=0)
def load_csv_data(run_name, output_type, use_shared_names=False)
def calculate_fourier_spectrum(data, suptitle="")
def make_fourier_spectrum(run_name, output_name="pad_phase_")
def setSvgLatexMatplotlibSettings(pyplot)
Definition: plotSetUp.py:11