commit 1ef5c20317286cc4c0ca82b02f88a5787b9208ec Author: Marius Drechsler Date: Fri May 30 17:01:04 2025 +0200 Write IP Bericht diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4e3c217 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +result* +.direnv/ +.envrc +*.pdf diff --git a/.typst-lsp b/.typst-lsp new file mode 100644 index 0000000..9554fc9 --- /dev/null +++ b/.typst-lsp @@ -0,0 +1 @@ +main-file= "main.typ" diff --git a/bibliography.bib b/bibliography.bib new file mode 100644 index 0000000..b1c7bb3 --- /dev/null +++ b/bibliography.bib @@ -0,0 +1,185 @@ +@inproceedings{tmhd1, + title={Two-metric helper data for highly robust and secure delay PUFs}, + author={Danger, Jean-Luc and Guilley, Sylvain and Schaub, Alexander}, + booktitle={2019 IEEE 8th International Workshop on Advances in Sensors and Interfaces (IWASI)}, + pages={184--188}, + year={2019}, + organization={IEEE} +} + +@inproceedings{tmhd2, + title={Analysis and protection of the two-metric helper data scheme}, + author={Tebelmann, Lars and K{\"u}hne, Ulrich and Danger, Jean-Luc and Pehl, Michael}, + booktitle={International Workshop on Constructive Side-Channel Analysis and Secure Design}, + pages={279--302}, + year={2021}, + organization={Springer} +} + +@article{smhd, + title={Helper Data Schemes for Coded Modulation and Shaping in Physical Unclonable Functions}, + author={Fischer, Robert FH}, + journal={arXiv preprint arXiv:2402.18980}, + year={2024} +} + +@book{dekking2005modern, + title={A Modern Introduction to Probability and Statistics: Understanding why and how}, + author={Dekking, Frederik Michel}, + year={2005}, + publisher={Springer Science \& Business Media} +} + +@inproceedings{dataset, + title={Large scale RO PUF analysis over slice type, evaluation time and temperature on 28nm Xilinx FPGAs}, + author={Hesselbarth, Robert and Wilde, Florian and Gu, Chongyan and Hanley, Neil}, + booktitle={2018 IEEE International Symposium on Hardware Oriented Security and Trust (HOST)}, + pages={126--133}, + year={2018}, + organization={IEEE} +} + +@book{schmutz, + title={Introduction to mathematical statistics}, + author={Hogg, Robert V and McKean, Joseph W and Craig, Allen T and others}, + year={2013}, + publisher={Pearson Education India} +} + +@inproceedings{PUFIntro, + title={Introduction to physically unclonable fuctions: Properties and applications}, + author={Garcia-Bosque, Miguel and D{\'\i}ez-Se{\~n}orans, Guillermo and S{\'a}nchez-Azqueta, Carlos and Celma, Santiago}, + booktitle={2020 European Conference on Circuit Theory and Design (ECCTD)}, + pages={1--4}, + year={2020}, + organization={IEEE} +} + +@article{PUFChartRef, + title={Variable-length bit mapping and error-correcting codes for higher-order alphabet pufs—extended version}, + author={Immler, Vincent and Hiller, Matthias and Liu, Qinzhi and Lenz, Andreas and Wachter-Zeh, Antonia}, + journal={Journal of Hardware and Systems Security}, + volume={3}, + pages={78--93}, + year={2019}, + publisher={Springer} +} + + +@article{PUFIntro2, + title={Physically Unclonable Functions: Constructions, Properties and Applications (Fysisch onkloonbare functies: constructies, eigenschappen en toepassingen)}, + author={Maes, Roel}, + year={2012} +} + +@inproceedings{fuzzycommitmentpaper, + title={Achieving secure fuzzy commitment scheme for optical pufs}, + author={Ignatenko, Tanya and Willems, Frans}, + booktitle={2009 Fifth International Conference on Intelligent Information Hiding and Multimedia Signal Processing}, + pages={1185--1188}, + year={2009}, + organization={IEEE} +} + +@article{ruchti2021decoder, + title={When the Decoder Has to Look Twice: Glitching a PUF Error Correction}, + author={Ruchti, Jonas and Gruber, Michael and Pehl, Michael}, + journal={Cryptology ePrint Archive}, + year={2021} +} + +@article{delvaux2014helper, + title={Helper data algorithms for PUF-based key generation: Overview and analysis}, + author={Delvaux, Jeroen and Gu, Dawu and Schellekens, Dries and Verbauwhede, Ingrid}, + journal={IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems}, + volume={34}, + number={6}, + pages={889--902}, + year={2014}, + publisher={IEEE} +} + +@inproceedings{maes2009soft, + title={A soft decision helper data algorithm for SRAM PUFs}, + author={Maes, Roel and Tuyls, Pim and Verbauwhede, Ingrid}, + booktitle={2009 IEEE international symposium on information theory}, + pages={2101--2105}, + year={2009}, + organization={IEEE} +} + + +@inproceedings{bezdek_notes_2002, + address = {Berlin, Heidelberg}, + title = {Some {Notes} on {Alternating} {Optimization}}, + isbn = {978-3-540-45631-5}, + doi = {10.1007/3-540-45631-7_39}, + abstract = {Let f : ℜs ↦ ℜ be a real-valued scalar field, and let x = (x1,…, xs)T ∈ ℜs be partitioned into t subsets of non-overlapping variables as x = (X1,…,Xt )T, with Xi ∈ ℜp1, for i = 1,…, t, ∈ti=1pi = s Alternating optimization (AO) is an iterative procedure for minimizing (or maximizing) the function f(x) = f(X1,X2,…,Xt) jointly over all variables by alternating restricted minimizations over the individual subsets of variables X1,…,Xt. AO is the basis for the c-means clustering algorithms (t=2), many forms of vector quantization (t = 2, 3 and 4), and the expectation-maximization (EM) algorithm (t = 4) for normal mixture decomposition. First we review where and how AO fits into the overall optimization landscape. Then we discuss the important theoretical issues connected with the AO approach. Finally, we state (without proofs) two new theorems that give very general local and global convergence and rate of convergence results which hold for all partitionings of x.}, + language = {en}, + booktitle = {Advances in {Soft} {Computing} — {AFSS} 2002}, + publisher = {Springer}, + author = {Bezdek, James C. and Hathaway, Richard J.}, + editor = {Pal, Nikhil R. and Sugeno, Michio}, + year = {2002}, + pages = {288--300}, + file = {Bezdek and Hathaway - 2002 - Some Notes on Alternating Optimization.pdf:/home/mya/Zotero/storage/35MSSAAJ/Bezdek and Hathaway - 2002 - Some Notes on Alternating Optimization.pdf:application/pdf}, +} + +@phdthesis{janis_heims_checking_2024, + title = {Checking of {Quantum} {Circuits} using {Diff} {Algorithms}}, + url = {https://github.com/TechnoElf/mqt-qcec-diff-thesis}, + language = {en}, + school = {Technical University of Munich}, + author = {{Janis Heims}}, + month = oct, + year = {2024}, + file = {Janis Heims - 2024 - Checking of Quantum Circuits using Diff Algorithms.pdf:/home/mya/Zotero/storage/BKU9ANZH/Janis Heims - 2024 - Checking of Quantum Circuits using Diff Algorithms.pdf:application/pdf}, +} + +@article{dave_fuzzy_1990, + title = {Fuzzy {Shell}-{Clustering} and {Applications} to {Circle} {Detection} in {Digital} {Images}}, + volume = {16}, + issn = {0308-1079}, + url = {https://doi.org/10.1080/03081079008935087}, + doi = {10.1080/03081079008935087}, + abstract = {A new type of Fuzzy Clustering algorithm called Fuzzy-Shell Clustering (FSC) is introduced, The FSC algorithm seeks cluster prototypes that are p-dimensional hyper-spherical-shells. In two-dimensional data, this amounts to finding cluster prototypes that are circles. Thus the FSC algorithm can be applied for detection of circles in digital images. The algorithm does not require the data-points to be in any particular order, therefore its performance can be compared with the global transformation techniques such as Hough transforms. Several numerical examples are considered and the performance of the FSC algorithm is compared to the performance of the methods based on generalized Hough transform (HT). The FSC is shown to be superior to the HT method with regards to memory requirement and computation time. Like the HT method, the FSC is successful even if only a part of a circular shape is present in the image. Other potential applications of FSC are also considered.}, + number = {4}, + urldate = {2024-10-07}, + journal = {International Journal of General Systems}, + author = {DAVE, RAJESH N.}, + month = may, + year = {1990}, + note = {Publisher: Taylor \& Francis +\_eprint: https://doi.org/10.1080/03081079008935087}, + pages = {343--355}, + file = {Full Text PDF:/home/mya/Zotero/storage/APPNGAIZ/DAVE - 1990 - Fuzzy Shell-Clustering and Applications to Circle .pdf:application/pdf}, +} + +@article{al-nimr_international_nodate, + title = {{THE} {INTERNATIONAL} {ADVISORY} {BOARD}}, + abstract = {A self-contained abstract outlining in a single paragraph the aims, scope and conclusions of the paper must be supplied.}, + language = {en}, + author = {Al-Nimr, Moh'd A}, + file = {Al-Nimr - THE INTERNATIONAL ADVISORY BOARD.pdf:/home/mya/Zotero/storage/IML5EJ2I/Al-Nimr - THE INTERNATIONAL ADVISORY BOARD.pdf:application/pdf}, +} + +@article{do_what_2008, + title = {What is the expectation maximization algorithm?}, + volume = {26}, + copyright = {2008 Springer Nature America, Inc.}, + issn = {1546-1696}, + url = {https://www.nature.com/articles/nbt1406}, + doi = {10.1038/nbt1406}, + abstract = {The expectation maximization algorithm arises in many computational biology applications that involve probabilistic models. What is it good for, and how does it work?}, + language = {en}, + number = {8}, + urldate = {2024-10-07}, + journal = {Nature Biotechnology}, + author = {Do, Chuong B. and Batzoglou, Serafim}, + month = aug, + year = {2008}, + note = {Publisher: Nature Publishing Group}, + keywords = {Agriculture, Bioinformatics, Biomedical Engineering/Biotechnology, Biomedicine, Biotechnology, general, Life Sciences}, + pages = {897--899}, + file = {Full Text PDF:/home/mya/Zotero/storage/H4DCQ3TP/Do and Batzoglou - 2008 - What is the expectation maximization algorithm.pdf:application/pdf}, +} diff --git a/content/background.typ b/content/background.typ new file mode 100644 index 0000000..9259b89 --- /dev/null +++ b/content/background.typ @@ -0,0 +1,92 @@ +#import "@preview/glossarium:0.5.6": * + += Technischer Hintergrund + + + +Die Operation einer #gls("puf") beinhaltet zwei verschiedene Arbeitsschritte: *Enrollment* und *Reconstruction*.\ +Als Enrollment wird die erste Messung des Verhaltens des Schaltkreises bezeichnet. +Diese kann direkt in der Fertigungsstätte des Schaltkreises durchgeführt werden. +Da bis zu diesem Punkt noch keine andere Messung mit dem Schaltkreis durchgeführt worden ist, können die Ergebnisse aus diesem Schritt als unveränderlichen Referenzwert für das Geheimnis des Schaltkreises angenommen werden. +Anschließend wird aus den Messergebnissen mittels eines Quantisierungsprozesses ein geheimer Schlüssel generiert.\ +Reconstruction bezeichnet jede weitere Messung des Verhaltens des Schaltkreises. +Da Messfehler in diesem Schritt nicht ausgeschlossen werden können, ist davon auszugehen, dass das hier gemessene Geheimnis nicht mit dem Referenz-Geheimnis bzw. dem geheimen Schlüssel nach der Enrollment Phase vollständig übereinstimmt. +Die Anzahl der Bits, die zwischen diesen beiden Schlüsseln verschieden ist, ist als Bitfehlerrate definiert. +Zusätzlich ist davon auszugehen, dass die Messwerte einer #gls("puf") +normalverteilt und mittelwertfrei sind. + +Die Ausgangslage der Praxis stellt die Bachelorarbeit "Towards Efficient Helper Data Algorithms for Multi-Bit PUF Quantization" da. +Konkret wurden in der Arbeit zwei verschiedene Methoden zur Verbesserung der Bitfehlerrate nach der Reconstruction Phase für Quantisierungen höherer Ordnung analyisert. +Die erste Methode beschreibt eine Verallgemeinerung der #gls("tmhdt") @tmhd1. +Mit Hilfe von #gls("tmhdt") werden zwei verschiedene Quantisiererfunktionen definiert. Während der Enrollment Phase wird anschließend entschieden, welche der beiden Funktionen ein verlässlicheres Ergebnis bei wiederholten Messergebnissen hervorrufen wird. +Die #gls("smhdt") verallgemeinert dieses Konzept auf die Quantisierung mit mehr als einem Bit @smhd. +Da mit der Publikation von Fischer @smhd bereits eine mögliche Implementation von #gls("smhdt") vorgestellt wurde, bildet die in der Arbeit vorgelegte Implementierung eine Basis um die Performanz der zweiten vorgestellten Methode einordnen zu können. + +Im zweiten Teil der Arbeit wurde ein neuer Ansatz zur Verbesserung der Fehlerrate implementiert und genauer analysiert. +Die Grundlage der neuen Methode ergibt sich aus der natürlichen Beschaffenheit der Standardnormalverteilung. +Da der Erwartungswert einer mittelwertfreien Normalverteilung bei $0$ liegt und ein Vorzeichen-basierter 1-bit Quantisierer seine Entscheidungsgrenze ebenfalls bei $0$ definiert, sind die Messwerte welche nahe der $0$ liegen aufgrund ihrer inhärenten Messschwankungen dazu anfällig, bei wiederholten Messungen und Quantisierungen unterschiedliche Ergebnisse zu verursachen. + +Dieses Problem wird in @bach_original_1 grafisch verdeutlicht. + +#figure( + include("../graphics/background/sign-based-overlay.typ"), + caption: [1-bit Quantisierer mit normalverteilten Eingangswerten] +) + +Für die Umsetzung der neuen Methode werden gewichtete Summen aus mindestens 3 Eingangswerten -- wie Ring-Oszillator-Differenzen -- gebildet. Die Vorfaktoren der Summanden sind festgelegt als $plus.minus 1$, wobei die jeweiligen Vorzeichen als Helperdaten abgespeichert werden. + +$ f(bold(x), bold(h)) = h_1 x_1 + h_2 x_2 + h_3 x_3 $ + +@eq:weighted_sum zeigt die Struktur einer Funktion mit drei Eingangswerten und ihrer jeweiligen Gewichtung durch $h_1$, $h_2$ und $h_3$. +Diese Vorfaktoren sollen nun so gewählt werden, dass die Werte der resultierenden Summen einen möglichst großen Abstand zu ihrer jeweils nächsten Quantisierergrenze haben. + +Eine Lösung für den 1-bit Fall der in @bach_original_1 dargestellt wird, ist die betragsmäßige Maximierung der Werte der gewichteten Summen. + +#figure( + include("../graphics/background/z_distribution.typ"), + caption: [Darstellung der optimierten Eingangswerte] +) + +Mathematisch lässt sich dies durch die Maximierung des Betrags der Funktion aus @eq:weighted_sum herleiten: + +$ max_(h_1, h_2, h_3) |f(bold(x), bold(h))| $ + +@eq:1bit_opt definiert hiermit die Funktion zur Optimierung der Eingangwerte vor dem Quantisierer für den 1-bit Fall. +Jedoch wird die Definition dieser Funktion für eine Vorbereitung der Quantisierung höherer Ordnung um einiges komplexer. + +#figure( + include("../graphics/background/two-bit-enroll.typ"), + caption: [2-bit Quantisierer Funktion] +) + +Anstelle einer Quantisierung basierend auf dem Vorzeichen des Eingangswertes, wie in @bach_original_1 ist bei einer Quantisierung höherer Ordnung eine mehrstufige Entscheidungsfunktion mit mehreren Grenzen wie in @fig:2bit_quant notwendig. +Es stellt sich nun die Frage, wie man die Grenzen $g_1$ und $g_2$ aus @fig:2bit_quant wählt, um die Optimierung des 1-bit Falles aus @fig:bach_1_optimal auf Fälle höherer Bit-Ordnung zu übertragen. + +Die ersten Ansätze der Bachelorarbeit beinhalteten zunächst ein naives Raten der möglichen Grenzen für die Quantisierung basierend auf einer Schätzung der Form der resultierenden Verteilung. +Zunächst wurde ein globales Optimierungsverfahren untersucht, bei dem nach einer ersten Optimierung nach der maximalen Distanz zu allen Grenzen, neue Grenzen basierend auf einer empirischen kumulativen Wahrscheinlichkeitsdichtefunktion definiert werden. Dieser Prozess wurde anschließend über mehrere Iterationen hinweg durchgeführt, um ein stabiles Ergebnis Wahrscheinlichkeitsverteilungen zu erhalten. + +#figure( +grid( + columns: (1fr, 1fr), + rows: (2), + [//#figure( + #image("../graphics/background/bach/instability/frame_1.png") + #v(-2em) + //) + Iteration 1], + [//#figure( + #image("../graphics/background/bach/instability/frame_18.png") + #v(-2em) + //) + Iteration 18], +), + caption: [Wahrscheinlichkeitsverteilungen für verschiedene Iterationen] +) + +@fig:bach_instability zeigt die Ergebnisse dieses iterativen Prozesses zu verschiedenen Zeitpunkten. +Wegen des sehr instabilen Verhaltens der Verteilungen auch über mehrere Iterationen hinweg wurde eine zweite, konvergierende Methode untersucht. + +Anstelle die Gewichtungen zu wählen, dass die resultierende Summe möglichst weit weg von allen Grenzen liegt, sollen die Summen möglichst genau die Mitten zwischen den Grenzen treffen und so implizit möglichst weit weg von den Grenzen liegen. +Diese Methode hatte zwar den Vorteil, dass die hervorgehenden Verteilungen zu einer festen Verteilung konvergieren, jedoch zeigte eine spätere Analyse keine signifikante Verbesserung der Bitfehlerrate auf. + +Ziel der Ingenieurspraxis ist nun, eine mögliche Lösung für das Problem der Konvergenz dieses Ansatzes zu finden und mit anderen Methoden zur Verbesserung der Bitfehlerrate zu vergleichen. diff --git a/content/execution.typ b/content/execution.typ new file mode 100644 index 0000000..a85b64f --- /dev/null +++ b/content/execution.typ @@ -0,0 +1,116 @@ +#import "@preview/codly:1.3.0": * +#import "@preview/codly-languages:0.1.1": * +#show: codly-init.with() +#codly(languages: codly-languages) + += Konzeption und Durchführung + +== Literaturrecherche und Konzeption + +Zunächst fand eine tiefere Einarbeitung in die existierende Literatur zu alternierenden Optimierungsverfahren statt. +Aufgrund der Nähe der Themen hat sich eine Recherche zu den "k-Means Clustering" und "Expectation-maximization" Algorithmen angeboten. Spannende Literatur zu diesen Themen wurde von Bezdek @bezdek_notes_2002 -- allgemein zu alternierenden Optimierungsverfahren und spezifischer von Do @do_what_2008 publiziert. +Wenngleich diese Publikationen keinen direkten Weg zur Lösung der Problemstellung der Praxis bieten konnten, stellten sie ein gutes Grundverständnis für diese Art von Problem dar. + +// Hier noch Unterschiede und Gemeinsamkeiten der Literatur vs. Problem aufstellen in Stichpunkten + + +=== Festlegung der verwendeten Toolings + +Aufgrund der großen Effizienz und der gut ausgebauten Möglichkeit zur funktionalen Programmierung, wurde als Programmiersprache für das Projekt -- zur Implementierung der Algorithmen und Simulation der Bitfehlerrate -- Julia gewählt. +Im weiteren Verlauf der Praxis wurde zusätzlich für die verbesserte Möglichkeit der Visualisierung der Ergebnisse das Pluto Framework -- ein Julia-Pendant zu Jupyter Notebooks -- mit einbezogen. + +== Durchführung und Projektdokumentation + +Für eine effiziente und übersichtliche Implementierung der Algorithmen und Simulationen wurde zunächst diverse Hilfsfunktionen in Julia implementiert. #figure( + caption: "Generierung von allen möglichen Linearkombinationen" +)[ + ```julia +function create_linearcombinations(inputs, weights, n) + collect(map( + set -> begin + LinearCombinationSet( + collect(map( + weights -> begin + LinearCombination(weights, map(v -> [signbit(v)], weights), set, sum(weights .* set)) + end, + weights + ))) + end, + Iterators.partition(inputs, n))) +end + ``` +] + +@code:generate_lincombs zeigt exemplarisch die Implementierung einer Funktion zur Generierung aller möglichen Linearkombinationen für eine Menge an Eingangswerten. + +Anschließend wurde die betragsmäßige Optimierung, welche in @bach_original_1 und @fig:bach_1_optimal dargestellt wird, implementiert und getestet. + +=== Rekursiver Ansatz + +Als nächste Möglichkeit für den Multi-Bit Fall ist ein rekursiver Ansatz des Problems implementiert worden. Hierfür werden die Eingangswerte zunächst mit der betragsmäßigen Optimierung verarbeitet um so eine "optimale" Verteilung für den 1-bit Fall zu konstruieren. Anschließend wird die Verteilung in zwei symmetrische Unterverteilungen aufgeteilt, und jeweils deren Mittelwert bestimmt. +Anschließend werden für jede Summe der jeweiligen Unterverteilungen zusätzliche fraktionierte Gewichtungen auf die bereits bestehenden Gewichtungen aufaddiert. +Basierend auf der Mittelwertbestimmung werden zusätzliche Grenzen definiert, anhand deren die aufkommenden neuen Summen mit fraktionierte Gewichtungen optimal gewählt werden. +Basierend auf der Anzahl $m$ an Bits die aus einer Summe extrahiert werden sollen wird dieses Verfahren $m$-Mal mit allen entstehenden Unterverteilungen durchgeführt. + +Ein erstes positives Ergebnis hier war die schnelle Konvergenz der Verteilung und die Gleichverteilung der quantisierten Symbole, da in jeden Grenzbereich möglichst gleich viele Summen gelegt worden sind. @fig:bach_recursive_dist zeigt das Ergebnis des rekursiven Ansatzes für die Quantisierung von 2 Bit. + +// Notiz: Grafiken vielleicht nochmal separat exportieren wenn Pluto das irgendwie zulässt. +#figure( + image("../graphics/execution/recursive_distribution .png", width: 70%), + caption: "Verteilung der Eingangswerte nach dem rekursiven Ansatz" +) + +Jedoch stellte sich nach der Analyse der verwendeten Hilfsdatenvektoren heraus, dass durch die Zuweisung der Hilfsdaten Informationen über den Schlüssel ableitbar sind. + +#figure( + image("../graphics/execution/helperdata_occurs.png", width: 70%), + caption: "Verteilung der Hilfsdatenvektoren für jedes Bitsymbol" +) + +Das Histogramm in @fig:bach_recursive_hd_occurs zeigt dieses Problem auf. Damit über die Hilfsdaten keine Informationen über den Schlüssel bekannt werden, muss jeder verwendete Hilfsdatenvektor von jedem Symbol gleich häufig verwendet werden. Mit diesem Ansatz werden von je zwei Symbolen jedoch nur vier von acht möglichen Hilfsdatenvektoren verwendet. + +=== Vorgabe des Codeworts + +Eine weitere getestete Methode bestand aus dem vorgeben des zu verwendeten Codewords bzw. Schlüssels. +Hierfür werden die Grenzen der Quantisiererfunktion über die kumulative Verteilungsfunktion der Eingangswerte bestimmt. Anschließend wird jene Summe mit Hilfsdaten gewählt, welche die Summe zu ihrem vorgegebenen Codewort quantisieren. + +#figure( + image("../graphics/execution/given_codeword.png", width: 65%), + caption: "Verteilung nach der Verarbeitung mit vorgegebenem Codewort" +) + +Leider stellte sich die Vorgabe, jene Linearkombination zu wählen welche am besten ein vorgegebenes Codewort approximiert nicht als praktikabel heraus, da -- wie in @fig:bach_given_codeword zu sehen ist -- bei einer Verarbeitung für 2 Bit keine vier voneinander unterscheidbaren Unterverteilungen ergeben. Nahe der 0 lässt sich lediglich eine kleine Abweichung vom 1-bit Fall feststellen, welche aber nicht signifikant genug ist, um die Bitfehlerrate zu minimieren. + +=== Brute-Force-Ansatz + +Als letzten möglichen Lösungsansatz wurde ein Brute-Force-Ansatz untersucht. +Um die optimalen Grenzen für eine Quantisierung höherer Ordnung zu erhalten, wurden für verschiedene Quantisierergrenzen die Verteilungen der Quantisierten Codewörter analysiert. +Im Detail wurde für eine große Menge an möglichen Grenzen die Distanzmaximierung der Linearkombinationen durchgeführt. +// needs citation +Direkt im Anschluss wurde über Pearson's Chi-square Test die Gleichverteilung der Quantisierten Symbole überprüft und nach einem Maximum des Ergebnisses des Tests gesucht. +@fig:bach_brute_force zeigt das Ergebnis der Verarbeitung dieser Grenzen für einen 3-bit Fall. + +Da diese Brute-Force Operation sehr rechenaufwändig ist, wurden die bereits in Julia implementierten Lösungen für parallel Computing eingesetzt und die Berechnung der idealen Grenzen auf einem Computer mit hoher Rechenkapazität ausgelagert. + +#figure( + image("../graphics/execution/brute-force.png", width: 80%), + caption: "Resultat nach Verwendung der durch den Brute-Force Ansatz gefundenen Grenzen" +) + +Auch die Betrachtung des Histogramms der Hilfsdatenverteilung zeigt befriedigende Ergebnisse auf. +Wie in @fig:bach_brute_force_occurs zu sehen ist, wird jeder Hilfsdatenvektor von jedem Symbol gleich häufig verwendet. + +#figure( + image("../graphics/execution/brute-force-occurs.png", width: 80%), + caption: "Resultat nach Verwendung der durch den Brute-Force Ansatz gefundenen Grenzen" +) + +Außerdem ist über diese Methode eine signifikante Verbesserung de Bitfehlerrate im Bezug auf eine Quantisierung ohne Vorverarbeitung und Fehlerkorrekturcode vorzuweisen, weshalb sich hier gute Chancen auf ein zukünftiges Nutzbares Verfahren abbilden. + +=== Portieren der BCH-Code Python Bibliothek + +Für die weitere Integration und vollständige Implementierung zu einem allgemeinen Simulationsprogramm, das die gesamte Fehlerkorrektur bis zum Schlüssel abdeckt, ist ein BCH-Fehlerkorrektur-Code als Python-Codebasis vorgegeben worden. +Damit dieser auf die bereits in Julia programmierten Implementierungen angewendet werden kann, wurde diese Codebasis vollständig von Python nach Julia portiert. +Hierzu waren kleinere Zwischenrecherchen im Bezug auf die Differenzen und Ähnlichkeiten der beiden Sprachen notwendig, um eine ordnungsgemäße Portierung durchführen zu können. + +Aufgrund des kurz darauf folgenden Endes der Anstellung im Rahmen der Ingenieurspraxis war es leider nicht mehr möglich den portierten BCH-Code im Zusammenhang mit der gefundenen Lösung zur Optimierung der Grenzen einzusetzen. diff --git a/content/introduction.typ b/content/introduction.typ new file mode 100644 index 0000000..1b8c85f --- /dev/null +++ b/content/introduction.typ @@ -0,0 +1,19 @@ +#import "@preview/glossarium:0.5.6": * + += Motivation und Problemstellung + +#glspl("puf", capitalize: true) stellen in der Kryptographie einen spannenden Bereich zur Generierung und sicheren Speicherung Schlüsseln da. +Durch minimale, nicht reproduzierbare Abweichungen im Fertigungsprozess lässt sich die Einzigartigkeit eines Schaltkreises nutzen, um ein Geheimnis direkt und sicher auf dem Chip zu speichern. + +Ein Problem bei der Verwendung der Einzigartigkeiten dieser Schaltkreise ist die verlässliche Rekonstruktion eines Schlüssels. +Da diese minimalen Unterschiede nur gemessen werden können, ist das Ergebnis von einem unkontrollierbaren Messfehler behaftet, welcher +unter Umständen den neuen generierten Schlüssel verfälscht. + +// Hier noch erklären, wie man von einem analogen auf einen digitalen Wert kommt. + +In der Regel lässt sich dieses Problem durch die Verwendung von Fehlerkorrekturcodes beheben. +Diese werden üblicherweise nach der Quantisierung --- also der Diskretisierung der gemessenen Werte angewendet. + +Aufbauend auf die Bachelorarbeit "Towards Efficient Helper Data Algorithms for Mulit-Bit PUF Quantization" soll hier die Praktikabilität und Umsetzbarkeit einer neuen Methode zur Verbesserung der Bitfehlerrate bei einer PUF Quantisierung analysiert werden. + +// TODO eventuell noch mehr dazu in der Einleitung schreiben ansonsten steht hier recht wenig. diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..7ee92a1 --- /dev/null +++ b/flake.lock @@ -0,0 +1,82 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1747179050, + "narHash": "sha256-qhFMmDkeJX9KJwr5H32f1r7Prs7XbQWtO0h3V0a0rFY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "adaa24fbf46737f3f1b5497bf64bae750f82942e", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "typix": "typix" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "typix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1746607658, + "narHash": "sha256-WKB6j7RddVr2NT1Wze03uw/yiFeEX/F5vdOWSKoj9Z0=", + "owner": "loqusion", + "repo": "typix", + "rev": "01160b19f90eeba0124dea8326779477b5313ebb", + "type": "github" + }, + "original": { + "owner": "loqusion", + "repo": "typix", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..1b44fdd --- /dev/null +++ b/flake.nix @@ -0,0 +1,97 @@ +{ + description = "A Typst project"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + + typix = { + url = "github:loqusion/typix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + flake-utils.url = "github:numtide/flake-utils"; + + # Example of downloading icons from a non-flake source + # font-awesome = { + # url = "github:FortAwesome/Font-Awesome"; + # flake = false; + # }; + }; + + outputs = inputs @ { + nixpkgs, + typix, + flake-utils, + ... + }: + flake-utils.lib.eachDefaultSystem (system: let + pkgs = nixpkgs.legacyPackages.${system}; + inherit (pkgs) lib; + + typixLib = typix.lib.${system}; + + src = typixLib.cleanTypstSource ./.; + commonArgs = { + typstSource = "main.typ"; + + fontPaths = [ + # Add paths to fonts here + # "${pkgs.roboto}/share/fonts/truetype" + "template/resources" + ]; + + virtualPaths = [ + # Add paths that must be locally accessible to typst here + # { + # dest = "icons"; + # src = "${inputs.font-awesome}/svgs/regular"; + # } + ]; + }; + + # Compile a Typst project, *without* copying the result + # to the current directory + build-drv = typixLib.buildTypstProject (commonArgs + // { + inherit src; + }); + + # Compile a Typst project, and then copy the result + # to the current directory + build-script = typixLib.buildTypstProjectLocal (commonArgs + // { + inherit src; + }); + + # Watch a project and recompile on changes + watch-script = typixLib.watchTypstProject commonArgs; + in { + checks = { + inherit build-drv build-script watch-script; + }; + + packages.default = build-drv; + + apps = rec { + default = watch; + build = flake-utils.lib.mkApp { + drv = build-script; + }; + watch = flake-utils.lib.mkApp { + drv = watch-script; + }; + }; + + devShells.default = typixLib.devShell { + inherit (commonArgs) fontPaths virtualPaths; + packages = [ + # WARNING: Don't run `typst-build` directly, instead use `nix run .#build` + # See https://github.com/loqusion/typix/issues/2 + # build-script + watch-script + # More packages can be added here, like typstfmt + # pkgs.typstfmt + ]; + }; + }); +} diff --git a/glossary.typ b/glossary.typ new file mode 100644 index 0000000..4b8ee4a --- /dev/null +++ b/glossary.typ @@ -0,0 +1,8 @@ +#import "@preview/glossarium:0.5.6": print-glossary +#import "glossary_items.typ": entry-list + +#counter(heading).update(0) +#set heading(numbering: none) +#heading[Abkürzungsverzeichnis] + +#print-glossary(entry-list) diff --git a/glossary_items.typ b/glossary_items.typ new file mode 100644 index 0000000..2213d6b --- /dev/null +++ b/glossary_items.typ @@ -0,0 +1,10 @@ +#let entry-list = ( + (key: "hda", short: "HDA", plural: "HDAs", long: "helper data algorithm", longplural: "helper data algorithms"), + (key: "cdf", short: "CDF", plural: "CDFs", long: "cumulative distribution function", longplural: "cumulative distribution functions"), + (key: "ecdf", short: "eCDF", plural: "eCDFs", long: "empirical Cumulative Distribution Function", longplural: "empirical Cumulative Distribution Functions"), + (key: "ber", short: "BER", plural: "BERs", long: "bit error rate", longplural: "bit error rates"), + (key: "smhdt", short: "SMHD", plural: "SMHDs", long: "S-Metric Helper Data method"), + (key: "puf", short: "PUF", plural: "PUFs", long: "physical unclonable function", longplural: "physical Unclonable Functions"), + (key: "tmhdt", short: "TMHD", plural: "TMHDs", long: "Two Metric Helper Data method"), + (key: "bach", short: "BACH", long: "Boundary Adaptive Clustering with Helper data") +) diff --git a/graphics/background/bach/instability/frame_1.png b/graphics/background/bach/instability/frame_1.png new file mode 100644 index 0000000..f4f17e9 Binary files /dev/null and b/graphics/background/bach/instability/frame_1.png differ diff --git a/graphics/background/bach/instability/frame_18.png b/graphics/background/bach/instability/frame_18.png new file mode 100644 index 0000000..367d979 Binary files /dev/null and b/graphics/background/bach/instability/frame_18.png differ diff --git a/graphics/background/bach/instability/frame_25.png b/graphics/background/bach/instability/frame_25.png new file mode 100644 index 0000000..2e64dee Binary files /dev/null and b/graphics/background/bach/instability/frame_25.png differ diff --git a/graphics/background/bach/instability/frame_7.png b/graphics/background/bach/instability/frame_7.png new file mode 100644 index 0000000..8128b19 Binary files /dev/null and b/graphics/background/bach/instability/frame_7.png differ diff --git a/graphics/background/sign-based-overlay.typ b/graphics/background/sign-based-overlay.typ new file mode 100644 index 0000000..54b7612 --- /dev/null +++ b/graphics/background/sign-based-overlay.typ @@ -0,0 +1,34 @@ +#import "@preview/cetz:0.3.4": canvas +#import "@preview/cetz-plot:0.1.1": plot, chart + +#let ymax = 1/calc.sqrt(2*calc.pi) + +#let line_style = (stroke: (paint: black, thickness: 2pt)) +#let dashed = (stroke: (dash: "dashed")) +#canvas({ + + plot.plot(size: (6,3), + legend: "north", + legend-style: (orientation: ltr, item: (spacing: 0.5)), + x-tick-step: none, + x-ticks: ((0, [0]), (100, [0])), + y-label: $cal(Q)(1, x)$, + x-label: $x$, + y-tick-step: none, + y-ticks: ((0, [0]), (ymax, [1])), + axis-style: "left", + x-min: -3, + x-max: 3, + y-min: 0, + y-max: ymax,{ + plot.add( + plot.sample-fn( + (x) => 1/calc.sqrt(2*calc.pi)*calc.exp(-(calc.pow(x,2)/2)), + (-3, 3), + 300), + style: (stroke: (paint: red, thickness: 2pt)), + label: [PDF einer Normalverteilung] + ) + plot.add(((-3,0), (0,0), (0,ymax), (3,ymax)), style: line_style, label: [$cal(Q)(1,x)$]) + }) +}) diff --git a/graphics/background/two-bit-enroll.typ b/graphics/background/two-bit-enroll.typ new file mode 100644 index 0000000..50671e3 --- /dev/null +++ b/graphics/background/two-bit-enroll.typ @@ -0,0 +1,26 @@ +#import "@preview/cetz:0.3.4": canvas, draw, palette +#import "@preview/cetz-plot:0.1.1": plot, chart + +#let line_style = (stroke: (paint: black, thickness: 2pt)) +#let dashed = (stroke: (dash: "dashed")) +#canvas({ + import draw: * + set-style(axes: (shared-zero: false)) + plot.plot(size: (8,6), + x-tick-step: none, + x-ticks: ((0.25, [$g_1$]), (0.5, [0]), (0.75, [$g_2$])), + y-label: $cal(Q)(2, 1, tilde(x))$, + x-label: $tilde(x)$, + y-tick-step: none, + y-ticks: ((0.25, [00]), (0.5, [01]), (0.75, [10]), (1, [11])), + axis-style: "left", + //x-min: 0, + x-max: 1, + y-min: 0, + y-max: 1,{ + plot.add(((0,0.25), (0.25,0.25), (0.5,0.5), (0.75,0.75), (1, 1)), line: "vh", style: line_style) + //plot.add(((0,0), (0,0)), style: (stroke: none)) + plot.add-hline(0.25, 0.5, 0.75, 1, style: dashed) + plot.add-vline(0.25, 0.5, 0.75, 1, style: dashed) + }) +}) diff --git a/graphics/background/z_distribution.csv b/graphics/background/z_distribution.csv new file mode 100644 index 0000000..8f17016 --- /dev/null +++ b/graphics/background/z_distribution.csv @@ -0,0 +1,1000 @@ +-10.0,1.5670866530993244e-11 +-9.97997997997998,1.731898421572835e-11 +-9.95995995995996,1.913660039744377e-11 +-9.93993993993994,2.1140737179795716e-11 +-9.91991991991992,2.3350083243845715e-11 +-9.8998998998999,2.57851526231251e-11 +-9.87987987987988,2.8468458165120247e-11 +-9.85985985985986,3.142470099460374e-11 +-9.83983983983984,3.4680977407952604e-11 +-9.81981981981982,3.826700475075735e-11 +-9.7997997997998,4.2215367964389906e-11 +-9.77977977977978,4.656178863156737e-11 +-9.75975975975976,5.134541850719675e-11 +-9.73973973973974,5.6609159689839135e-11 +-9.71971971971972,6.240001377199487e-11 +-9.6996996996997,6.876946250516688e-11 +-9.67967967967968,7.577388272945277e-11 +-9.65965965965966,8.347499854850021e-11 +-9.63963963963964,9.194037398035494e-11 +-9.61961961961962,1.012439495844808e-10 +-9.5995995995996,1.114666268565524e-10 +-9.57957957957958,1.226969044971726e-10 +-9.55955955955956,1.3503157100019476e-10 +-9.53953953953954,1.4857645837274253e-10 +-9.51951951951952,1.6344726219431744e-10 +-9.4994994994995,1.7977043364875085e-10 +-9.47947947947948,1.9768414962249373e-10 +-9.45945945945946,2.1733936745835158e-10 +-9.43943943943944,2.3890097148788503e-10 +-9.41941941941942,2.6254901904118343e-10 +-9.3993993993994,2.884800942525761e-10 +-9.37937937937938,3.1690877864837094e-10 +-9.35935935935936,3.480692482213214e-10 +-9.33933933933934,3.8221700746994e-10 +-9.31931931931932,4.1963077171299245e-10 +-9.2992992992993,4.6061450988468017e-10 +-9.27927927927928,5.054996609787182e-10 +-9.25925925925926,5.546475383444925e-10 +-9.23923923923924,6.084519371509368e-10 +-9.21921921921922,6.673419615290896e-10 +-9.1991991991992,7.317850891883775e-10 +-9.17917917917918,8.022904926806516e-10 +-9.15915915915916,8.794126379666174e-10 +-9.13913913913914,9.637551825284225e-10 +-9.11911911911912,1.0559751969774664e-09 +-9.0990990990991,1.1567877359357649e-09 +-9.07907907907908,1.266970785931154e-09 +-9.05905905905906,1.38737062015004e-09 +-9.03903903903904,1.5189075921459597e-09 +-9.01901901901902,1.6625824030183372e-09 +-8.998998998999,1.8194828791637996e-09 +-8.97897897897898,1.9907913004742718e-09 +-8.95895895895896,2.1777923218238912e-09 +-8.93893893893894,2.3818815338630113e-09 +-8.91891891891892,2.604574712536835e-09 +-8.8988988988989,2.847517810382273e-09 +-8.87887887887888,3.1124977465452213e-09 +-8.85885885885886,3.401454056618205e-09 +-8.83883883883884,3.716491467841983e-09 +-8.81881881881882,4.059893469963204e-09 +-8.7987987987988,4.434136957112363e-09 +-8.77877877877878,4.841908021483401e-09 +-8.75875875875876,5.28611898537923e-09 +-8.73873873873874,5.7699267643599956e-09 +-8.71871871871872,6.296752660816444e-09 +-8.6986986986987,6.870303694316149e-09 +-8.67867867867868,7.494595582561493e-09 +-8.65865865865866,8.173977494784034e-09 +-8.63863863863864,8.913158707911974e-09 +-8.618618618618619,9.717237304914516e-09 +-8.598598598598599,1.0591731064385666e-08 +-8.578578578578579,1.1542610700715167e-08 +-8.558558558558559,1.2576335625140197e-08 +-8.538538538538539,1.3699892409622672e-08 +-8.518518518518519,1.4920836147889933e-08 +-8.498498498498499,1.6247334921157145e-08 +-8.478478478478479,1.768821759006418e-08 +-8.458458458458459,1.925302514925403e-08 +-8.438438438438439,2.0952065896847053e-08 +-8.418418418418419,2.279647468787558e-08 +-8.398398398398399,2.4798276558596732e-08 +-8.378378378378379,2.697045502755155e-08 +-8.358358358358359,2.9327025399350928e-08 +-8.338338338338339,3.188311341850448e-08 +-8.318318318318319,3.465503964323947e-08 +-8.298298298298299,3.766040993324921e-08 +-8.278278278278279,4.0918212470738604e-08 +-8.258258258258259,4.444892176108461e-08 +-8.238238238238239,4.8274610087966266e-08 +-8.218218218218219,5.2419066928043386e-08 +-8.198198198198199,5.6907926862259885e-08 +-8.178178178178179,6.176880655469655e-08 +-8.158158158158159,6.703145140571939e-08 +-8.138138138138139,7.272789252404431e-08 +-8.118118118118119,7.889261470237839e-08 +-8.098098098098099,8.556273612362166e-08 +-8.078078078078079,9.277820056931877e-08 +-8.058058058058059,1.005819829492733e-07 +-8.038038038038039,1.090203090210869e-07 +-8.018018018018019,1.1814289022100969e-07 +-7.997997997997998,1.280031745830038e-07 +-7.977977977977978,1.3865861478146744e-07 +-7.957957957957958,1.5017095439483e-07 +-7.937937937937938,1.6260653355226902e-07 +-7.917917917917918,1.760366151943899e-07 +-7.897897897897898,1.9053773325091437e-07 +-7.877877877877878,2.0619206411446424e-07 +-7.857857857857858,2.2308782286955728e-07 +-7.837837837837838,2.4131968582014157e-07 +-7.817817817817818,2.60989240947569e-07 +-7.797797797797798,2.8220546802402006e-07 +-7.777777777777778,3.0508525020428403e-07 +-7.757757757757758,3.297539190216215e-07 +-7.737737737737738,3.5634583482144844e-07 +-7.717717717717718,3.850050047799669e-07 +-7.697697697697698,4.1588574077388583e-07 +-7.677677677677678,4.491533594922085e-07 +-7.657657657657658,4.849849273120141e-07 +-7.637637637637638,5.235700525974041e-07 +-7.617617617617618,5.651117282246177e-07 +-7.597597597597598,6.098272272870181e-07 +-7.5775775775775776,6.57949055091367e-07 +-7.5575575575575575,7.09725960721983e-07 +-7.5375375375375375,7.65424011622138e-07 +-7.5175175175175175,8.253277348227375e-07 +-7.4974974974974975,8.897413286372491e-07 +-7.4774774774774775,9.589899488392686e-07 +-7.4574574574574575,1.0334210735453198e-06 +-7.4374374374374375,1.1134059512408164e-06 +-7.4174174174174174,1.199341136611844e-06 +-7.397397397397397,1.2916501190799208e-06 +-7.377377377377377,1.3907850491813618e-06 +-7.357357357357357,1.4972285681878009e-06 +-7.337337337337337,1.611495746629939e-06 +-7.317317317317317,1.7341361376632257e-06 +-7.297297297297297,1.8657359515020452e-06 +-7.277277277277277,2.006920357448644e-06 +-7.257257257257257,2.1583559203545643e-06 +-7.237237237237237,2.320753178676383e-06 +-7.217217217217217,2.494869371624047e-06 +-7.197197197197197,2.6815113232498275e-06 +-7.177177177177177,2.88153849168874e-06 +-7.157157157157157,3.0958661921378957e-06 +-7.137137137137137,3.325469002552811e-06 +-7.117117117117117,3.5713843614435337e-06 +-7.097097097097097,3.834716367572821e-06 +-7.077077077077077,4.116639791792958e-06 +-7.057057057057057,4.418404311707384e-06 +-7.037037037037037,4.7413389803081e-06 +-7.017017017017017,5.0868569402207576e-06 +-6.996996996996997,5.4564603956860075e-06 +-6.976976976976977,5.851745854918396e-06 +-6.956956956956957,6.27440965601412e-06 +-6.936936936936937,6.726253790124496e-06 +-6.916916916916917,7.209192036175427e-06 +-6.896896896896897,7.725256421992914e-06 +-6.876876876876877,8.276604027292446e-06 +-6.856856856856857,8.865524144603897e-06 +-6.836836836836837,9.494445814836332e-06 +-6.816816816816817,1.0165945754836244e-05 +-6.796796796796797,1.0882756694959566e-05 +-6.776776776776776,1.164777614536284e-05 +-6.756756756756756,1.2464075610420089e-05 +-6.736736736736736,1.333491027139234e-05 +-6.716716716716716,1.4263729158212225e-05 +-6.696696696696696,1.5254185832000592e-05 +-6.676676676676676,1.631014960070239e-05 +-6.656656656656656,1.7435717291016563e-05 +-6.636636636636636,1.863522560059733e-05 +-6.616616616616616,1.9913264055325213e-05 +-6.596596596596596,2.127468859727959e-05 +-6.576576576576576,2.2724635829895226e-05 +-6.556556556556556,2.426853794764979e-05 +-6.536536536536536,2.5912138378506833e-05 +-6.516516516516516,2.7661508168229998e-05 +-6.496496496496496,2.9523063136588983e-05 +-6.476476476476476,3.150358183639016e-05 +-6.456456456456456,3.361022434719256e-05 +-6.436436436436436,3.5850551936503606e-05 +-6.416416416416416,3.8232547622191276e-05 +-6.396396396396396,4.0764637670801285e-05 +-6.376376376376376,4.345571406742176e-05 +-6.356356356356356,4.63151579936988e-05 +-6.336336336336336,4.935286435156909e-05 +-6.316316316316316,5.257926737124008e-05 +-6.296296296296296,5.600536734290842e-05 +-6.276276276276276,5.964275851267281e-05 +-6.256256256256256,6.350365818404851e-05 +-6.236236236236236,6.760093706744167e-05 +-6.216216216216216,7.194815092088287e-05 +-6.196196196196196,7.655957352624463e-05 +-6.176176176176176,8.145023104608553e-05 +-6.156156156156156,8.663593780715748e-05 +-6.136136136136136,9.213333355749476e-05 +-6.116116116116116,9.795992224485415e-05 +-6.096096096096096,0.00010413411236510995 +-6.076076076076076,0.00011067525893000403 +-6.056056056056056,0.00011760370710442046 +-6.036036036036036,0.0001249408375640866 +-6.016016016016016,0.0001327091136252933 +-5.995995995995996,0.00014093213019887355 +-5.975975975975976,0.00014963466462127818 +-5.955955955955956,0.00015884272941613561 +-5.935935935935936,0.0001685836270401698 +-5.915915915915916,0.00017888600666777975 +-5.895895895895896,0.00018977992306894084 +-5.875875875875876,0.00020129689763538565 +-5.8558558558558556,0.00021346998161022183 +-5.8358358358358355,0.00022633382157628671 +-5.8158158158158155,0.00023992472725856636 +-5.7957957957957955,0.0002542807416959667 +-5.7757757757757755,0.0002694417138375578 +-5.7557557557557555,0.0002854493736181665 +-5.7357357357357355,0.0003023474095678058 +-5.7157157157157155,0.00032018154900895126 +-5.6956956956956954,0.0003389996408950473 +-5.675675675675675,0.00035885174134287574 +-5.655655655655655,0.0003797902019105335 +-5.635635635635635,0.0004018697606717221 +-5.615615615615615,0.0004251476361358544 +-5.595595595595595,0.0004496836240621328 +-5.575575575575575,0.00047554019721421945 +-5.555555555555555,0.0005027826081004157 +-5.535535535535535,0.0005314789947423646 +-5.515515515515515,0.0005617004895132139 +-5.495495495495495,0.0005935213310838689 +-5.475475475475475,0.0006270189795134673 +-5.455455455455455,0.0006622742345174681 +-5.435435435435435,0.0006993713569438073 +-5.415415415415415,0.0007383981934843471 +-5.395395395395395,0.000779446304645428 +-5.375375375375375,0.0008226110959976018 +-5.355355355355355,0.000867991952720666 +-5.335335335335335,0.0009156923774558751 +-5.315315315315315,0.0009658201314726541 +-5.295295295295295,0.001018487379152321 +-5.275275275275275,0.0010738108357861902 +-5.255255255255255,0.0011319119186799756 +-5.235235235235235,0.001192916901550638 +-5.215215215215215,0.0012569570721957229 +-5.195195195195195,0.0013241688934087711 +-5.175175175175175,0.001394694167107605 +-5.155155155155155,0.0014686802016351133 +-5.135135135135135,0.0015462799821846208 +-5.115115115115115,0.0016276523442940464 +-5.095095095095095,0.0017129621503447277 +-5.075075075075075,0.0018023804689920857 +-5.055055055055055,0.0018960847574462532 +-5.035035035035035,0.001994259046511198 +-5.015015015015015,0.0020970941282810306 +-4.994994994994995,0.0022047877463817387 +-4.974974974974975,0.0023175447886358397 +-4.954954954954955,0.002435577482016225 +-4.934934934934935,0.002559105589743716 +-4.914914914914915,0.0026883566103707754 +-4.894894894894895,0.0028235659786812048 +-4.874874874874875,0.002964977268222571 +-4.854854854854855,0.003112842395274624 +-4.834834834834835,0.0032674218240429324 +-4.814814814814815,0.003428984772852527 +-4.794794794794795,0.0035978094211013725 +-4.774774774774775,0.00377418311671811 +-4.754754754754755,0.003958402583852563 +-4.734734734734735,0.004150774130511219 +-4.714714714714715,0.004351613855833014 +-4.694694694694695,0.004561247856683402 +-4.674674674674675,0.004780012433227109 +-4.654654654654655,0.005008254293121478 +-4.634634634634635,0.005246330753953948 +-4.614614614614615,0.0054946099435278575 +-4.594594594594595,0.00575347099758133 +-4.574574574574575,0.006023304254504144 +-4.554554554554555,0.006304511446596883 +-4.534534534534535,0.006597505887396182 +-4.514514514514515,0.006902712654568585 +-4.494494494494495,0.007220568767854154 +-4.474474474474475,0.007551523361519132 +-4.454454454454455,0.007896037850754864 +-4.434434434434435,0.008254586091437772 +-4.414414414414415,0.008627654532642649 +-4.394394394394395,0.009015742361278398 +-4.374374374374375,0.009419361638192679 +-4.354354354354355,0.00983903742506844 +-4.334334334334335,0.010275307901411965 +-4.314314314314315,0.01072872447090897 +-4.2942942942942945,0.011199851856401556 +-4.2742742742742745,0.01168926818271556 +-4.2542542542542545,0.012197565046544496 +-4.2342342342342345,0.012725347572573213 +-4.2142142142142145,0.013273234455001096 +-4.1941941941941945,0.013841857983602079 +-4.1741741741741745,0.014431864053436409 +-4.1541541541541545,0.015043912157306556 +-4.134134134134134,0.015678675360028607 +-4.114114114114114,0.016336840253568966 +-4.094094094094094,0.017019106892075923 +-4.074074074074074,0.017726188705815753 +-4.054054054054054,0.018458812393004165 +-4.034034034034034,0.019217717788505423 +-4.014014014014014,0.020003657708354907 +-3.9939939939939944,0.02081739776904414 +-3.9739739739739743,0.02165971618049301 +-3.9539539539539543,0.022531403511619683 +-3.9339339339339343,0.023433262427407193 +-3.9139139139139143,0.024366107396354447 +-3.8938938938938943,0.02533076436719051 +-3.8738738738738743,0.026328070413723918 +-3.8538538538538543,0.027358873346693253 +-3.8338338338338342,0.02842403129148174 +-3.8138138138138142,0.029524412230557802 +-3.7937937937937942,0.030660893509504135 +-3.773773773773774,0.03183436130550208 +-3.753753753753754,0.03304571005714362 +-3.733733733733734,0.0342958418544526 +-3.713713713713714,0.03558566578800867 +-3.693693693693694,0.03691609725608191 +-3.673673673673674,0.03828805722870484 +-3.653653653653654,0.039702471467628966 +-3.633633633633634,0.04116026970113942 +-3.613613613613614,0.042662384752728134 +-3.593593593593594,0.044209751622660116 +-3.573573573573573,0.0458033065215029 +-3.553553553553553,0.047443985854729656 +-3.533533533533533,0.04913272515755299 +-3.513513513513513,0.050870457979193213 +-3.493493493493493,0.05265811471584135 +-3.473473473473473,0.05449662139163453 +-3.453453453453453,0.05638689838702504 +-3.433433433433433,0.05832985911399387 +-3.413413413413413,0.0603264086376319 +-3.393393393393393,0.062377442243692585 +-3.373373373373373,0.064483843951803 +-3.353353353353353,0.06664648497411085 +-3.333333333333333,0.06886622211924037 +-3.313313313313313,0.07114389614153088 +-3.293293293293293,0.07348033003563922 +-3.273273273273273,0.07587632727669916 +-3.253253253253253,0.07833267000635018 +-3.233233233233233,0.08085011716507168 +-3.213213213213213,0.08342940257138931 +-3.193193193193193,0.08607123294865582 +-3.173173173173173,0.08877628590025081 +-3.153153153153153,0.09154520783419165 +-3.133133133133133,0.0943786118383004 +-3.113113113113113,0.09727707550723183 +-3.093093093093093,0.10024113872283032 +-3.073073073073073,0.10327130138945494 +-3.053053053053053,0.10636802112608579 +-3.033033033033033,0.10953171091720558 +-3.013013013013013,0.11276273672463424 +-2.992992992992993,0.11606141506268455 +-2.972972972972973,0.11942801053920006 +-2.952952952952953,0.1228627333652338 +-2.932932932932933,0.12636573683632818 +-2.9129129129129128,0.1299371147885596 +-2.8928928928928928,0.1335768990327204 +-2.8728728728728727,0.1372850567702184 +-2.8528528528528527,0.14106148799448787 +-2.8328328328328327,0.1449060228819167 +-2.8128128128128127,0.14881841917651079 +-2.7927927927927927,0.15279835957272928 +-2.7727727727727727,0.15684544910113893 +-2.7527527527527527,0.16095921252174966 +-2.7327327327327327,0.16513909173010413 +-2.7127127127127126,0.16938444318140403 +-2.6926926926926926,0.17369453533816254 +-2.6726726726726726,0.17806854614707487 +-2.6526526526526526,0.18250556055099768 +-2.6326326326326326,0.18700456804211996 +-2.6126126126126126,0.19156446026259658 +-2.5925925925925926,0.19618402865909465 +-2.5725725725725725,0.2008619621978751 +-2.5525525525525525,0.20559684514719556 +-2.5325325325325325,0.2103871549339737 +-2.5125125125125125,0.2152312600817946 +-2.4924924924924925,0.22012741823747614 +-2.4724724724724725,0.22507377429352604 +-2.4524524524524525,0.23006835861392994 +-2.4324324324324325,0.23510908537080208 +-2.4124124124124124,0.24019375099950463 +-2.3923923923923924,0.24532003277990322 +-2.3723723723723724,0.2504854875514676 +-2.3523523523523524,0.25568755056995285 +-2.3323323323323324,0.2609235345133989 +-2.3123123123123124,0.26619062864517573 +-2.2922922922922924,0.27148589814176244 +-2.2722722722722724,0.27680628359289655 +-2.2522522522522523,0.28214860068164466 +-2.2322322322322323,0.28750954005185 +-2.2122122122122123,0.29288566737028165 +-2.1921921921921923,0.2982734235906623 +-2.1721721721721723,0.3036691254265737 +-2.1521521521521523,0.3090689660400416 +-2.1321321321321323,0.31446901595237053 +-2.1121121121121122,0.3198652241835473 +-2.0920920920920922,0.3252534196262526 +-2.0720720720720722,0.330629312660209 +-2.052052052052052,0.33598849701226363 +-2.032032032032032,0.3413264518672368 +-2.012012012012012,0.3466385442341817 +-1.9919919919919913,0.3519200315722841 +-1.9719719719719713,0.3571660646801803 +-1.9519519519519513,0.3623716908520156 +-1.9319319319319312,0.3675318573030495 +-1.9119119119119112,0.37264141486710983 +-1.8918918918918912,0.3776951219676369 +-1.8718718718718712,0.3826876488634936 +-1.8518518518518512,0.3876135821701197 +-1.8318318318318312,0.39246742965598913 +-1.8118118118118112,0.3972436253136903 +-1.7917917917917912,0.401936534704289 +-1.7717717717717711,0.40654046057295334 +-1.7517517517517511,0.41104964873312405 +-1.7317317317317311,0.41545829421579805 +-1.711711711711711,0.41976054767977017 +-1.691691691691691,0.423950522077931 +-1.671671671671671,0.4280222995739732 +-1.651651651651651,0.4319699387030971 +-1.631631631631631,0.43578748176953475 +-1.611611611611611,0.43946896247294936 +-1.591591591591591,0.4430084137549828 +-1.571571571571571,0.4463998758564555 +-1.551551551551551,0.44963740457495227 +-1.531531531531531,0.4527150797117528 +-1.511511511511511,0.4556270136963157 +-1.491491491491491,0.4583673603757667 +-1.471471471471471,0.4609303239561081 +-1.451451451451451,0.4633101680811427 +-1.431431431431431,0.46550122503440133 +-1.411411411411411,0.46749790504867855 +-1.391391391391391,0.4692947057071206 +-1.3713713713713709,0.4708862214191754 +-1.3513513513513509,0.47226715295410504 +-1.3313313313313309,0.4734323170141925 +-1.3113113113113108,0.474376655829227 +-1.2912912912912908,0.47509524675335163 +-1.2712712712712708,0.4755833118448928 +-1.2512512512512508,0.47583622740936404 +-1.2312312312312308,0.47584953348546066 +-1.2112112112112108,0.47561894325352555 +-1.1911911911911908,0.4751403523456854 +-1.1711711711711708,0.4744098480366173 +-1.1511511511511507,0.4734237182937297 +-1.1311311311311307,0.47217846066540864 +-1.1111111111111107,0.4706707909859138 +-1.0910910910910907,0.46889765187548965 +-1.0710710710710707,0.4668562210143071 +-1.0510510510510507,0.46454391916895027 +-1.0310310310310307,0.4619584179503327 +-1.0110110110110107,0.45909764728215247 +-0.9909909909909906,0.4559598025592853 +-0.9709709709709706,0.45254335147586633 +-0.9509509509509506,0.4488470405032282 +-0.9309309309309306,0.44486990099833645 +-0.9109109109109106,0.4406112549239086 +-0.8908908908908906,0.43607072016199944 +-0.8708708708708706,0.43124821540350194 +-0.8508508508508505,0.4261439645967348 +-0.8308308308308305,0.4207585009390703 +-0.8108108108108105,0.41509267039639447 +-0.7907907907907905,0.4091476347360894 +-0.7707707707707705,0.40292487406017524 +-0.7507507507507505,0.3964261888262516 +-0.7307307307307305,0.3896537013449287 +-0.7107107107107105,0.38260985674353837 +-0.6906906906906904,0.3752974233870535 +-0.6706706706706704,0.3677194927483342 +-0.6506506506506504,0.359879478721034 +-0.6306306306306304,0.3517811163697624 +-0.6106106106106104,0.3434284601133834 +-0.5905905905905904,0.33482588133865004 +-0.5705705705705704,0.3259780654427104 +-0.5505505505505504,0.3168900083043852 +-0.5305305305305303,0.3075670121854888 +-0.5105105105105103,0.29801468106485723 +-0.4904904904904903,0.2882389154091395 +-0.4704704704704703,0.27824590638580954 +-0.4504504504504503,0.2680421295252516 +-0.4304304304304303,0.2576343378401671 +-0.41041041041041026,0.24702955441193125 +-0.39039039039039025,0.23623506445489637 +-0.37037037037037024,0.22525840687098933 +-0.3503503503503502,0.21410736530827468 +-0.3303303303303302,0.20278995873845546 +-0.3103103103103102,0.19131443156954947 +-0.2902902902902902,0.17968924331120906 +-0.2702702702702702,0.16792305781134376 +-0.25025025025025016,0.15602473208385073 +-0.23023023023023015,0.14400330474835524 +-0.21021021021021014,0.1318679841039111 +-0.19019019019019012,0.11962813585960007 +-0.1701701701701701,0.10729327054590174 +-0.1501501501501501,0.09487303063157487 +-0.13013013013013008,0.08237717737159582 +-0.11011011011011007,0.06981557741243653 +-0.09009009009009006,0.05719818918163008 +-0.07007007007007005,0.04453504908916654 +-0.05005005005005003,0.03183625756877909 +-0.03003003003003002,0.01911196498762333 +-0.010010010010010006,0.006372357453216047 +0.010010010010010006,0.006372357453216047 +0.03003003003003002,0.01911196498762333 +0.05005005005005003,0.03183625756877909 +0.07007007007007005,0.04453504908916654 +0.09009009009009006,0.05719818918163008 +0.11011011011011007,0.06981557741243653 +0.13013013013013008,0.08237717737159582 +0.1501501501501501,0.09487303063157487 +0.1701701701701701,0.10729327054590174 +0.19019019019019012,0.11962813585960007 +0.21021021021021014,0.1318679841039111 +0.23023023023023015,0.14400330474835524 +0.25025025025025016,0.15602473208385073 +0.2702702702702702,0.16792305781134376 +0.2902902902902902,0.17968924331120906 +0.3103103103103102,0.19131443156954947 +0.3303303303303302,0.20278995873845546 +0.3503503503503502,0.21410736530827468 +0.37037037037037024,0.22525840687098933 +0.39039039039039025,0.23623506445489637 +0.41041041041041026,0.24702955441193125 +0.4304304304304303,0.2576343378401671 +0.4504504504504503,0.2680421295252516 +0.4704704704704703,0.27824590638580954 +0.4904904904904903,0.2882389154091395 +0.5105105105105103,0.29801468106485723 +0.5305305305305303,0.3075670121854888 +0.5505505505505504,0.3168900083043852 +0.5705705705705704,0.3259780654427104 +0.5905905905905904,0.33482588133865004 +0.6106106106106104,0.3434284601133834 +0.6306306306306304,0.3517811163697624 +0.6506506506506504,0.359879478721034 +0.6706706706706704,0.3677194927483342 +0.6906906906906904,0.3752974233870535 +0.7107107107107105,0.38260985674353837 +0.7307307307307305,0.3896537013449287 +0.7507507507507505,0.3964261888262516 +0.7707707707707705,0.40292487406017524 +0.7907907907907905,0.4091476347360894 +0.8108108108108105,0.41509267039639447 +0.8308308308308305,0.4207585009390703 +0.8508508508508505,0.4261439645967348 +0.8708708708708706,0.43124821540350194 +0.8908908908908906,0.43607072016199944 +0.9109109109109106,0.4406112549239086 +0.9309309309309306,0.44486990099833645 +0.9509509509509506,0.4488470405032282 +0.9709709709709706,0.45254335147586633 +0.9909909909909906,0.4559598025592853 +1.0110110110110107,0.45909764728215247 +1.0310310310310307,0.4619584179503327 +1.0510510510510507,0.46454391916895027 +1.0710710710710707,0.4668562210143071 +1.0910910910910907,0.46889765187548965 +1.1111111111111107,0.4706707909859138 +1.1311311311311307,0.47217846066540864 +1.1511511511511507,0.4734237182937297 +1.1711711711711708,0.4744098480366173 +1.1911911911911908,0.4751403523456854 +1.2112112112112108,0.47561894325352555 +1.2312312312312308,0.47584953348546066 +1.2512512512512508,0.47583622740936404 +1.2712712712712708,0.4755833118448928 +1.2912912912912908,0.47509524675335163 +1.3113113113113108,0.474376655829227 +1.3313313313313309,0.4734323170141925 +1.3513513513513509,0.47226715295410504 +1.3713713713713709,0.4708862214191754 +1.391391391391391,0.4692947057071206 +1.411411411411411,0.46749790504867855 +1.431431431431431,0.46550122503440133 +1.451451451451451,0.4633101680811427 +1.471471471471471,0.4609303239561081 +1.491491491491491,0.4583673603757667 +1.511511511511511,0.4556270136963157 +1.531531531531531,0.4527150797117528 +1.551551551551551,0.44963740457495227 +1.571571571571571,0.4463998758564555 +1.591591591591591,0.4430084137549828 +1.611611611611611,0.43946896247294936 +1.631631631631631,0.43578748176953475 +1.651651651651651,0.4319699387030971 +1.671671671671671,0.4280222995739732 +1.691691691691691,0.423950522077931 +1.711711711711711,0.41976054767977017 +1.7317317317317311,0.41545829421579805 +1.7517517517517511,0.41104964873312405 +1.7717717717717711,0.40654046057295334 +1.7917917917917912,0.401936534704289 +1.8118118118118112,0.3972436253136903 +1.8318318318318312,0.39246742965598913 +1.8518518518518512,0.3876135821701197 +1.8718718718718712,0.3826876488634936 +1.8918918918918912,0.3776951219676369 +1.9119119119119112,0.37264141486710983 +1.9319319319319312,0.3675318573030495 +1.9519519519519513,0.3623716908520156 +1.9719719719719713,0.3571660646801803 +1.9919919919919913,0.3519200315722841 +2.0120120120120113,0.34663854423418194 +2.0320320320320313,0.3413264518672369 +2.0520520520520513,0.3359884970122639 +2.0720720720720713,0.3306293126602093 +2.0920920920920913,0.32525341962625287 +2.1121121121121114,0.31986522418354757 +2.1321321321321314,0.31446901595237076 +2.1521521521521514,0.30906896604004186 +2.1721721721721714,0.30366912542657387 +2.1921921921921914,0.29827342359066256 +2.2122122122122114,0.29288566737028193 +2.2322322322322314,0.2875095400518502 +2.2522522522522515,0.28214860068164493 +2.2722722722722715,0.27680628359289683 +2.2922922922922915,0.27148589814176277 +2.3123123123123115,0.2661906286451759 +2.3323323323323315,0.2609235345133992 +2.3523523523523515,0.2556875505699531 +2.3723723723723715,0.2504854875514678 +2.3923923923923915,0.24532003277990344 +2.4124124124124116,0.2401937509995049 +2.4324324324324316,0.2351090853708023 +2.4524524524524516,0.23006835861393016 +2.4724724724724716,0.22507377429352624 +2.4924924924924916,0.2201274182374764 +2.5125125125125116,0.21523126008179483 +2.5325325325325316,0.21038715493397392 +2.5525525525525516,0.20559684514719578 +2.5725725725725717,0.20086196219787533 +2.5925925925925917,0.19618402865909484 +2.6126126126126117,0.19156446026259677 +2.6326326326326317,0.18700456804212012 +2.6526526526526517,0.18250556055099787 +2.6726726726726717,0.17806854614707507 +2.6926926926926917,0.1736945353381627 +2.7127127127127117,0.16938444318140422 +2.7327327327327318,0.1651390917301043 +2.7527527527527518,0.16095921252174983 +2.772772772772772,0.1568454491011391 +2.792792792792792,0.15279835957272947 +2.812812812812812,0.14881841917651098 +2.8328328328328336,0.1449060228819165 +2.8528528528528536,0.1410614879944877 +2.8728728728728736,0.13728505677021827 +2.8928928928928936,0.13357689903272021 +2.9129129129129137,0.12993711478855943 +2.9329329329329337,0.12636573683632804 +2.9529529529529537,0.12286273336523365 +2.9729729729729737,0.11942801053919991 +2.9929929929929937,0.11606141506268441 +3.0130130130130137,0.11276273672463409 +3.0330330330330337,0.10953171091720544 +3.0530530530530537,0.10636802112608565 +3.0730730730730738,0.10327130138945477 +3.0930930930930938,0.10024113872283019 +3.113113113113114,0.09727707550723172 +3.133133133133134,0.09437861183830025 +3.153153153153154,0.09154520783419148 +3.173173173173174,0.0887762859002507 +3.193193193193194,0.08607123294865572 +3.213213213213214,0.0834294025713892 +3.233233233233234,0.08085011716507157 +3.253253253253254,0.07833267000635004 +3.273273273273274,0.07587632727669905 +3.293293293293294,0.07348033003563913 +3.313313313313314,0.07114389614153079 +3.333333333333334,0.06886622211924029 +3.353353353353354,0.06664648497411077 +3.373373373373374,0.06448384395180291 +3.393393393393394,0.0623774422436925 +3.413413413413414,0.06032640863763181 +3.433433433433434,0.058329859113993784 +3.453453453453454,0.05638689838702498 +3.473473473473474,0.05449662139163443 +3.493493493493494,0.052658114715841274 +3.513513513513514,0.050870457979193116 +3.533533533533534,0.0491327251575529 +3.553553553553554,0.047443985854729594 +3.573573573573574,0.045803306521502836 +3.593593593593594,0.044209751622660116 +3.613613613613614,0.042662384752728134 +3.633633633633634,0.04116026970113942 +3.653653653653654,0.039702471467628966 +3.673673673673674,0.03828805722870484 +3.693693693693694,0.03691609725608191 +3.713713713713714,0.03558566578800867 +3.733733733733734,0.0342958418544526 +3.753753753753754,0.03304571005714362 +3.773773773773774,0.03183436130550208 +3.7937937937937942,0.030660893509504135 +3.8138138138138142,0.029524412230557802 +3.8338338338338342,0.02842403129148174 +3.8538538538538543,0.027358873346693253 +3.8738738738738743,0.026328070413723918 +3.8938938938938943,0.02533076436719051 +3.9139139139139143,0.024366107396354447 +3.9339339339339343,0.023433262427407193 +3.9539539539539543,0.022531403511619683 +3.9739739739739743,0.02165971618049301 +3.9939939939939944,0.02081739776904414 +4.014014014014014,0.020003657708354907 +4.034034034034034,0.019217717788505423 +4.054054054054054,0.018458812393004165 +4.074074074074074,0.017726188705815753 +4.094094094094094,0.017019106892075923 +4.114114114114114,0.016336840253568966 +4.134134134134134,0.015678675360028607 +4.1541541541541545,0.015043912157306556 +4.1741741741741745,0.014431864053436409 +4.1941941941941945,0.013841857983602079 +4.2142142142142145,0.013273234455001096 +4.2342342342342345,0.012725347572573213 +4.2542542542542545,0.012197565046544496 +4.2742742742742745,0.01168926818271556 +4.2942942942942945,0.011199851856401556 +4.314314314314315,0.01072872447090897 +4.334334334334335,0.010275307901411965 +4.354354354354355,0.00983903742506844 +4.374374374374375,0.009419361638192679 +4.394394394394395,0.009015742361278398 +4.414414414414415,0.008627654532642649 +4.434434434434435,0.008254586091437772 +4.454454454454455,0.007896037850754864 +4.474474474474475,0.007551523361519132 +4.494494494494495,0.007220568767854154 +4.514514514514515,0.006902712654568585 +4.534534534534535,0.006597505887396182 +4.554554554554555,0.006304511446596883 +4.574574574574575,0.006023304254504144 +4.594594594594595,0.00575347099758133 +4.614614614614615,0.0054946099435278575 +4.634634634634635,0.005246330753953948 +4.654654654654655,0.005008254293121478 +4.674674674674675,0.004780012433227109 +4.694694694694695,0.004561247856683402 +4.714714714714715,0.004351613855833014 +4.734734734734735,0.004150774130511219 +4.754754754754755,0.003958402583852563 +4.774774774774775,0.00377418311671811 +4.794794794794795,0.0035978094211013725 +4.814814814814815,0.003428984772852527 +4.834834834834835,0.0032674218240429324 +4.854854854854855,0.003112842395274624 +4.874874874874875,0.002964977268222571 +4.894894894894895,0.0028235659786812048 +4.914914914914915,0.0026883566103707754 +4.934934934934935,0.002559105589743716 +4.954954954954955,0.002435577482016225 +4.974974974974975,0.0023175447886358397 +4.994994994994995,0.0022047877463817387 +5.015015015015015,0.0020970941282810306 +5.035035035035035,0.001994259046511198 +5.055055055055055,0.0018960847574462532 +5.075075075075075,0.0018023804689920857 +5.095095095095095,0.0017129621503447277 +5.115115115115115,0.0016276523442940464 +5.135135135135135,0.0015462799821846208 +5.155155155155155,0.0014686802016351133 +5.175175175175175,0.001394694167107605 +5.195195195195195,0.0013241688934087711 +5.215215215215215,0.0012569570721957229 +5.235235235235235,0.001192916901550638 +5.255255255255255,0.0011319119186799756 +5.275275275275275,0.0010738108357861902 +5.295295295295295,0.001018487379152321 +5.315315315315315,0.0009658201314726541 +5.335335335335335,0.0009156923774558751 +5.355355355355355,0.000867991952720666 +5.375375375375375,0.0008226110959976018 +5.395395395395395,0.000779446304645428 +5.415415415415415,0.0007383981934843471 +5.435435435435435,0.0006993713569438073 +5.455455455455455,0.0006622742345174681 +5.475475475475475,0.0006270189795134673 +5.495495495495495,0.0005935213310838689 +5.515515515515515,0.0005617004895132139 +5.535535535535535,0.0005314789947423646 +5.555555555555555,0.0005027826081004157 +5.575575575575575,0.00047554019721421945 +5.595595595595595,0.0004496836240621328 +5.615615615615615,0.0004251476361358544 +5.635635635635635,0.0004018697606717221 +5.655655655655655,0.0003797902019105335 +5.675675675675675,0.00035885174134287574 +5.6956956956956954,0.0003389996408950473 +5.7157157157157155,0.00032018154900895126 +5.7357357357357355,0.0003023474095678058 +5.7557557557557555,0.0002854493736181665 +5.7757757757757755,0.0002694417138375578 +5.7957957957957955,0.0002542807416959667 +5.8158158158158155,0.00023992472725856636 +5.8358358358358355,0.00022633382157628671 +5.8558558558558556,0.00021346998161022183 +5.875875875875876,0.00020129689763538565 +5.895895895895896,0.00018977992306894084 +5.915915915915916,0.00017888600666777975 +5.935935935935936,0.0001685836270401698 +5.955955955955956,0.00015884272941613561 +5.975975975975976,0.00014963466462127818 +5.995995995995996,0.00014093213019887355 +6.016016016016017,0.00013270911362529258 +6.0360360360360374,0.0001249408375640859 +6.0560560560560575,0.00011760370710441984 +6.0760760760760775,0.00011067525893000344 +6.0960960960960975,0.00010413411236510938 +6.1161161161161175,9.795992224485362e-05 +6.1361361361361375,9.213333355749412e-05 +6.1561561561561575,8.663593780715703e-05 +6.1761761761761775,8.145023104608508e-05 +6.1961961961961975,7.65595735262442e-05 +6.216216216216218,7.194815092088248e-05 +6.236236236236238,6.76009370674413e-05 +6.256256256256258,6.350365818404818e-05 +6.276276276276278,5.9642758512672495e-05 +6.296296296296298,5.6005367342908116e-05 +6.316316316316318,5.25792673712398e-05 +6.336336336336338,4.9352864351568826e-05 +6.356356356356358,4.6315157993698466e-05 +6.376376376376378,4.3455714067421535e-05 +6.396396396396398,4.076463767080106e-05 +6.416416416416418,3.8232547622191e-05 +6.436436436436438,3.585055193650334e-05 +6.456456456456458,3.361022434719238e-05 +6.476476476476478,3.150358183638999e-05 +6.496496496496498,2.9523063136588824e-05 +6.516516516516518,2.766150816822985e-05 +6.536536536536538,2.5912138378506647e-05 +6.556556556556558,2.426853794764966e-05 +6.576576576576578,2.2724635829895104e-05 +6.596596596596598,2.1274688597279437e-05 +6.616616616616618,1.9913264055325105e-05 +6.636636636636638,1.8635225600597198e-05 +6.656656656656658,1.7435717291016437e-05 +6.676676676676678,1.63101496007023e-05 +6.696696696696698,1.5254185832000485e-05 +6.716716716716718,1.426372915821215e-05 +6.736736736736738,1.3334910271392269e-05 +6.756756756756758,1.246407561042e-05 +6.776776776776778,1.1647776145362758e-05 +6.796796796796798,1.0882756694959527e-05 +6.816816816816818,1.0165945754836208e-05 +6.836836836836838,9.4944458148363e-06 +6.856856856856858,8.865524144603866e-06 +6.876876876876878,8.276604027292432e-06 +6.896896896896898,7.7252564219929e-06 +6.916916916916918,7.209192036175401e-06 +6.936936936936938,6.726253790124483e-06 +6.956956956956958,6.274409656014098e-06 +6.976976976976978,5.851745854918375e-06 +6.996996996996998,5.456460395685988e-06 +7.017017017017018,5.086856940220749e-06 +7.037037037037038,4.741338980308082e-06 +7.057057057057058,4.418404311707375e-06 +7.077077077077078,4.116639791792951e-06 +7.097097097097098,3.834716367572807e-06 +7.117117117117118,3.571384361443521e-06 +7.137137137137138,3.3254690025527993e-06 +7.157157157157158,3.0958661921378847e-06 +7.177177177177178,2.8815384916887304e-06 +7.197197197197198,2.6815113232498177e-06 +7.217217217217218,2.4948693716240375e-06 +7.237237237237238,2.320753178676375e-06 +7.257257257257258,2.1583559203545567e-06 +7.277277277277278,2.0069203574486368e-06 +7.297297297297298,1.8657359515020388e-06 +7.317317317317318,1.7341361376632196e-06 +7.337337337337338,1.6114957466299333e-06 +7.357357357357358,1.4972285681877958e-06 +7.377377377377378,1.390785049181357e-06 +7.397397397397398,1.2916501190799161e-06 +7.417417417417418,1.1993411366118397e-06 +7.437437437437438,1.1134059512408126e-06 +7.457457457457458,1.0334210735453162e-06 +7.477477477477478,9.589899488392652e-07 +7.497497497497498,8.89741328637246e-07 +7.517517517517518,8.253277348227345e-07 +7.537537537537538,7.654240116221353e-07 +7.557557557557558,7.097259607219805e-07 +7.577577577577578,6.579490550913645e-07 +7.5975975975975985,6.098272272870159e-07 +7.6176176176176185,5.651117282246155e-07 +7.6376376376376385,5.235700525974022e-07 +7.6576576576576585,4.849849273120124e-07 +7.6776776776776785,4.4915335949220685e-07 +7.6976976976976985,4.1588574077388435e-07 +7.7177177177177185,3.8500500477996553e-07 +7.7377377377377385,3.563458348214471e-07 +7.7577577577577586,3.2975391902162033e-07 +7.777777777777779,3.050852502042829e-07 +7.797797797797799,2.8220546802401906e-07 +7.817817817817819,2.60989240947568e-07 +7.837837837837839,2.4131968582014115e-07 +7.857857857857859,2.2308782286955646e-07 +7.877877877877879,2.061920641144635e-07 +7.897897897897899,1.905377332509137e-07 +7.917917917917919,1.7603661519438925e-07 +7.937937937937939,1.6260653355226847e-07 +7.957957957957959,1.5017095439482947e-07 +7.977977977977979,1.3865861478146696e-07 +7.997997997997999,1.2800317458300336e-07 +8.018018018018019,1.1814289022100969e-07 +8.038038038038039,1.090203090210869e-07 +8.058058058058059,1.005819829492733e-07 +8.078078078078079,9.277820056931877e-08 +8.098098098098099,8.556273612362166e-08 +8.118118118118119,7.889261470237839e-08 +8.138138138138139,7.272789252404431e-08 +8.158158158158159,6.703145140571939e-08 +8.178178178178179,6.176880655469655e-08 +8.198198198198199,5.6907926862259885e-08 +8.218218218218219,5.2419066928043386e-08 +8.238238238238239,4.8274610087966266e-08 +8.258258258258259,4.444892176108461e-08 +8.278278278278279,4.0918212470738604e-08 +8.298298298298299,3.766040993324921e-08 +8.318318318318319,3.465503964323947e-08 +8.338338338338339,3.188311341850448e-08 +8.358358358358359,2.9327025399350928e-08 +8.378378378378379,2.697045502755155e-08 +8.398398398398399,2.4798276558596732e-08 +8.418418418418419,2.279647468787558e-08 +8.438438438438439,2.0952065896847053e-08 +8.458458458458459,1.925302514925403e-08 +8.478478478478479,1.768821759006418e-08 +8.498498498498499,1.6247334921157145e-08 +8.518518518518519,1.4920836147889933e-08 +8.538538538538539,1.3699892409622672e-08 +8.558558558558559,1.2576335625140197e-08 +8.578578578578579,1.1542610700715167e-08 +8.598598598598599,1.0591731064385666e-08 +8.618618618618619,9.717237304914516e-09 +8.63863863863864,8.913158707911974e-09 +8.65865865865866,8.173977494784034e-09 +8.67867867867868,7.494595582561493e-09 +8.6986986986987,6.870303694316149e-09 +8.71871871871872,6.296752660816444e-09 +8.73873873873874,5.7699267643599956e-09 +8.75875875875876,5.28611898537923e-09 +8.77877877877878,4.841908021483401e-09 +8.7987987987988,4.434136957112363e-09 +8.81881881881882,4.059893469963204e-09 +8.83883883883884,3.716491467841983e-09 +8.85885885885886,3.401454056618205e-09 +8.87887887887888,3.1124977465452213e-09 +8.8988988988989,2.847517810382273e-09 +8.91891891891892,2.604574712536835e-09 +8.93893893893894,2.3818815338630113e-09 +8.95895895895896,2.1777923218238912e-09 +8.97897897897898,1.9907913004742718e-09 +8.998998998999,1.8194828791637996e-09 +9.01901901901902,1.6625824030183372e-09 +9.03903903903904,1.5189075921459597e-09 +9.05905905905906,1.38737062015004e-09 +9.07907907907908,1.266970785931154e-09 +9.0990990990991,1.1567877359357649e-09 +9.11911911911912,1.0559751969774664e-09 +9.13913913913914,9.637551825284225e-10 +9.15915915915916,8.794126379666174e-10 +9.17917917917918,8.022904926806516e-10 +9.1991991991992,7.317850891883775e-10 +9.21921921921922,6.673419615290896e-10 +9.23923923923924,6.084519371509368e-10 +9.25925925925926,5.546475383444925e-10 +9.27927927927928,5.054996609787182e-10 +9.2992992992993,4.6061450988468017e-10 +9.31931931931932,4.1963077171299245e-10 +9.33933933933934,3.8221700746994e-10 +9.35935935935936,3.480692482213214e-10 +9.37937937937938,3.1690877864837094e-10 +9.3993993993994,2.884800942525761e-10 +9.41941941941942,2.6254901904118343e-10 +9.43943943943944,2.3890097148788503e-10 +9.45945945945946,2.1733936745835158e-10 +9.47947947947948,1.9768414962249373e-10 +9.4994994994995,1.7977043364875085e-10 +9.51951951951952,1.6344726219431744e-10 +9.53953953953954,1.4857645837274253e-10 +9.55955955955956,1.3503157100019476e-10 +9.57957957957958,1.226969044971726e-10 +9.5995995995996,1.114666268565524e-10 +9.61961961961962,1.012439495844808e-10 +9.63963963963964,9.194037398035494e-11 +9.65965965965966,8.347499854850021e-11 +9.67967967967968,7.577388272945277e-11 +9.6996996996997,6.876946250516688e-11 +9.71971971971972,6.240001377199487e-11 +9.73973973973974,5.6609159689839135e-11 +9.75975975975976,5.134541850719675e-11 +9.77977977977978,4.656178863156737e-11 +9.7997997997998,4.2215367964389906e-11 +9.81981981981982,3.826700475075735e-11 +9.83983983983984,3.4680977407952604e-11 +9.85985985985986,3.142470099460374e-11 +9.87987987987988,2.8468458165120247e-11 +9.8998998998999,2.57851526231251e-11 +9.91991991991992,2.3350083243845715e-11 +9.93993993993994,2.1140737179795716e-11 +9.95995995995996,1.913660039744377e-11 +9.97997997997998,1.731898421572835e-11 +10.0,1.5670866530993244e-11 diff --git a/graphics/background/z_distribution.typ b/graphics/background/z_distribution.typ new file mode 100644 index 0000000..69befb1 --- /dev/null +++ b/graphics/background/z_distribution.typ @@ -0,0 +1,27 @@ +#import "@preview/cetz:0.3.4": canvas +#import "@preview/cetz-plot:0.1.1": plot, chart + +#let data = csv("z_distribution.csv") +#let data = data.map(value => value.map(v => float(v))) + +#let line_style = (stroke: (paint: black, thickness: 2pt)) +#let dashed = (stroke: (dash: "dashed")) +#canvas({ + plot.plot(size: (6,3), + legend : "south", + legend-style: (orientation: ltr, item: (spacing: 0.5)), + x-tick-step: none, + x-ticks: ((0, [0]), (100, [0])), + y-label: $cal(Q)(1, z), abs(f_"Z" (z))$, + x-label: $z$, + y-tick-step: none, + y-ticks: ((0, [0]), (0.6, [1])), + axis-style: "left", + x-min: -5, + x-max: 5, + y-min: 0, + y-max: 0.6,{ + plot.add((data), style: (stroke: (paint: red, thickness: 2pt)), label: [Optimierte PDF]) + plot.add(((-5, 0), (0, 0), (0, 0.6), (5, 0.6)), style: line_style, label: [Quantisierer]) + }) +}) diff --git a/graphics/execution/brute-force-occurs.png b/graphics/execution/brute-force-occurs.png new file mode 100644 index 0000000..ec84674 Binary files /dev/null and b/graphics/execution/brute-force-occurs.png differ diff --git a/graphics/execution/brute-force.png b/graphics/execution/brute-force.png new file mode 100644 index 0000000..7a2219a Binary files /dev/null and b/graphics/execution/brute-force.png differ diff --git a/graphics/execution/given_codeword.png b/graphics/execution/given_codeword.png new file mode 100644 index 0000000..e12d965 Binary files /dev/null and b/graphics/execution/given_codeword.png differ diff --git a/graphics/execution/helperdata_occurs.png b/graphics/execution/helperdata_occurs.png new file mode 100644 index 0000000..efbe1f7 Binary files /dev/null and b/graphics/execution/helperdata_occurs.png differ diff --git a/graphics/execution/recursive_distribution .png b/graphics/execution/recursive_distribution .png new file mode 100644 index 0000000..b9ad89b Binary files /dev/null and b/graphics/execution/recursive_distribution .png differ diff --git a/main.typ b/main.typ new file mode 100644 index 0000000..c0a9983 --- /dev/null +++ b/main.typ @@ -0,0 +1,34 @@ +#import "template/conf.typ": conf +#import "@preview/glossarium:0.5.6": * + +#show: doc => conf( + title: "Parameteroptimierung für Multi-Input Higher-Order Alphabet Quantization", + author: "Marius Drechsler", + chair: "Lehrstuhl für Sicherheit in der Informationstechnik", + school: "School of Computation, Information and Technology", + degree: "Ingenieurspraxis", + examiner: "Dr. Michael Pehl", + supervisor: "M.Sc. Jonas Ruchti", + submitted: "30.05.2025", + doc +) + +#set math.equation( + numbering: "(1)" +) + +// Include glossary items and register glossary +#import "glossary_items.typ": entry-list +#register-glossary(entry-list) + +// Include your content here +#include "content/introduction.typ" +#include "content/background.typ" +#include "content/execution.typ" +#include "content/results.typ" + + +#show: make-glossary +#include "glossary.typ" + +#bibliography("bibliography.bib", style: "ieee") diff --git a/template/colour.typ b/template/colour.typ new file mode 100644 index 0000000..2aabc7d --- /dev/null +++ b/template/colour.typ @@ -0,0 +1,3 @@ +#let tum_blue = rgb(0, 101, 189) +#let tum_white = rgb(255, 255, 255) +#let tum_black = rgb(0, 0, 0) diff --git a/template/conf.typ b/template/conf.typ new file mode 100644 index 0000000..cd77d0d --- /dev/null +++ b/template/conf.typ @@ -0,0 +1,156 @@ +#import "cover.typ": cover_page +#import "title.typ": title_page +#import "contents.typ": contents_page + +#let conf( + title: "", + author: "", + chair: "", + school: "", + degree: "", + examiner: "", + supervisor: "", + submitted: "", + doc +) = { + cover_page( + title: title, + author: author, + chair: chair, + school: school + ) + + title_page( + title: title, + author: author, + chair: chair, + school: school, + degree: degree, + examiner: examiner, + supervisor: supervisor, + submitted: submitted + ) + +set document(title: title, author: author) + +/* + set heading(numbering: "1.") + show heading: it => locate(loc => { + let levels = counter(heading).at(loc) + + set text(font: "TUM Neue Helvetica") + if it.level == 1 [ + #if levels.at(0) != 1 { + pagebreak(to: "odd") + } + #set text(size: 24pt) + #if levels.at(0) != 0 { + numbering("1", levels.at(0)) + } + #it.body + #v(1em, weak: true) + ] else if it.level == 2 [ + #set text(size: 16pt) + #v(1em) + #numbering("1.1", levels.at(0), levels.at(1)) + #it.body + #v(1em, weak: true) + ] else if it.level == 3 [ + #set text(size: 16pt) + #v(1em, weak: true) + #numbering("1.1.1", levels.at(0), levels.at(1), levels.at(2)) + #it.body + #v(1em, weak: true) + ] else [ + #set text(size: 12pt) + #v(1em, weak: true) + #it.body + #v(1em, weak: true) + ] + }) +*/ + +contents_page() + +// This section defines the heading numberins and stylings for different heading levels +// Kind of a hack but works. +// TODO needs some refactoring +set heading(numbering: "1.") +show heading: it => [ + #v(1em) + #text( + size: 12pt, + font: "TUM Neue Helvetica", + it.body + ) + #v(1em, weak:true) +] + +show heading.where( + level: 1 +): it => [ + #pagebreak() + #v(1em) + #text( + size: 24pt, + font: "TUM Neue Helvetica", + //[#context counter(heading).display() ] + it.body, + [#context{ + if counter(heading).get().at(0) == 0 [ + #it.body + ] else [ + #counter(heading).display() #it.body + ] + }] + ) + #v(1em, weak: true) +] + +show heading.where( + level: 3 +): it => [ + #v(1em) + #text( + size: 16pt, + font: "TUM Neue Helvetica", + [#context counter(heading).display() ] + it.body + ) + #v(1em, weak:true) +] + +show heading.where( + level: 2 +): it => [ + #v(1em) + #text( + size: 16pt, + font: "TUM Neue Helvetica", + context[#counter(heading).display() ] + it.body + ) + #v(1em, weak: true) +] + + + +set page( + paper: "a4", + margin: ( + top: 3cm, + bottom: 3cm, + x: 2cm, + ), + numbering: "1", + header: [], + //footer: [] +) + + + set par(justify: true) + set align(left) + set text( + lang: "de", + // font: "Times New Roman", + size: 12pt + ) + doc +} diff --git a/template/contents.typ b/template/contents.typ new file mode 100644 index 0000000..5bd2dcf --- /dev/null +++ b/template/contents.typ @@ -0,0 +1,28 @@ +#import "colour.typ": * + +#let contents_page() = { + set text(font: "TUM Neue Helvetica", lang: "de") + + // Override the heading function to not make the Contents page affected by heading numbering 0 + + show heading.where( + level: 1 + ): it => [ + #v(1em) + #text( + size: 24pt, + font: "TUM Neue Helvetica", + it.body + ) + #v(1em, weak: true) + ] + + show outline.entry.where( + level: 1 + ): it => { + v(1em) + strong(it) + } + + outline(indent: auto) +} diff --git a/template/cover.typ b/template/cover.typ new file mode 100644 index 0000000..d5811ba --- /dev/null +++ b/template/cover.typ @@ -0,0 +1,43 @@ +#import "colour.typ": * + +#let cover_page( + title: "", + author: "", + chair: "", + school: "" +) = { + page( + paper: "a4", + margin: ( + top: 3cm, + bottom: 1cm, + x: 1cm, + ), + header: [ + #grid( + columns: (1fr, 1fr), + rows: (auto), + text( + fill: tum_blue, + size: 8pt, + font: "TUM Neue Helvetica", + [#chair \ #school \ Technische Universität München] + ), + align(bottom + right, image("resources/TUM_Logo_blau.svg", height: 50%)) + ) + ], + footer: [] + )[ + #v(1cm) + + #align(top + left)[#text(font: "TUM Neue Helvetica", size: 24pt, [*#title*])] + + #v(3cm) + + #text(font: "TUM Neue Helvetica", fill: tum_blue, size: 17pt, [*#author*]) + + #align(bottom + right)[#image("resources/TUM_Tower.png", width: 60%)] + ] + + pagebreak() +} diff --git a/template/resources/TUMNeueHelvetica-Bold.ttf b/template/resources/TUMNeueHelvetica-Bold.ttf new file mode 100755 index 0000000..a6adbd5 Binary files /dev/null and b/template/resources/TUMNeueHelvetica-Bold.ttf differ diff --git a/template/resources/TUMNeueHelvetica-BoldItalic.ttf b/template/resources/TUMNeueHelvetica-BoldItalic.ttf new file mode 100755 index 0000000..e34f14a Binary files /dev/null and b/template/resources/TUMNeueHelvetica-BoldItalic.ttf differ diff --git a/template/resources/TUMNeueHelvetica-Italic.ttf b/template/resources/TUMNeueHelvetica-Italic.ttf new file mode 100755 index 0000000..c1b2de9 Binary files /dev/null and b/template/resources/TUMNeueHelvetica-Italic.ttf differ diff --git a/template/resources/TUMNeueHelvetica-Regular.ttf b/template/resources/TUMNeueHelvetica-Regular.ttf new file mode 100755 index 0000000..3b7b026 Binary files /dev/null and b/template/resources/TUMNeueHelvetica-Regular.ttf differ diff --git a/template/resources/TUM_Flags_169.png b/template/resources/TUM_Flags_169.png new file mode 100644 index 0000000..530a37b Binary files /dev/null and b/template/resources/TUM_Flags_169.png differ diff --git a/template/resources/TUM_Flags_43.png b/template/resources/TUM_Flags_43.png new file mode 100644 index 0000000..5aede51 Binary files /dev/null and b/template/resources/TUM_Flags_43.png differ diff --git a/template/resources/TUM_Logo_blau.svg b/template/resources/TUM_Logo_blau.svg new file mode 100644 index 0000000..b2219f8 --- /dev/null +++ b/template/resources/TUM_Logo_blau.svg @@ -0,0 +1,6 @@ + +image/svg+xmlTUM_Web_Logo_blau +TUM_Web_Logo_blau +TUM + + \ No newline at end of file diff --git a/template/resources/TUM_Tower.png b/template/resources/TUM_Tower.png new file mode 100644 index 0000000..79481eb Binary files /dev/null and b/template/resources/TUM_Tower.png differ diff --git a/template/resources/TUM_Tower_white.png b/template/resources/TUM_Tower_white.png new file mode 100644 index 0000000..7b08955 Binary files /dev/null and b/template/resources/TUM_Tower_white.png differ diff --git a/template/title.typ b/template/title.typ new file mode 100644 index 0000000..6a824fc --- /dev/null +++ b/template/title.typ @@ -0,0 +1,67 @@ +#import "colour.typ": * + +#let title_page( + title: "", + author: "", + chair: "", + school: "", + degree: "", + examiner: "", + supervisor: "", + submitted: "" +) = { + page( + paper: "a4", + margin: ( + top: 5cm, + bottom: 3cm, + x: 2cm, + ), + header: [ + #grid( + columns: (1fr, 1fr), + rows: (auto), + text( + fill: tum_blue, + size: 8pt, + font: "TUM Neue Helvetica", + [#chair \ #school \ Technische Universität München] + ), + align(bottom + right, image("resources/TUM_Logo_blau.svg", height: 30%)) + ) + ], + footer: [] + )[ + #set text( + font: "TUM Neue Helvetica", + size: 10pt + ) + + #v(1cm) + + #set align(top + left) + #text(size: 24pt, [*#title*]) + + #v(3cm) + + #text(fill: tum_blue, size: 17pt, [*#author*]) + + #v(3cm) + + Bericht zur Ableistung der + #v(1em) + *#degree* + #v(1em) + an der #school der Technischen Universität München. + + #v(3cm) + + *Prüfer:*\ #examiner + #v(0em) + *Betreuer:*\ #supervisor + #v(0em) + *Eingereicht am:*\ Munich, #submitted + ] + + pagebreak() +} diff --git a/typst.toml b/typst.toml new file mode 100644 index 0000000..9dd8fb9 --- /dev/null +++ b/typst.toml @@ -0,0 +1,2 @@ +[[tinymist.input]] +entry = "main.typ"