{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Fakultät für Physik\n", "\n", "## Physikalisches Praktikum P1 für Studierende der Physik\n", "\n", "Versuch P1-43, 44, 45 (Stand: August 2023)\n", "\n", "[Raum F1-12](https://labs.physik.kit.edu/img/Praktikum/Lageplan_P1.png)\n", "\n", "\n", "\n", "# Lichtgeschwindigkeit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Name: _surname1_ Vorname: _name1_ E\\-Mail: _mail1_\n", "\n", "\\begin{equation*}\n", "\\begin{split}\n", "&\\\\\n", "&\\\\\n", "\\end{split}\n", "\\end{equation*}\n", "\n", "Name: _surname2_ Vorname: _name2_ E\\-Mail: _mail2_\n", "\n", "\\begin{equation*}\n", "\\begin{split}\n", "&\\\\\n", "&\\\\\n", "&\\\\\n", "\\end{split}\n", "\\end{equation*}\n", "\n", "Gruppennummer: _groupnumber_\n", "\n", "\\begin{equation*}\n", "\\begin{split}\n", "&\\\\\n", "&\\\\\n", "&\\\\\n", "\\end{split}\n", "\\end{equation*}\n", "\n", "Betreuer: \n", "\n", "\\begin{equation*}\n", "\\begin{split}\n", "&\\\\\n", "&\\\\\n", "&\\\\\n", "\\end{split}\n", "\\end{equation*}\n", "\n", "Versuch durchgeführt am: _date_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "**Beanstandungen:**\n", "\n", "\\begin{equation*}\n", "\\begin{split}\n", "&\\\\\n", "&\\\\\n", "&\\\\\n", "&\\\\\n", "&\\\\\n", "&\\\\\n", "&\\\\\n", "&\\\\\n", "&\\\\\n", "&\\\\\n", "\\end{split}\n", "%\\text{\\vspace{10cm}}\n", "\\end{equation*}\n", "\n", "
\n", "Testiert am: __________________ Testat: __________________" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Hilfsfunktionen. Nicht weiter beachten\n", "from IPython.core.display import Markdown\n", "from IPython.display import display\n", "def M_helper_func(txt):\n", " #print(txt)\n", " #print('fr\"'+txt.replace(\"§\",\"$\").replace(\"{\",\"{{\").replace(\"}\",\"}}\").replace(\"[!\",\"{\").replace(\"!]\",\"}\")+'\"')\n", " execreturnvalue = \"\"\n", " loc = {}\n", " exec('execreturnvalue = fr\"
'+txt.replace(\"{\",\"{{\").replace(\"}\",\"}}\").replace(\"[!\",\"{\").replace(\"!]\",\"}\")+'
\"', globals(), loc)\n", " display(Markdown(loc[\"execreturnvalue\"]))\n", " return loc[\"execreturnvalue\"]\n", "\n", "from IPython.core.magic import (register_line_magic,\n", " register_cell_magic)\n", "\n", "from IPython.core import magic\n", "\n", "def register_line_magic(f):\n", " setattr(f, magic.MAGIC_NO_VAR_EXPAND_ATTR, True)\n", " return magic.register_line_magic(f)\n", "\n", "@register_line_magic\n", "def m(line):\n", " M_helper_func(line)\n", "\n", "import os\n", "import numpy as np\n", "from numpy import pi\n", "import matplotlib.pyplot as plt\n", "import matplotlib as mpl\n", "import scipy as sci\n", "import kafe2\n", "import pandas as pd\n", "import uncertainties\n", "from uncertainties import ufloat, unumpy\n", "from uncertainties.unumpy import uarray as uarr\n", "from uncertainties.unumpy import nominal_values, nominal_values as nomv, std_devs, std_devs as stdv\n", "from uncertainties.umath import sqrt as usqrt, sin as usin,exp as uexp\n", "import scipy\n", "import matplotlib.image as mpimg\n", "from io import StringIO\n", "\n", "mpl.rcParams['figure.dpi'] = 100\n", "class ng:\n", " def __init__(self,x=None,stat=None,syst=None):\n", " if x == None:\n", " self.syst = None\n", " self.stat = None\n", " else:\n", " self.syst = ufloat(x,0)\n", " self.stat = ufloat(x,0)\n", " if syst != None:\n", " self.syst = ufloat(x,syst)\n", " if stat != None:\n", " self.stat = ufloat(x,stat)\n", " def SetSyst(self,syst):\n", " self.syst = ufloat(nomv(self.syst),syst)\n", " def SetStat(self,stat):\n", " self.stat = ufloat(nomv(self.stat),stat)\n", " def __str__(self):\n", " return f'{nomv(self.stat):.2}±ₛₜₐₜ{stdv(self.stat):.2}±ₛᵧₛₜ{stdv(self.syst):.2}'\n", " def getTotErr(self):\n", " return np.sqrt(stdv(self.syst)**2+stdv(self.stat)**2)\n", " def nom(self):\n", " print(type(nomv(self.syst)))\n", " return float(nomv(self.syst))\n", " def __add__(self,o):\n", " res = ng()\n", " if type(o) == ng:\n", " res.syst = self.syst + o.syst\n", " res.stat = self.stat + o.stat\n", " else:\n", " res.syst = self.syst + o\n", " res.stat = self.stat + o\n", " return res\n", " def __iadd__(self,o):\n", " return self.__add__(o)\n", " def __sub__(self,o):\n", " res = ng()\n", " if type(o) == ng:\n", " res.syst = self.syst - o.syst\n", " res.stat = self.stat - o.stat\n", " else:\n", " res.syst = self.syst - o\n", " res.stat = self.stat - o\n", " return res\n", " def __isub__(self,o):\n", " return self.__sub__(o)\n", " def __mul__(self,o):\n", " res = ng()\n", " if type(o) == ng:\n", " res.syst = self.syst * o.syst\n", " res.stat = self.stat * o.stat\n", " else:\n", " res.syst = self.syst * o\n", " res.stat = self.stat * o\n", " return res\n", " def __imul__(self,o):\n", " return self.__mul__(o)\n", " def __truediv__(self,o):\n", " res = ng()\n", " if type(o) == ng:\n", " res.syst = self.syst / o.syst\n", " res.stat = self.stat / o.stat\n", " else:\n", " res.syst = self.syst / o\n", " res.stat = self.stat / o\n", " return res\n", " def __itruediv__(self,o):\n", " return self.__truediv__(o)\n", " def __pow__(self,o):\n", " res = ng()\n", " if type(o) == ng:\n", " res.syst = self.syst**o.syst\n", " res.stat = self.stat**o.stat\n", " else:\n", " res.syst = self.syst**o\n", " res.stat = self.stat**o\n", " return res\n", " def __ipow__(self,o):\n", " return self.__pow__(o)\n", "def sin(o):\n", " if type(o) == ng:\n", " res = ng()\n", " res.syst = usin(o.syst)\n", " res.stat = usin(o.stat)\n", " return res\n", " else:\n", " return np.sin(o)\n", "def exp(o):\n", " if type(o) == ng:\n", " res = ng()\n", " res.syst = uexp(o.syst)\n", " res.stat = uexp(o.stat)\n", " return res\n", " else:\n", " return np.exp(o)\n", "def sqrt(o):\n", " if type(o) == ng:\n", " res = ng()\n", " res.syst = usqrt(o.syst)\n", " res.stat = usqrt(o.stat)\n", " return res\n", " else:\n", " return np.sqrt(o)\n", " \n", "def uplot(x,y,*args, **kwargs):\n", " utypes = (uncertainties.core.\n", "Variable,uncertainties.core.AffineScalarFunc)\n", " xplt = x\n", " yplt = y\n", " if type(x[0]) in utypes:\n", " xplt = nomv(x)\n", " kwargs[\"xerr\"] = stdv(x)\n", " if type(y[0]) in utypes:\n", " yplt = nomv(y)\n", " kwargs[\"yerr\"] = stdv(y)\n", " plt.errorbar(xplt,yplt,*args,**kwargs)\n", "\n", "def pltimg(path):\n", " try:\n", " img = mpimg.imread(path)\n", " imgplot = plt.imshow(img)\n", " plt.axis('off')\n", " plt.show()\n", " except Exception as e:\n", " print(\"Image Not Found\")\n", " print(e)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Durchführung\n", "\n", "## Aufgabe 1: Drehspiegelmethode\n", "\n", "**Hinweise zu allen hier durchzuführenden Messungen finden Sie in der Datei [Hinweise-Aufgabe-1.md](https://gitlab.kit.edu/kit/etp-lehre/p1-praktikum/students/-/tree/main/Lichtgeschwindigkeit/doc/Hinweise-Aufgabe-1.md).**\n", "\n", "### Aufgabe 1.1: Vorbereitung\n", "\n", "Diskutieren Sie das Messprinzip, den Aufbau und die Eigenschaften des Strahlengangs, basierend auf den Angaben zum Versuchsaufbau. Beantworten Sie dabei, vor Beginn der Messung, die folgenden Fragen: \n", "\n", "- Welche Aufgabe erfüllt die Linse im Strahlengang? \n", "- Wo sollten Sie die Linse im Strahlengang positionieren, damit sie den Ausgang des Lasers auf den Endspiegel abbildet? \n", "- Berechnen Sie, mit Hilfe der [Linsengleichung](https://de.wikipedia.org/wiki/Linsengleichung), die Position $\\ell$, für die der Laser als Gegenstand $G$ in ein Bild $B$ im Endspiegel abgebildet wird (siehe [Skizze](https://gitlab.kit.edu/kit/etp-lehre/p1-praktikum/students/-/blob/main/Lichtgeschwindigkeit/figures/Drehspiegelmethode.png)).\n", "- Wieso ruht der beobachtete Leuchtfleck während der Messung auf der Skala, obwohl sich der Spiegel doch kontinuierlich dreht? \n", "- Geben Sie die Formel zur Berechnung der Lichtgeschwindigkeit an.\n", "- Geben Sie eine Abschätzung für die Größe des zu erwartenden Versatzes $s$ des Lichtflecks, relativ zum Fall des ruhenden Drehspiegels an.\n", "\n", "---\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In dieser Aufgabe sollen die Messprinzipien des Versuchs diskutiert werden. \n", "\n", "- Die Linse im Strahlengang hat hauptsächlich zwei Aufgaben. Sie sorgt dafür, dass nur Licht, dessen Ausbreitungsrichtung beim Rücklauf parallel zur optischen Achse liegt wieder auf den Drehspiegel fokussiert wird. Damit wird einmal der Einfluss von nicht parallelen Streustrahlen auf dem Schirm minimiert und andererseits wird dafür gesort, dass nur bei einer bestimmten Ausrichtung des Drehspiegels, nämlich dann wenn der Laserstrahl bei der ersten Reflektion perfekt in parallele Richtung reflektiert wird, der Laserstrahl wieder auf den Schirm zurücklaufen kann. Für alle anderen Winkel kommt das Licht nicht wieder auf dem Schrim an. Außerdem sorgt die Linse dafür, dass das Licht auf dem Weg zwischen Linse und Endspigel parallel läuft, sodass der Strahl nicht weiter divergiert sondern einen sauberen Punkt auf dem Schirm abbildet.\n", "\n", "- Die Linse muss zwischen Laser und Endspigel plaziert werden. Da zusätzlich noch der Drehspiegel im Fokus der Linse liegen soll muss die Linse zwischen Drehspiegel und Umlenkspiegel plaziert werden. Aus der Linsengleichung folgt, wie in der Dokiumentation ausgeführt ist, dass $\\frac{1}{f} = \\frac{1}{g'} + \\frac{1}{b'} = \\frac{1}{\\ell+f} + \\frac{1}{a+b-f}$ gelten muss. \n", "\n", "- Da die Brennweite der Linse fest ist muss die Fokussiereng des Bildes durch den Abstand des Lasers von der Linse erreicht werden. Es ergibt sich aus obiger Gleichung dass $\\ell= \\frac{f^{2}}{a+b-2f} = 6.57895\\,m$.\n", "\n", "- Wie ohen erwähnt werden nur diejenigen Strahlen, die vom Fokuspunkt in die Linse einfallen und dann parallel zur optischen Achse verlaufen auch wieder zurück durch die Linse auf den drehspiegel Reflektiert. Strahlen die nicht parallel laufen verlassen zur Seite den Aufbau und nicht wieder fokussiert. Nur dann, wenn der Spiegel in einem genauen winkel, nämlich ortogonal zur Winkelhalbierenden zwischen der Achse des Laser-geräts und optischen Achse der linse, wird das Licht in dieser Weise durch die Linse gelenkt. Dementsprechend sieht man nur dann einen Punkt, wenn der Spiegel einen genau definierten Winkel hat aber unser Auge ist nicht schnell genug das Flackern des Punktes wahr zu nehmen. \n", "\n", "- $c_{Luft} = 8\\pi\\frac{\\ell\\,\\nu\\left(a+b\\right)}{s}$ ist die Formel für die Lichtgeschwindigkeit im Medium, hier Luft. Diese muss dann noch mit $n_{Luft}$ multipliziert werden.\n", "\n", "- Der Versatz $s$ ist proportional zur Frequenz des Drehspiegels. Es gilt $s = 8\\pi\\frac{\\ell\\,\\nu\\left(a+b\\right)}{c}$. Das ergibt bei einer maximalen Rotationsgeschwindigkeit von 450 Hz einen Versatz von 3.42505mm." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Aufgabe 1.2: Justierung der Apparatur\n", "\n", "Überprüfen Sie mit Hilfe Ihres:r Tutor:in die Justierung des Versuchs. Gehen Sie dabei am besten entlang des Strahlengangs, wie folgt, vor: \n", "\n", "- **Laser – Drehspiegel**:
Der horizontal ausgesandte Laserstrahl sollte den ruhenden Drehspiegel mittig treffen und horizontal wieder verlassen. \n", "- **Drehspiegel – Umlenkspiegel**:
Richten Sie den Drehspiegelwinkel so aus, dass der reflektierte Strahl (noch ohne Linse) auf die Mitte des Umlenkspiegels fällt. Decken Sie hierzu den Endspiegel ab.\n", "- **Umlenkspiegel – Endspiegel**:
Richten Sie den Umlenkspiegel so aus, dass der Strahl auf die Mitte des Endspiegels fällt. \n", "- **Linse**:
Richten Sie die Linse aus. \n", "- **Endspiegel – Umlenkspiegel**:
Richten Sie den Endspiegel so aus, dass der Strahl in sich reflektiert wird (beachten Sie die Lichtflecke auf dem Umlenkspiegel). \n", "- **Kontrolle und Feinjustierung**:
Stellen Sie durch Feinabstimmung sicher, dass der zurückkehrende Strahl den Drehspiegel und die Laseraustrittsöffnung trifft. \n", "- **Schirm und USB-Mikroskop**:
Positionieren Sie das USB-Mikroskop hinter dem Schirm mit der Skala. Laser und Skala sind gleich weit vom Strahlteiler entfernt. \n", "- **Frequenzmessung am Drehspiegel**:
Positionieren Sie den Phototransistor für die Messung der Rotationsfrequenz des Drehspiegels.\n", "\n", "Notieren Sie sich alle Besonderheiten, die Ihnen dabei auffallen. \n", "\n", "**Achtung:** Optische Apparaturen sind sehr empfindlich. Eine grundsätzliche Neujustierung des Strahlengangs kann mehrere Stunden in Anspruch nehmen. \n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Der Aufbau war wie erwartet justiert. Es gab keine Besonderheiten oder Probleme mit dem Aufbau." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Aufgabe 1.3: Messung\n", "\n", "- Stellen Sie, zur Kalibration des Frequenzzählers, die Rotationsfrequenz des Drehspiegels, mit Hilfe der auftretenden Schwebung zwischen dem Motorengeräusch des Drehspiegels und dem Stimmgabelton für den Kammerton A ($440\\,\\mathrm{Hz}$) ein. Vergleichen Sie den erhaltenen Wert mit der elektronischen Frequenzanzeige und halten Sie den Kalibrationsfaktor in Ihrem Protokoll fest. \n", "- Tragen Sie eine geeignete Anzahl an Messpunkten für den Versatz $s$ des beobachteten Lichtpunkts für verschiedene Rotationsfrequenzen des Drehspiegels auf und bestimmen Sie daraus $c$.\n", "\n", "---" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "uf = ufloat(5,0.01)\n", "ub = ufloat(7.23,0.01)\n", "ua = ufloat(6.75,0.01)\n", "ul = uf**2/(ua+ub-2*uf)\n", "\n", "uv_corr = ufloat(440,3)\n", "ucorr = 440 / uv_corr\n", "\n", "%m In dieser Aufgabe geht es darum die Lichtgeschwindigkeit über den Versatz der Laserstrahlen mit dem Drehspiegel zu bestimmen. Wenn der Motor synchron mit der Schwingung der Stimmgalbel dreht zeigt die Anzeige einen Wert von [!uv_corr.n!]Hz mit einer Unsicherheit von [!uv_corr.s!]Hz. Damit ergibt sich ein Korrekturfaktor von [!ucorr.n:.2f!].\n", "\n", "%m Die Messung bei verschiedenen Frequenzen ergibt die folgenden Messwerte:\n", "\n", "a11 = \"\"\"\n", "v,dv,s,ds\n", "1550,120, 24e-3,0.1e-3\n", "5330,120, 24.5e-3,0.1e-3\n", "9250,120, 25e-3,0.1e-3\n", "13820,120, 25.5e-3,0.1e-3\n", "17300,120, 26e-3,0.1e-3\n", "21700,120, 26.5e-3,0.1e-3\n", "25280,120, 27e-3,0.1e-3\n", "29250,120, 27.5e-3,0.1e-3\n", "\"\"\"\n", "\n", "mpg = pd.read_csv(StringIO(a11))\n", "mpg[\"v\"] = mpg[\"v\"]/60\n", "mpg[\"dv\"] = mpg[\"dv\"]/60\n", "mpg.rename(columns={\"v\": 'Drehzahl in Hz', \"dv\": \"Unsicherheit in Hz\",\"s\": \"Distanz in m\", \"ds\": \"Unsicherheit in m\"}, inplace=True)\n", "display(mpg)\n", "\n", "v, dv, s, ds = np.genfromtxt(StringIO(a11), delimiter=',')[1:].transpose()\n", "uv = uarr(v/60,dv/60)\n", "us = uarr(s,ds)\n", "\n", "%m Da der Laserstrahl einen Durchmesser von 1mm hat und die Skala auch nur auf einen Millimeter genau ist wird der Fehler auf 0.1mm abgeschätzt. Die Frequenz schwankte stark im Bereich von $\\pm 120 U/min$. Deswegen wurden 2 Hz als Unsicherheit gewählt.\n", "\n", "%m Über eine lineare Regresion kann nun aus diesen Werten die Lichtgeschwindigkeit im Medium bestimmt werden. Dabei wird es einen y-Achsenabschnitt geben, weil nicht genau bestimmt wurde wo der Strahl bei Stillstand des Rotationsspiegels auftrifft. Das ist aber kein Problem, das sich die Lichtgeschwindigkeit nach der in der letzten Aufgabe genannten Formel aus der Steigung bestimmen lässt. Das modell ist also $s = 8\\pi\\frac{\\ell\\,\\nu\\left(a+b\\right)}{c_{Luft}} + d$ mit dem y-Achsenabschnitt $d$.\n", "\n", "def model(v,a,b,c,l,d):\n", " s = 8*pi*l*v*(a+b)/c + d\n", " return s\n", "\n", "xy_data = kafe2.XYContainer(x_data=nomv(uv), y_data=nomv(us))\n", "xy_data.add_error(axis='x', err_val=stdv(uv))\n", "xy_data.add_error(axis='y', err_val=stdv(us))\n", "\n", "lin_fit = kafe2.Fit(data=xy_data, model_function=model)\n", "lin_fit.add_parameter_constraint(name='l',value=ul.n,uncertainty=ul.s)\n", "lin_fit.add_parameter_constraint(name='a',value=ua.n,uncertainty=ua.s)\n", "lin_fit.add_parameter_constraint(name='b',value=ub.n,uncertainty=ub.s)\n", "lin_fit.do_fit()\n", "\n", "p = kafe2.Plot(lin_fit)\n", "p.x_label = 'Frequenz in Hz'\n", "p.y_label = 'Distanz in m'\n", "p.plot()\n", "p.show()\n", "\n", "_,_,c_luft,_,d = lin_fit.parameter_values\n", "_,_,Δc_luft,_,Δd = lin_fit.parameter_errors\n", "uc_luft = ufloat(c_luft,Δc_luft)\n", "\n", "uc = uc_luft*1.000292\n", "ud = ufloat(d,Δd)\n", "\n", "%m Die Anpassung mit Kafe2 ergibt einen Wert von $[!uc.n:.2f!]\\,\\frac{m}{s} \\pm [!uc.s:.2f!]\\,\\frac{m}{s}$, wobei noch mit dem Literaturwert von Luft $_{Luft} = 1.000292$ skaliert wurde (Quelle https://de.wikipedia.org/wiki/Brechungsindex abgerufen am 01.12.2023). Folglich ist der gemessene Wert im Rahmen der Unsicherheit mit der Definition für die Lichtgeschwindigkeit kompatibel. An den Werten für $\\chi^2/dof$ und $\\chi^2_{prop}$ ist zu sehen, dass es sich um einen einigermaßen guten Fit handelt, die Unsicherheiten für die Position des Lichtpunktes aber zu groß gewählt wurden. Hier wäre eine Auswertung des Kamerabildes mit dem Computer sicherlich genauer." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aufgabe 2: Phasenvergleichsmethode\n", "\n", "**Hinweise zu allen hier durchzuführenden Messungen finden Sie in der Datei [Hinweise-Aufgabe-2.md](https://gitlab.kit.edu/kit/etp-lehre/p1-praktikum/students/-/tree/main/Lichtgeschwindigkeit/doc/Hinweise-Aufgabe-2.md).**\n", "\n", "### Aufgabe 2.1: Vorbereitung\n", "\n", "Beantworten Sie zur Vorbereitung auf den Versuch die folgenden Fragen: \n", "\n", "- Welche Größenordnung sollte die Frequenz $\\nu$ der Lichtwelle haben, damit Sie mit dem vorliegenden Aufbau (siehe [Datenblatt.md]()), zwischen Empfänger- und Referenzsignal, eine Phasendifferenz von $\\Delta\\varphi=0,2\\,\\pi$, d.h. einem $1/10$ der Periodendauer, auflösen können? \n", "- Welche Ablenkgeschwindigkeit $u$ sollte ein Oszilloskop entlang der Zeitachse haben, damit eine solche Phasenverschiebung zu einer wahrnehmbaren Verschiebung z.B. von $\\Delta d=5\\,\\mathrm{mm}$ führt? Zu Ihrer Information: Für ein einfaches Oszilloskops beträgt die Ablenkgeschwindigkeit entlang der Zeitachse $u\\lesssim 10\\,\\mathrm{cm/\\mu s}$.\n", "\n", "---\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%m Beim folgenden Experiment wird nun der an einem Oszilloskop angezeigte zeitliche Versatz zwischen Referenzsignal und Lichtstrahl bei bestimmter Distanz gemessen und durch überlagern des Signals mit einem frequentiell nahen Signal die zeitliche Auflösung des Oszilloskozs verbessert.\n", "l = 1 #(Annahme)\n", "c_lit = 2.99792458E8 #Literaturwert\n", "ω = 2*np.pi*60E6\n", "ω_dot = 2*np.pi*59.9E6\n", "ω_bar = ω-ω_dot\n", "\n", "ν = 1/10*c_lit/l\n", "%m Für eine Phasendifferenz zwischen Empfänger- und Referenzsignal von $\\Delta \\varphi = \\frac{2\\pi}{10}$ bei Annahme der Lichtgeschwindigkeit im Vakuum und einer Distanz von einem Meter sollte die Lichtwelle eine Frequenz von ca. $\\nu = [!ν:.0f!]\\,Hz$, also in der Größenordnung von $10^[!int(np.log(ν)/np.log(10))!]\\, Hz$, haben.\n", "\n", "\n", "Δd = 5E-3\n", "\n", "u_erw = ω_bar/ω * c_lit *Δd/l\n", "%m Für eine Länge der Apperatur von einem Meter und die Vakuumlichtgeschwindigkeit erwartet man eine Ablenkgeschwindigkeit $u = [!u_erw*1E-4:.2!]\\,\\frac{cm}{\\mu s}$, um eine Verschiebung von $\\Delta d = 5\\,mm$ zu erhalten. Dies ist kleiner als die übliche Ablenkgeschwindigkeit von $u = 10\\,\\frac{cm}{\\mu s}$ eines Oszilloskops, also gut beobachtbar." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Aufgabe 2.2: Justierung der Apparatur\n", "\n", "Überprüfen Sie die Verbindungskabel anhand des Anschlussschemas auf der Frontplatte des Hauptnetzgeräts \\(siehe Skizze\\). Richten Sie einen möglichst parallelen Strahl vom Sender in Richtung des Empfängers ein. Nutzen Sie hierzu die Justierschrauben zur Zentrierung der Leuchtdiode des Senders und des verschiebbaren Kondensors am Lichtsendergehäuse. Stellen Sie die Sammellinse vor der Photodiode des Empfängers so auf, dass die Photodiode optimal ausgeleuchtet wird. Achtung: Stellen Sie sicher, dass das Lichtsignal des Senders auch bei maximalem Abstand zwischen Sender und Empfänger noch erkannt wird. Das Empfängersignal sollte bei jedem Abstand zwischen Sender und Empfänger ausreichend groß sein, die Amplitude am Empfänger sollte bei allen Entfernungen ±2V jedoch nicht überschreiten, weil die internen Mischerstufen der Elektronik sonst übersteuern und dabei die Phasenlage verfälschen.\n", "\n", "Notieren Sie sich alle Besonderheiten, die Ihnen dabei auffallen.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Am Oszilloskop gab es ein Rädchen zum Einstellen eines zusätzlichen Phasenversatzes am Oszilloskop, welches leider verstellt wurde. Um diesen Fehler zu beheben, wurde ein neuer Offset gemessen. Dieser wurde bestimmt, indem für die kleinste messbare Distanz des Laserdistanzmessers der Phasenversatz auf 0 gesetzt wurde und diese Länge als neue 0 von allen Messwerten abgezogen wird. Er ergab sich zu $l_{off} = (0.2 \\pm 0.005)\\,m$.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Aufgabe 2.3: Messung\n", "\n", "- Überprüfen und notieren Sie mit dem Oszilloskop die Differenzfrequenz $\\overline{\\omega}=(\\omega-\\omega')$. Dabei entspricht $\\omega=2\\,\\pi\\cdot60\\,\\mathrm{MHz}$ der Kreisfrequenz des für die Messung verwendeten Referenzsignals und $\\omega' = 2\\,\\pi\\cdot59,9\\,\\mathrm{MHz}$ der Kreisfrequenz des beigemischten Signals zum Zweck der Amplitudenmodulation. **Achtung**: Für eine zuverlässige Frequenzmessung benötigt das Oszilloskop mehrere vollständige Wellenzüge im Anzeigebereich.\n", "- Messen Sie, aus der Phasenverschiebung $\\Delta\\varphi$ zwischen Empfänger- und Referenzsignal, die zeitliche Differenz $\\Delta t$ zwischen Sender- und Empfängersignal, als Funktion des Abstands $\\ell$ des Senders vom Empfänger. Bestimmen Sie aus der Auftragung einer geeigneten Anzahl an Messpunkten $c$ mit entsprechender Unsicherheit $\\Delta c$.\n", "- Beschließen Sie diese Aufgabe damit, dass Sie $c$ durch die Bestimmung von $\\lambda /2$ mit Hilfe einer [Lissajous-Figur](https://de.wikipedia.org/wiki/Lissajous-Figur) bestimmen. Betreiben Sie das Oszilloskop hierzu im X/Y-Modus. **Achtung**: Da Sie hierzu fast die gesamte zur Verfügung stehende Strecke der Führungsschiene benötigen, müssen Sie die Phase am Betriebsgerät bei minimalem Abstand geeignet einstellen.\n", "\n", "---\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "l_off = ufloat(0.2,0.005)\n", "ω = 2*np.pi*ufloat(60E6,1e3) \n", "ω_dot = 2*np.pi*ufloat(59.9E6,1e3)\n", "#Ablesen und Messen der zeitlichen Ablenkung bei gegebener Länge\n", "ω_bar = ufloat(ω.n-ω_dot.n,20) #Abgelesen aus FT\n", "Δl = 1.5e-3\n", "arrl = [ufloat(0.261,Δl),\n", " ufloat(334e-3,Δl),\n", " ufloat(412e-3,Δl),\n", " ufloat(507e-3,Δl),\n", " ufloat(587e-3,Δl),\n", " ufloat(686e-3,Δl),\n", " ufloat(742e-3,Δl),\n", " ufloat(825e-3,Δl),\n", " ufloat(909e-3,Δl),\n", " ufloat(999e-3,Δl),\n", " ufloat(1072e-3,Δl),\n", " ufloat(1167e-3,Δl),\n", " ufloat(1360e-3,Δl),\n", " ufloat(1622e-3,Δl),\n", " ufloat(1872e-3,Δl),\n", " ufloat(2128e-3,Δl),\n", " ufloat(2353e-3,Δl),\n", " ufloat(2598e-3,Δl)] #Messen bei 12 verschiedenen Längen, eintragen hier #TODO Fehler abschätzen\n", "Δt_bar = 15e-9\n", "arrΔt_bar = [ufloat(138.8e-9,Δt_bar),\n", " ufloat(285.7e-9,Δt_bar),\n", " ufloat(449e-9,Δt_bar),\n", " ufloat(625.9e-9,Δt_bar),\n", " ufloat(789.1e-9,Δt_bar),\n", " ufloat(993.2e-9,Δt_bar),\n", " ufloat(1067e-9,Δt_bar),\n", " ufloat(1246e-9,Δt_bar),\n", " ufloat(1418e-9,Δt_bar),\n", " ufloat(1614e-9,Δt_bar),\n", " ufloat(1763e-9,Δt_bar),\n", " ufloat(1951e-9,Δt_bar),\n", " ufloat(2240e-9,Δt_bar),\n", " ufloat(2743e-9,Δt_bar),\n", " ufloat(3222e-9,Δt_bar),\n", " ufloat(3733e-9,Δt_bar),\n", " ufloat(4169e-9,Δt_bar),\n", " ufloat(4653e-9,Δt_bar)] #abgelesene Zeitdifferenzen #TODO Fehler abschätzen\n", "arrl = [i-l_off for i in arrl]\n", "%m Bei der Durchführung des Experiments wurden nun folgende Zeiten gemessen:\n", "table = pd.DataFrame({\n", " \"l [m]\": arrl,\n", " r\"$\\Delta\\bar{t}$ [s]\": arrΔt_bar,\n", "})\n", "display(Markdown(table.to_markdown()))\n", "%m Dabei wurde eine Unsicherheit von $[!ω_bar.s!]\\,Hz$ auf $\\bar{\\omega}$ angenommen, bestimmt aus der am Oszilloskop abgelesenen Fouriertransformationen. Auf die einzelnen Längen wurde eine Unsicherheit von $[!arrl[0].s*1e3:.3!]\\,mm$ angenommen, größer als die im Datenblatt angegebene Unsicherheit von $1.5\\,mm$ des Laserdistanzmessers, um Messfehler beim Verschieben der Schiene und insbesondere des Setzens des Nullpunktes zu berücksichtigen und auf das Ablesen des Zeitversatzes eine Unsicherheit von $[!Δt_bar*1e9:.3!]\\,ns$, da die Schwingungen rauschten.\n", "%m Die Daten werden nun ein erstes Mal gegen die annähernd erwartete Gerade der Vakuumlichtgeschwindigkeit geplottet.\n", "#erstes Plotten\n", "arrΔϕ = [ω_bar * i for i in arrΔt_bar]\n", "x = [i.n for i in arrl]\n", "xerror = [arrl.s for arrl in arrl]\n", "y = [i.n for i in arrΔϕ]\n", "yerror = [arrΔϕ.s for arrΔϕ in arrΔϕ]\n", "plt.scatter(x,y)\n", "k = np.linspace(x[0],x[len(x)-1])\n", "g = [ω.n/c_lit*i for i in k]\n", "plt.plot(k,g)\n", "plt.title(\"Gemessener Phasenversatz bei gegebener Distanz\")\n", "plt.xlabel(\"Distanz zum Empfänger in m\")\n", "plt.ylabel(\"Phasenversatz in Rad\")\n", "plt.show()\n", "tmp='''\n", "plt.errorbar(x,y,fmt='.',xerr=xerror,yerr=yerror)\n", "plt.title(\"Phasenverschiebung in Abhängigkeit von der Distanz\")\n", "plt.xlabel(\"Distanz des Empfängers in m\")\n", "plt.ylabel(r\"$\\Delta \\varphi$ in Rad\")\n", "plt.show()'''\n", "%m Es ist gut zu erkennen, dass die ersten 12 Punkte der Geraden sehr gut folgen, während die späteren einen konstanten Offset nach unten zu haben scheinen, der durch eine Pausierung und eine Beeinflussung der Messung zustande kam. Da zur Bestimmung der Lichtgeschwindigkeit nur die Steigung relevant ist, wird nun ein Multifit für die beiden Hälften durchgeführt, die sich um den Offset unterscheiden.Es wird ein Modell der Form $\\bar{\\Delta t} = \\frac{\\omega *l}{c*\\bar{\\omega}}+b$ gefittet.\n", "\n", "#Splitting the data\n", "x1 = x[:12]\n", "y1 = y[:12]\n", "xerror1 = xerror[:12]\n", "yerror1 = yerror[:12]\n", "\n", "x2 = x[12:]\n", "y2 = y[12:]\n", "xerror2 = xerror[12:]\n", "yerror2 = yerror[12:]\n", "\n", "# Defining Models\n", "def diffModel1(l,w=ω.n,c=2.98e8,b1=0):\n", " return w/c * l +b1\n", "\n", "def diffModel2(l,w=ω.n,c=2.98e8,b2=0):\n", " return w/c * l +b2\n", "\n", "#Creating the Fits\n", "fitlist=[\"\",\"\"]\n", "\n", "xy_data = kafe2.XYContainer(x_data = x1, y_data=y1)\n", "xy_data.label = 'Erste Hälfte'\n", "fitlist[0] = kafe2.Fit(data=xy_data, model_function=diffModel1)\n", "fitlist[0].add_error(\"x\",xerror1)\n", "fitlist[0].add_error(\"y\",yerror1)\n", "\n", "xy_data = kafe2.XYContainer(x_data = x2, y_data=y2)\n", "xy_data.label = 'Zweite Hälfte'\n", "fitlist[1] = kafe2.Fit(data=xy_data, model_function=diffModel2)\n", "fitlist[1].add_error(\"x\",xerror2)\n", "fitlist[1].add_error(\"y\",yerror2)\n", "\n", "#Defining the multiFit\n", "multi_fit = kafe2.MultiFit(fit_list=fitlist, minimizer='iminuit')\n", "multi_fit.add_parameter_constraint(\"w\",value=ω.n,uncertainty=ω.s)\n", "\n", "# Do the fit\n", "multi_fit.do_fit()\n", "\n", "# Plotting\n", "p = kafe2.Plot(multi_fit, separate_figures=False)\n", "p.x_label = \"Distanz des Empfängers in m\"\n", "p.y_label = r\"$\\Delta \\varphi$ in Rad\"\n", "p.plot()\n", "p.show()\n", "\n", "#Values\n", "#multi_fit.report()\n", "_,c,_,_ = multi_fit.parameter_values \n", "_,Δc,_,_ = multi_fit.parameter_errors\n", "\n", "tmp='''\n", "##Fitting\n", "%m An diese Daten wird nun ein Modell der Form $\\bar{\\Delta t} = \\frac{\\omega *l}{c*\\bar{\\omega}}+b$ gefittet. Der konstante Versatz b soll hier den eingestellten Offset am Oszilloskop berücksichtigen. und wird in der nachfolgenden Aufgabe zu Lissajous-Figuren von den Phasenwerten abgezogen.\n", "def diffModel(l,w=ω.n,c=2.98e8,b=0):\n", " return w/c * l +b\n", "xy_data = kafe2.XYContainer(x_data = x, y_data=y)\n", "xy_data.label = 'Phasenverschiebung in Abhängigkeit von der Distanz'\n", "diff_fit = kafe2.Fit(data=xy_data, model_function=diffModel)\n", "diff_fit.add_error(\"x\",xerror)\n", "diff_fit.add_error(\"y\",yerror)\n", "diff_fit.add_parameter_constraint(name=\"w\",value=ω.n,uncertainty=ω.s)\n", "diff_fit.do_fit()\n", "_,c,b = diff_fit.parameter_values\n", "_,Δc,Δb = diff_fit.parameter_errors\n", "#offset = ufloat(offset,Δoffset)\n", "p = kafe2.Plot(diff_fit)\n", "p.x_label = \"Distanz des Empfängers in m\"\n", "p.y_label = r\"$\\Delta \\varphi$ in Rad\"\n", "p.plot()\n", "p.show()'''\n", "\n", "#Auswertung\n", "%m Die globale $\\chi^2$-Wahrscheinlichkeit und $\\frac{\\chi^2}{ndof}$ sind recht nahe an eins, der Fit ist also akzeptabel. Der Literaturwert ist innerhalb des drei Sigmal Intervalls, ist also durchaus unwahrscheinlich, aber immer noch kompatibel. Wie im ersten Plot erkennbar, streuen die Punkte alle ein wenig um die Gerade, sodass nicht nur ein systematischer, sondern auch ein statistischer Fehler relevant ist. Die größten systematische Fehlerquellen waren vermutlich die Nullsetzung der Phase am Oszilloskop, führte diese doch dazu die Daten einmal zu splitten, und das korrekte Ablesen des zeitlichen Versatzes am Oszilloskops. Sofern man diese beiden allerdings bei mehreren Messreihen auch immer neu einstellen würde, würden allerdings auch diese Fehler zu einem statistischen werden, der sich im Grenzwert unendlicher Messungen (bzw. hier Messreihen), herausmitteln würde.\n", "#Man erkennt, dass die Punkte dem Fit im Plot scheinbar sehr gut folgen, allerdings ist die $\\chi^2$-Wahrscheinlichkeit recht niedrig, dafür ist $\\frac{\\chi^2}{ndof}$ recht nah an 1. Kritisch ist die gemessene Lichtgeschwindigkeit, #TODO\n", "\n", "### Messung durch eine Lissajous Figur #TODO Wie viele Werte? #TODO: Auch fitt*en?\n", "%m Es wird das Oszilloskop nun auf X/Y-Betrieb gestellt. Es wird das Eingangssignal gegen das Ausgangssignal dargestellt und der Sender so lange verschoben, bis feste Lissajous-Figuren entstehen. Für diese ist die Phasenverschiebung bekannt und es wird die zugehörige Länge gemessen.\n", "\n", "%m $\\varphi = 0 \\pi: 1.394m\\pm 0.03m$\n", "%m $\\varphi = 0.5 \\pi: 1.53m\\pm 0.03m$\n", "Δϕ_Liss = np.pi/2\n", "l_Liss = ufloat(1394e-3,30e-3)-ufloat(153e-3,30e-3)#[153e-3,1394e-3]\n", "c_Liss = ω.n*l_Liss/Δφ_Liss\n", "#print(c_Liss)\n", "%m Es ergibt sich eine Lichtgeschwindigkeit von $c = ([!c_Liss.n:.3!]\\pm[!c_Liss.s:.3!])\\,\\frac{m}{s}$. Die hohe Unsicherheit lässt sich durch die begrenzte Schiene des Lasers erklären, die es lediglich erlaubte zwei Liassajous-Figuren aufzunehmen, von denen eine der Kreis war, der durch die verschiedenen Achsenskalierungen und die Unterscheidung von perfektem Kreis von leicht verschobenen schwierig zu bestimmen war. Die Messung ist äußerst kompatibel mit dem Literaturwert." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aufgabe 3: Bestimmung des Brechungsindex $n$ von Wasser oder Plexiglas\n", "\n", "**Hinweise zu allen hier durchzuführenden Messungen finden Sie in der Datei [Hinweise-Aufgabe-3.md](https://gitlab.kit.edu/kit/etp-lehre/p1-praktikum/students/-/tree/main/Lichtgeschwindigkeit/doc/Hinweise-Aufgabe-3.md).**\n", "\n", "### Aufgabe 3.1: Bestimmung von $n$ mit der Apperatur von Aufgabe 2 \n", "\n", "Bestimmen Sie **mit dem Aufbau von Aufgabe 2** aus der Messung der Laufzeitdifferenz des Lichtstrahls im optisch dichteren Medium den Brechungsindex von ($n_{\\mathrm{H_{2}O}}$) Wasser oder ($n_{\\mathrm{Plex}}$) Plexiglas. Für Wasser ersetzen Sie $1\\,\\mathrm{m}$ Lichtweg in Luft durch $1\\,\\mathrm{m}$ Lichtweg in Wasser. Für Plexiglas verwenden Sie die $8$ und $30\\,\\mathrm{cm}$ langen Plexiglaszylinder. Die Messung mit *einem* der angebotenen Medien erfüllt diese Aufgabe bereits.\n", "\n", "---\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%m Es wird der Brechungsindex von Wasser und Plexiglas vermessen. Dazu wird der Aufbau aus 3.1 genutzt, allerdings ein Teil der Laufstrecke mit dem zu vermessenden Medium gefüllt.\n", "%m Vor den Messungen wurde der Phasenversatz am Oszilloskop bei $[!l_off!]\\,m$ auf 0 gesetzt und dieser Wert wird nun von allen vermessenen Längen abgezogen.\n", "%m Die Daten werden jeweils an ein Modell der Form $\\bar{\\Delta t\\,} =\\frac{\\omega}{\\bar{\\omega}c}(d*(n_{Material}-n_{Luft})+l)$ gefittet.\n", "tmp='''\n", "d = ufloat(,) #Strecke im Medium #TODO: Fehler abschätzen\n", "l = ufloat(,) -l_off#Gesamtlichtweg #TODO: Fehler abschätzen\n", "#TODO: Für c Literaturwert nehmen?\n", "Δt_bar_Medium = ufloat(,) #gemessener Zeitversatz #TODO: Fehler abschätzen\n", "\n", "Δt_Medium = Δt_bar_Medium * ω_bar/ω\n", "\n", "n = (c_lit*Δt_Medium-l)/d +1\n", "%m Es ergibt sich ein Brechungsindex von $n = [!nomv(n):.3!]\\pm [!stdv(n):.3!]$. Dies ist im Rahmen der Messungenauigkeiten #TODO Vergleich'''\n", "Δt = 15e-9\n", "#l_off_P1 = ufloat(432e-3,0.0015)\n", "d_P1 = 30e-2#40.1e-2\n", "a_P1 = \"\"\"\n", "l,dt\n", "0539e-3, 1034e-9\n", "0700e-3, 1344e-9\n", "0879e-3, 1703e-9\n", "1058e-3, 2057e-9\n", "1239e-3, 2449e-9\n", "1419e-3, 2781e-9\n", "1599e-3, 3151e-9\n", "1776e-3, 3505e-9\n", "1957e-3, 3842e-9\n", "\"\"\"\n", "\n", "mpg = pd.read_csv(StringIO(a_P1))\n", "mpg[\"l\"] = mpg[\"l\"] - l_off.n\n", "%m Messung in Plexiglas der Länge $[!d_P1!]\\,m$\n", "mpg.rename(columns={\"l\":\"Distanz in m\",\"dt\":\"Gemessener Zeitversatz\"}, inplace=True)\n", "display(mpg)\n", "\n", "l_P1,dt_P1 = np.genfromtxt(StringIO(a_P1), delimiter=',')[1:].transpose()\n", "l_P1 = [i-l_off.n for i in l_P1]#offset abziehen\n", "\n", "def NP1Model(l,n=1,w_bar=ω_bar.n,w=ω.n,d=d_P1):\n", " return 1/2.99792458e8*w/w_bar*(d*(n-1.000292)+l)\n", "xy_data = kafe2.XYContainer(x_data =l_P1 , y_data=dt_P1)\n", "xy_data.label = 'Zeitverschiebung in Abhängigkeit von der Distanz'\n", "n_fit = kafe2.Fit(data=xy_data, model_function=NP1Model)\n", "n_fit.add_error(\"x\",0.015)\n", "n_fit.add_error(\"y\",15e-9)\n", "n_fit.add_parameter_constraint(name=\"w\",value=ω.n,uncertainty=ω.s)\n", "n_fit.add_parameter_constraint(name=\"w_bar\",value=ω_bar.n,uncertainty=ω_bar.s)\n", "n_fit.add_parameter_constraint(name=\"d\",value=d_P1,uncertainty=1e-5)\n", "n_fit.do_fit()\n", "n_P1,_,_,_,= n_fit.parameter_values\n", "Δn_P1,_,_,_ = n_fit.parameter_errors\n", "p = kafe2.Plot(n_fit)\n", "p.x_label = \"Distanz des Empfängers in m\"\n", "p.y_label = \"Zeitversatz in s\"\n", "p.plot()\n", "p.show()\n", " \n", "#l_off_P2 = ufloat(211e-3,0.0015)\n", "d_P2 = 8e-2#18e-2 #Strecke im Medium # \n", "a_P2 = \"\"\"\n", "l,dt\n", "0339e-3, 424.5e-9\n", "0514e-3, 794.6e-9\n", "0699e-3, 1137e-9\n", "0878e-3, 1518e-9\n", "1053e-3, 1839e-9\n", "1238e-3, 2210e-9\n", "1418e-3, 2580e-9\n", "1599e-3, 2957e-9\n", "1777e-3, 3271e-9\n", "1957e-3, 3603e-9\n", "\"\"\"\n", "\n", "mpg = pd.read_csv(StringIO(a_P2))\n", "mpg[\"l\"] = mpg[\"l\"] - l_off.n\n", "%m Messung in Plexiglas der Länge $[!d_P2!]\\,m$\n", "mpg.rename(columns={\"l\":\"Distanz in m\",\"dt\":\"Gemessener Zeitversatz\"}, inplace=True)\n", "display(mpg)\n", "\n", "l_P2,dt_P2 = np.genfromtxt(StringIO(a_P2), delimiter=',')[1:].transpose()\n", "l_P2 = [i-l_off.n for i in l_P2]\n", "\n", "def NP2Model(l,n=1,w_bar=ω_bar.n,w=ω.n,d=d_P2):\n", " return 1/2.99792458e8*w/w_bar*(d*(n-1.000292)+l)\n", "xy_data = kafe2.XYContainer(x_data =l_P2 , y_data=dt_P2)\n", "xy_data.label = 'Zeitverschiebung in Abhängigkeit von der Distanz'\n", "n_fit = kafe2.Fit(data=xy_data, model_function=NP2Model)\n", "n_fit.add_error(\"x\",0.015)\n", "n_fit.add_error(\"y\",15e-9)\n", "n_fit.add_parameter_constraint(name=\"w\",value=ω.n,uncertainty=ω.s)\n", "n_fit.add_parameter_constraint(name=\"w_bar\",value=ω_bar.n,uncertainty=ω_bar.s)\n", "n_fit.add_parameter_constraint(name=\"d\",value=d_P2,uncertainty=1e-5)\n", "n_fit.do_fit()\n", "n_P2,_,_,_ = n_fit.parameter_values\n", "Δn_P2,_,_,_ = n_fit.parameter_errors\n", "p = kafe2.Plot(n_fit)\n", "p.x_label = \"Distanz des Empfängers in m\"\n", "p.y_label = \"Zeitversatz in s\"\n", "p.plot()\n", "p.show()\n", "%m Wie man erkennen kann, haben beide Fits für Plexiglas eine recht gute $\\chi^2$-Wahrscheinlichkeit und einen akzeptablen Wert für $\\frac{\\chi^2}{ndof}$. Allerdings weichen die bestimmten Brechzahlen stark voneinander ab und sind im Rahmen ihrer Unsicherheiten nicht kompatibel. Für das $[!d_P1!]\\,m$ lange Rohr ergab sich eine Brechzahl von $n_{Plexiglas} = [!n_P1:.3!]\\pm [!Δn_P1:.3!]$ und für das $[!d_P2!]\\,m$ lange Rohr ergab sich eine Brechzahl von $n_{Plexiglas} = [!n_P2:.3!]\\pm [!Δn_P2:.3!]$. Besonders der zweite Wert weicht dabei stark vom Literaturwert von $n_{Plexiglas} = 1.49$ (nach https://www.chemie.de/lexikon/Brechzahl.html aufgerufen am 15.12.2023 um 17:36) ab. Da die Fits beide jeweils recht gute Wahrscheinlicheiten haben, ist davon auszugehen, dass systematische Fehler begangen wurden, vermutlich die Bestimmung des Nullpunktes, die auch bei Aufgabe 2 für Probleme gesorgt hat, hier aber wirklich relevant wird, da die zu bestimmende Größe vom y-Achsenabschnitt abhängt. In Kombination damit wurden die Fehler auf diese Nullsetzung zu klein abgeschätzt. \n", "\n", "#l_off_W = ufloat(1149e-3,0.0015)\n", "d_W = 994e-3 #Strecke im Medium #TODO\n", "a_W = \"\"\"\n", "l,dt\n", "1196e-3, 2721e-9\n", "1361e-3, 3020e-9\n", "1537e-3, 3391e-9\n", "1719e-3, 3739e-9\n", "1899e-3, 4093e-9\n", "2079e-3, 4457e-9\n", "\"\"\"\n", "\n", "mpg = pd.read_csv(StringIO(a_W))\n", "mpg[\"l\"] = mpg[\"l\"] - l_off.n\n", "%m Messung in Wasser der Länge $[!d_W!]\\,m$\n", "mpg.rename(columns={\"l\":\"Distanz in m\",\"dt\":\"Gemessener Zeitversatz\"}, inplace=True)\n", "display(mpg)\n", "\n", "l_W,dt_W = np.genfromtxt(StringIO(a_W), delimiter=',')[1:].transpose()\n", "l_W = [i-l_off.n for i in l_W]\n", "\n", "def NWModel(l,n=1,w_bar=ω_bar.n,w=ω.n,d=d_W):\n", " return 1/2.99792458e8*w/w_bar*(d*(n-1.000292)+l)\n", "xy_data = kafe2.XYContainer(x_data =l_W , y_data=dt_W)\n", "xy_data.label = 'Zeitverschiebung in Abhängigkeit von der Distanz'\n", "n_fit = kafe2.Fit(data=xy_data, model_function=NWModel)\n", "n_fit.add_error(\"x\",0.005)\n", "n_fit.add_error(\"y\",Δt)\n", "n_fit.add_parameter_constraint(name=\"w\",value=ω.n,uncertainty=ω.s)\n", "n_fit.add_parameter_constraint(name=\"w_bar\",value=ω_bar.n,uncertainty=ω_bar.s)\n", "n_fit.add_parameter_constraint(name=\"d\",value=d_W,uncertainty=1e-3)\n", "n_fit.do_fit()\n", "n_W,_,_,_ = n_fit.parameter_values\n", "Δn_W,_,_,_ = n_fit.parameter_errors\n", "p = kafe2.Plot(n_fit)\n", "p.x_label = \"Distanz des Empfängers in m\"\n", "p.y_label = \"Zeitversatz in s\"\n", "p.plot()\n", "p.show()\n", "%m Die $\\chi^2$-Wahrscheinlichkeit des Fits ist etwas geringer als erhofft, zusammen mit $\\frac{\\chi^2}{ndof}$ aber in einem akzeptablen Bereich. Der bestimmte Wert von $n_{Wasser} = [!n_W:.3!]\\pm [!Δn_W:.3!]$ ist gut mit dem Literaturwert von $n_{Wasser} = 1.3330$ (vom Datenblatt nach Wikipedia) kompatibel, wobei auch hier der angegeben Fehler etwas gering erscheint, die Distanzmessung allerdings mit einem digital abzulesenden genauen Messgerät erfolgte (Unsicherheit von $0.0015\\,m$) und die Zeitmessung zwar rauschbehaftet, allerdings durch ihre digitale Natur ebenfalls nicht zu unsicher (angenommene Unsicherheit von $[!Δt*1e9:.3!]\\,ns$) war. Der Fehler des Messgeräts wurde auf $0.005\\,m$ erhöht, um die Unsicherheit in der Wahl des Nullpunktes zu berücksichtigen, diese Schätzung scheint allerdings zu konservativ gewesen zu sein. Andere Aufgetretene Unsicherheiten waren eine von $[!ω.s!]\\,Hz$ auf die Hauptfrequenz und die zuvor bereits angesprochene auf $\\bar{\\omega}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Aufgabe 3.2: Bestimmung von $n$ mit Hilfe eines Laserentfernungsmessers\n", "\n", "Heute benutzt fast jeder Handwerker einen handelsüblichen Laserentfernungsmesser, um z.B. den Abstand zweier Wandflächen eines Neubaus zu vermessen. Wiederholen Sie die Messung aus Aufgabe 3.1 mit dem im Praktikum zur Verfügung stehenden Laserentfernungsmesser. Stellen Sie hierzu eine der bereitstehenden Küvetten jeweils einmal längs und einmal quer in den Strahlengang zwischen dem Entfernungsmesser und einem beliebigen Reflektor. Berechnen Sie aus den vom Gerät angezeigten Entfernungen und den Abmessungen der Küvetten den entsprechenden Brechungsindex. \n", "\n", "Es stehen Ihnen hierzu Küvetten gefüllt mit Wasser und Silikonöl zur Verfügung. Es genügt, wenn Sie für diese Aufgabe die Messung mit *einem* Material durchführen." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import warnings\n", "warnings.filterwarnings('ignore')\n", "\n", "%m In diesem Experiment soll der Brechungsindex von verschiedenen Medien mit Hilfe eines Laserentfernungsmessgeräts bestimmt werden. Dabei werden die Strecke im Medium d und die durchs medium gemessene verfälschte Streche l' bestimmt. Die Differenz zu den Längenmessungen mit der leeren Küvette gibt die durchs Medium erzeugte scheinbare Längenänderung. Werte für d wurden aus dem Datenblatt entnommen, da leider kein akkurates Messinstrument für die Dimensionsbestimmung vorhanden ist. Allerdings sind so die Unsicherheiten nicht bekannt, da sie im Datenblatt nicht aufgeführt sind. Deswegen wurde die Unsicherheiten auf 1mm geschätzt. Die Unsicherheit des Entfernungsmesser ist laut Hersteller 1.5 mm.\n", "\n", "Null = 0.351\n", "d1 = 0.1\n", "d2 = 0.05\n", "\n", "ohne_l1 = 0.352\n", "ohne_l2 = 0.353\n", "\n", "silikon_l1 = 0.369\n", "silikon_l2 = 0.394\n", "\n", "wasser_l1 = 0.356\n", "wasser_l1 = 0.382\n", "\n", "d = [d1,d2,d1,d2,d1,d2]\n", "ls = [ohne_l1,ohne_l2,silikon_l1,silikon_l2,wasser_l1,wasser_l1]\n", "l = [ohne_l1,ohne_l2,ohne_l1,ohne_l2,ohne_l1,ohne_l2]\n", "uls = uarr(ls, 0.0015)\n", "ul = uarr(l, 0.0015)\n", "ud = uarr(d, 0.001)\n", "\n", "un = (uls-ul)/ud + 1\n", "\n", "mpg = pd.DataFrame()\n", "mpg[\"Material\"] = [\"Luft\",\"Luft\",\"Silikonöl\",\"Silikonöl\",\"Wasser\",\"Wasser\"]\n", "mpg[\"d\"] = nomv(ud)\n", "mpg[\"Unsicherheit d\"] = stdv(ud)\n", "mpg[\"n\"] = nomv(un)\n", "mpg[\"Unsicherheit zu n\"] = stdv(un)*[0,0,1,1,1,1]\n", "mpg[\"n\"][:2] = [None,None]\n", "mpg[\"Unsicherheit zu n\"][:2] = [None,None]\n", "display(mpg)\n", "\n", "%m Es ist zu sehen, dass die einzelnen Brechzahlen für Silikonöl nicht im Rahmen der Messunsicherheit miteinander kompatibel sind. Es kann sein, dass hier eine Reflektion gemessen wird, denn es schwierig Reflektionen in der Messung auszuschließen. Keiner der beiden Werte scheint besonders plausibel.\n", "\n", "n_ges = np.sum(nomv(un[2:4])/stdv(un[2:4]))/np.sum(1/stdv(un[2:4]))\n", "Δn_ges = np.sqrt(np.sum((nomv(un[2:4])-n_ges)**2/stdv(un[2:4]))/np.sum(1/stdv(un[2:4])))\n", "\n", "%m Damit ergibt sich $n = [!n_ges:.4f!] \\pm [!Δn_ges:.4f!]$ für Silikonöl als gewichteter Mittelwert aus der Formel $n = \\frac{\\ell_{Medium}-\\ell_{Luft}}{d}+1$.\n", "\n", "n_ges = np.sum(nomv(un[4:])/stdv(un[4:]))/np.sum(1/stdv(un[4:]))\n", "Δn_ges = np.sqrt(np.sum((nomv(un[4:])-n_ges)**2/stdv(un[4:]))/np.sum(1/stdv(un[4:])))\n", "\n", "%m Für Wasser ergibt sich $n = [!n_ges:.4f!] \\pm [!Δn_ges:.4f!]$. \n", "\n", "%m Der gewichtete Mittelwert für das Silikonöl ist mit Vorsicht zu genießen, da er aus nicht kompatiblen Werten errechnet wurde und wenig Aussagekraft hat. Deswegen ist die Unsicherheit für diesen Wert auch sehr groß. Die Messung für Wasser ist im Rahmen der Unsicherheit mit dem Erwarteten Wert von 1.33 kompatibel. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "argv": [ "/usr/bin/python3", "-m", "ipykernel", "--matplotlib=inline", "-c", "%config InlineBackend.figure_formats = set(['retina'])\nimport matplotlib; matplotlib.rcParams['figure.figsize'] = (12, 7)", "-f", "{connection_file}" ], "display_name": "Python 3 (Ubuntu Linux)", "env": {}, "language": "python", "name": "python3-ubuntu", "resource_dir": "/usr/local/share/jupyter/kernels/python3-ubuntu" }, "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.10.12" } }, "nbformat": 4, "nbformat_minor": 4 }