space-workshop/.ipynb_checkpoints/U02_1_Input.en-checkpoint.ipynb
Kai Vogelgesang 489ddd75b9
Init
2025-09-18 18:33:58 +02:00

117 lines
3.5 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "d709b880",
"metadata": {},
"source": [
"# Input"
]
},
{
"cell_type": "markdown",
"id": "5f40e11b",
"metadata": {},
"source": [
"Here you can download the input files (right click / save as...):\n",
"* <a href=_static/2024-03-16-16k.in download>2024-03-16</a>\n",
"* <a href=_static/2023-04-20-16k.in download>2023-04-20</a>\n",
"* <a href=_static/2023-06-15-16k.in download>2023-06-15</a>\n",
"* <a href=_static/2024-03-14-16k.in download>2023-03-14</a>"
]
},
{
"cell_type": "markdown",
"id": "6ab69020",
"metadata": {},
"source": [
"In diesem Projekt arbeiten wir mit Audio-Daten.\n",
"Um das Einlesen möglichst unkompliziert zu halten, stellen wir die Eingabe in einem einfachen Format bereit:\n",
"\n",
"```{admonition} Format\n",
"Die erste Zeile enthält $n$, die Anzahl der Samples ($0 \\leq n < 2^{32}$).\n",
"\n",
"Danach folgen $n$ Zeilen mit jeweils einem Sample $x$ als ganze Zahl ($-2^{15} \\leq x < 2^{15}$)\n",
"```\n",
"\n",
"Die Abtastrate $f_S$ ist dabei 16640 Hz.\n",
"\n",
"## Beispiel\n",
"```\n",
"10\n",
"623\n",
"-310\n",
"-273\n",
"3404\n",
"4745\n",
"655\n",
"-454\n",
"3463\n",
"3375\n",
"-5350\n",
"```\n",
"\n",
"```{note}\n",
"Die Werte der Samples sind hier zwar ganze Zahlen, aber für den Rest des Projekts ergibt es Sinn sie hier schon in Floating-Point Werte umzuwandeln.\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "cfcac6c9",
"metadata": {},
"source": [
"# Visualisierung\n",
"\n",
"In diesem Projekt kann es sehr hilfreich sein, sich nach jedem Arbeitsschritt das Ergebnis zu visualisieren.\n",
"Das können wir zum Beispiel so tun:\n",
"- Das Signal enthält 2 Zeilen mit je 2080 Pixeln pro Sekunde. Mit $f_S = 16640\\text{Hz}$ haben wir also 4 Samples pro Pixel.\n",
"- Wir nehmen jedes 4. Sample, falls es komplex ist berechnen wir den Betrag $(a + ib \\mapsto \\sqrt{a^2+b^2} =\\mathrel{\\vcenter{:}} v)$.\n",
"- Wir finden $v_{min}$ und $v_{max}$, den kleinsten bzw. größten so erhaltenen Wert.\n",
" Dann skalieren wir jedes $v$ nach $255 \\cdot (v - v_{min}) / (v_{max} - v_{min})$.\n",
" Damit bekommen wir einen Wert zwischen 0 und 255.\n",
"- Diese Werte können wir jetzt als Pixel in einer Bilddatei abspeichern.\n",
" Dazu können wir zum Beispiel das [](pgm-format) benutzen.\n",
" \n",
"```{figure} img/reference/raw_full_scaled.webp\n",
"---\n",
"name: fig:raw_full.en\n",
"---\n",
"Visualisierung direkt nach dem Einlesen.\n",
"Man kann das Bild fast schon erkennen, es ist aber noch sehr dunkel.\n",
"```\n",
"\n",
"```{figure} img/reference/raw_detail.webp\n",
"---\n",
"name: fig:raw_detail.en\n",
"---\n",
"Detailansicht.\n",
"Hier sieht man deutliche vertikale Streifen, die von der Modulation auf den 2.4kHz Carrier kommen.\n",
"```"
]
}
],
"metadata": {
"celltoolbar": "Tags",
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"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.11.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}