test-Ordner eingefügt
This commit is contained in:
124
simulation/test/helper.py
Normal file
124
simulation/test/helper.py
Normal file
@@ -0,0 +1,124 @@
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
from scipy import signal
|
||||
import pandas as pd
|
||||
|
||||
def get_psd(data, fs, bin_width):
|
||||
f, psd = signal.welch(data,
|
||||
fs=fs,
|
||||
nperseg=fs/bin_width,
|
||||
window='hann',
|
||||
axis=0
|
||||
)
|
||||
|
||||
return f[1:], psd[1:] #drop the first value because it makes the plots look bad and is effectively 0
|
||||
|
||||
|
||||
def setup_timeplot(figsize=(11, 6), plot_coeffs=False):
|
||||
global plot1, line1, plot2, line2, plot3, line3, plot4
|
||||
# time domain plot
|
||||
cols = 1
|
||||
rows = 4
|
||||
plt.figure(0, figsize=figsize)
|
||||
plt.clf()
|
||||
|
||||
plot1 = plt.subplot2grid( (rows, cols), (0,0), 1)
|
||||
line1 = plot1.plot([0], label="mic")
|
||||
plt.legend()
|
||||
plot2 = plt.subplot2grid((rows,cols),(1,0), sharex=plot1)
|
||||
line2 = plot2.plot([0], label="acc")
|
||||
plt.legend()
|
||||
plot3 = plt.subplot2grid((rows, cols), (2,0), sharex=plot1)
|
||||
line3 = plot3.plot([0], label="out")
|
||||
plt.legend()
|
||||
|
||||
if plot_coeffs:
|
||||
plot4 = plt.subplot2grid( (rows, cols), (3,0), sharex=plot1, rowspan=3)
|
||||
plt.legend(loc='upper right')
|
||||
|
||||
plt.xlabel("sample")
|
||||
plt.tight_layout()
|
||||
plt.show()
|
||||
|
||||
|
||||
def setup_freqplot(figsize=(11, 6)):
|
||||
global plot_freq, line_freq1, line_freq2, line_freq3
|
||||
cols = 1
|
||||
rows = 1
|
||||
# frequency domain plot
|
||||
plt.figure(1, figsize=figsize)
|
||||
plt.clf()
|
||||
plt.title("Power spectrum")
|
||||
plot_freq = plt.subplot2grid( (rows, cols), (0,0), 1)
|
||||
line_freq1 = plot_freq.loglog([0], label="mic")
|
||||
line_freq2 = plot_freq.loglog([0], label="acc")
|
||||
line_freq3 = plot_freq.loglog([0], label="out")
|
||||
plt.xlabel("frequency / Hz")
|
||||
plt.ylabel("dB²/Hz")
|
||||
plt.legend()
|
||||
plt.tight_layout()
|
||||
plt.show()
|
||||
|
||||
|
||||
def plot_freqdomain(fs, ch1, ch2, output):
|
||||
|
||||
x_min = []
|
||||
x_max = []
|
||||
y_min = []
|
||||
y_max = []
|
||||
|
||||
f, psd = get_psd(ch1, fs, 10)
|
||||
x_min.append(min(f))
|
||||
x_max.append(max(f))
|
||||
y_min.append(min(psd))
|
||||
y_max.append(max(psd))
|
||||
line_freq1[0].set_data(f, psd)
|
||||
|
||||
f, psd = get_psd(ch2, fs, 10)
|
||||
x_min.append(min(f))
|
||||
x_max.append(max(f))
|
||||
y_min.append(min(psd))
|
||||
y_max.append(max(psd))
|
||||
line_freq2[0].set_data(f, psd)
|
||||
|
||||
f, psd = get_psd(output, fs, 10)
|
||||
x_min.append(min(f))
|
||||
x_max.append(max(f))
|
||||
y_min.append(min(psd))
|
||||
y_max.append(max(psd))
|
||||
line_freq3[0].set_data(f, psd)
|
||||
|
||||
plot_freq.set_xlim(min(x_min), max(x_max))
|
||||
plot_freq.set_ylim(min(y_min), max(y_max))
|
||||
|
||||
|
||||
def plot_timedomain(ch1, ch2, output, coeffs: pd.DataFrame =None):
|
||||
#Plot the result
|
||||
data= output
|
||||
line3[0].set_data(range(len(data)), data)
|
||||
plot3.set_xlim(0, len(data))
|
||||
plot3.set_ylim(np.min(data), np.max(data))
|
||||
|
||||
# plot the chirp with noise
|
||||
data = ch1
|
||||
line1[0].set_data(range(len(data)), data)
|
||||
plot1.set_xlim(0, len(data))
|
||||
plot1.set_ylim(min(data), max(data))
|
||||
|
||||
# Plot the noise
|
||||
data = ch2
|
||||
line2[0].set_data(range(len(data)), data)
|
||||
plot2.set_xlim(0, len(data))
|
||||
plot2.set_ylim(min(data), max(data))
|
||||
|
||||
# Plot the coeffs
|
||||
if coeffs is not None:
|
||||
data = coeffs
|
||||
coeffs.plot(ax=plot4)
|
||||
#plot4.legend(bbox_to_anchor=(1.2, 1.05))
|
||||
|
||||
#line4 = plot4.plot([0], label="coeffs")
|
||||
#line4[0].set_data(range(len(data)), data)
|
||||
|
||||
#plot4.set_xlim(0, len(data))
|
||||
#plot4.set_ylim(min(data), max(data))
|
||||
Reference in New Issue
Block a user