pytutorial/numpy/power_mean/README.md
David Rotermund 24cf6988a8
Update README.md
Signed-off-by: David Rotermund <54365609+davrot@users.noreply.github.com>
2024-02-15 10:42:44 +01:00

1.3 KiB

Power and mean

{:.no_toc}

* TOC {:toc}

Top

Questions to David Rotermund

The order is important

You are not allowed to average over the trials before calculating the power. This is the same for calculating the fft power as well as the wavelet power.

The worst case senario would be two waves in anti-phase:

import numpy as np
import matplotlib.pyplot as plt

t: np.ndarray = np.linspace(0, 1.0, 10000)
f: float = 10

sinus_a = np.sin(f * t * 2.0 * np.pi)
sinus_b = np.sin(f * t * 2.0 * np.pi + np.pi)

plt.plot(t, sinus_a, label="a")
plt.plot(t, sinus_b, label="b")
plt.plot(t, (sinus_a + sinus_b) / 2.0, "k--", label="(a+b)/2")
plt.legend()
plt.xlabel("t [s]")
plt.show()

image0.png

However if you have server randomly phase-jittered curves then something similar will happen.

import numpy as np
import matplotlib.pyplot as plt

t: np.ndarray = np.linspace(0, 1.0, 10000)
f: float = 10
n: int = 1000

rng = np.random.default_rng(1)
sinus = np.sin(f * t[:, np.newaxis] * 2.0 * np.pi + 2.0 * np.pi * rng.random((1, n)))
print(sinus.shape)

plt.plot(t, sinus)
plt.plot(t, sinus.mean(axis=-1), "k--")
plt.show()

image1.png

And please remember the Fourier approach: Every curve can be decomposed in to sin waves.