From 50998fcfb916ae251309bd4b464f2c122e8cb30d Mon Sep 17 00:00:00 2001 From: jaseg Date: Fri, 9 Apr 2021 18:38:02 +0200 Subject: Repo re-org --- notebooks/grid_frequency_spectra.ipynb | 399 +++++++++++++++++++++++++++++++++ 1 file changed, 399 insertions(+) create mode 100644 notebooks/grid_frequency_spectra.ipynb (limited to 'notebooks/grid_frequency_spectra.ipynb') diff --git a/notebooks/grid_frequency_spectra.ipynb b/notebooks/grid_frequency_spectra.ipynb new file mode 100644 index 0000000..983db07 --- /dev/null +++ b/notebooks/grid_frequency_spectra.ipynb @@ -0,0 +1,399 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import csv\n", + "\n", + "import numpy as np\n", + "from matplotlib import pyplot as plt\n", + "import scipy.fftpack" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib widget" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "data = np.genfromtxt('data/Netzfrequenz_Sekundenwerte_2012_KW37.csv', delimiter=',')[1:,1:]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "171a6975a39e48bcac5e1247903b70f4", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "ax.plot(data[:3600*24, 0])" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.02051102806199375" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.std(data[:,0])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "2b835c8fb082428cabc1ad9112286728", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(1e-06, 0.5)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Number of samplepoints\n", + "N = len(data[:,0])\n", + "# sample spacing\n", + "T = 1.0\n", + "x = np.linspace(0.0, N*T, N)\n", + "yf = scipy.fftpack.fft(data[:,0])\n", + "xf = np.linspace(0.0, 1.0/(2.0*T), N//2)\n", + "\n", + "yf = 2.0/N * np.abs(yf[:N//2])\n", + "\n", + "#yf = sum(yf[s::10] for s in range(10)) / 10\n", + "#xf = sum(xf[s::10] for s in range(10)) / 10\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.loglog(xf, yf)\n", + "ax.xaxis.set_major_formatter(plt.FuncFormatter(lambda x, _pos: f'{1/x:.1f}'))\n", + "ax.set_xlabel('T in s')\n", + "ax.set_ylabel('Amplitude Δf')\n", + "ax.grid()\n", + "ax.set_xlim([1/1000000, 0.5])" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "94ca3cb49e7d452dab8f7e2e8d632b84", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(5e-07, 0.02)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Number of samplepoints\n", + "N = len(data[:,0])\n", + "# sample spacing\n", + "T = 1.0\n", + "x = np.linspace(0.0, N*T, N)\n", + "yf = scipy.fftpack.fft(data[:,0])\n", + "xf = np.linspace(0.0, 1.0/(2.0*T), N//2)\n", + "\n", + "yf = 2.0/N * np.abs(yf[:N//2])\n", + "\n", + "average_from = lambda val, start, average_width: np.hstack([val[:start], [ np.mean(val[i:i+average_width]) for i in range(start, len(val), average_width) ]])\n", + "\n", + "average_width = 20\n", + "average_start = 100\n", + "yf = average_from(yf, average_start, average_width)\n", + "xf = average_from(xf, average_start, average_width)\n", + "yf = average_from(yf, 300, average_width)\n", + "xf = average_from(xf, 300, average_width)\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.loglog(xf, yf)\n", + "ax.xaxis.set_major_formatter(plt.FuncFormatter(lambda x, _pos: f'{1/x:.1f}'))\n", + "ax.set_xlabel('T in s')\n", + "ax.set_ylabel('Amplitude Δf')\n", + "\n", + "for i, t in enumerate([45, 60, 600, 1200, 1800, 3600]):\n", + " ax.axvline(1/t, color='red', alpha=0.5)\n", + " ax.annotate(f'{t} s', xy=(1/t, 3e-3), xytext=(-15, 0), xycoords='data', textcoords='offset pixels', rotation=90)\n", + "#ax.text(1/60, 10,'60 s', ha='left')\n", + "ax.grid()\n", + "ax.set_xlim([1/60000, 0.5])\n", + "ax.set_ylim([5e-7, 2e-2])" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "91a04300b9164bd7a9915d0028f3e563", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ys = scipy.fftpack.fft(data[:,0])\n", + "ys = 2.0/len(data) * np.abs(ys[:len(data)//2])\n", + "s = 60\n", + "\n", + "ys = np.convolve(ys, np.ones((s,))/s, mode='valid')\n", + "\n", + "xs = np.linspace(0, 1.0/2.0, len(data)//2)\n", + "#xs = np.linspace(len(data)/2, 1, len(data)/2)\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.loglog(xs[s//2:-s//2+1], ys)\n", + "ax.xaxis.set_major_formatter(plt.FuncFormatter(lambda x, _pos: 1/x))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "2811a79d4ad8487f822750e4419ccfdb", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ys = scipy.fftpack.fft(data[:,0])\n", + "ys = 2.0/len(data) * np.abs(ys[:len(data)//2])\n", + "s = 1\n", + "\n", + "ys = np.convolve(ys, np.ones((s,))/s, mode='valid')\n", + "\n", + "xs = np.linspace(0, 1.0/2.0, len(data)//2)\n", + "#xs = np.linspace(len(data)/2, 1, len(data)/2)\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.loglog(xs[s//2:-s//2+1 if s > 1 else None], ys)\n", + "ax.xaxis.set_major_formatter(plt.FuncFormatter(lambda x, _pos: 1/x))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "c678197e011e4ab4982d3e1d2a2cee9a", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ys = scipy.fftpack.fft(data[:,0])\n", + "ys = 2.0/len(data) * np.abs(ys[:len(data)//2])\n", + "s = 1\n", + "\n", + "ys = np.convolve(ys, np.ones((s,))/s, mode='valid')\n", + "\n", + "xs = np.linspace(0, 1.0/2.0, len(data)//2)\n", + "\n", + "ys *= 2*np.pi*xs\n", + "#xs = np.linspace(len(data)/2, 1, len(data)/2)\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.loglog(xs[s//2:-s//2+1 if s > 1 else None], ys)\n", + "ax.xaxis.set_major_formatter(plt.FuncFormatter(lambda x, _pos: 1/x))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "52bcd29a41a54ed1bf9dc63e0c9e83d8", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ys = scipy.fftpack.fft(data[:,0])\n", + "ys = 2.0/len(data) * np.abs(ys[:len(data)//2])\n", + "s = 30\n", + "\n", + "ys = np.convolve(ys, np.ones((s,))/s, mode='valid')\n", + "\n", + "xs = np.linspace(0, 1.0/2.0, len(data)//2)\n", + "\n", + "ys *= 2*np.pi*xs[s//2:-s//2+1]\n", + "\n", + "#xs = np.linspace(len(data)/2, 1, len(data)/2)\n", + "\n", + "fig, ax = plt.subplots(figsize=(9,5))\n", + "ax.loglog(xs[s//2:-s//2+1], ys)\n", + "ax.xaxis.set_major_formatter(plt.FuncFormatter(lambda x, _pos: 1/x))\n", + "ax.grid()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "15.923566878980893" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1/0.0628" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "labenv", + "language": "python", + "name": "labenv" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.1" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} -- cgit