refactor: qam
This commit is contained in:
@@ -1,11 +1,6 @@
|
||||
<html>
|
||||
|
||||
<script src="https://www.50ohm.de/assets/jquery/3.7.1/jquery.min.js"></script>
|
||||
<script src="https://www.50ohm.de/assets/chartjs/4.4.1/chart.min.js"></script>
|
||||
|
||||
Das Ganze lässt sich leicht mathematisch beschreiben. Für die Summe eines Cosinus-Trägers mit einem anderen, um $\qty{90}{\degree}$ phasenverschobenen Cosinus-Träger gilt folgender Zusammenhang:<br><br>
|
||||
<center>$ I(t)\cdot \cos\left(\omega t\right) + Q(t)\cdot \cos\left(\omega t + \qty{90}{\degree}\right)=A \cdot \cos\left(\omega t+\phi\right) $</center><br><br>
|
||||
Es entsteht also ein neues Cosinussignal mit einer Amplitude von $A=\sqrt{I(t)^2 + Q(t)^2}$ und einer Phasenverschiebung von $ \phi = \operatorname{atan2}\left(Q(t),I(t)\right)$<br><br>
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
@@ -30,7 +25,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br><br>
|
||||
<br>
|
||||
<canvas id="IQ" style="width:100%; min-height:100px; max-width:600px"></canvas>
|
||||
|
||||
$A=$<div id="ares" style="display:inline;">0</div> und $\phi=$<div id="phires" style="display:inline;">0</div>
|
||||
|
||||
@@ -0,0 +1,302 @@
|
||||
<style>
|
||||
.iq169-applet {
|
||||
--iq169-i: #00aedf;
|
||||
--iq169-q: #40c08c;
|
||||
--iq169-sum: #ed7d71;
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
aspect-ratio: 2.25 / 1;
|
||||
box-sizing: border-box;
|
||||
display: grid;
|
||||
grid-template-rows: auto minmax(0, 1fr);
|
||||
gap: .45rem;
|
||||
padding: .55rem;
|
||||
overflow: visible;
|
||||
font-size: clamp(10px, 1.15vw, 15px);
|
||||
}
|
||||
|
||||
.iq169-applet .iq169-controls {
|
||||
display: grid;
|
||||
grid-template-columns: auto minmax(0, 1fr) 4.4em auto minmax(0, 1fr) 4.4em;
|
||||
gap: .35em .55em;
|
||||
align-items: center;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.iq169-applet label {
|
||||
margin: 0;
|
||||
font-weight: 650;
|
||||
}
|
||||
|
||||
.iq169-applet input[type="range"] {
|
||||
width: 100%;
|
||||
min-width: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.iq169-applet output {
|
||||
display: block;
|
||||
min-width: 4.4em;
|
||||
text-align: right;
|
||||
font-variant-numeric: tabular-nums;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.iq169-applet .iq169-content {
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1.65fr) minmax(0, 1fr);
|
||||
gap: .5rem;
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
.iq169-applet .iq169-waves {
|
||||
display: grid;
|
||||
grid-template-rows: repeat(2, minmax(0, 1fr));
|
||||
gap: 1rem;
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
.iq169-applet figure {
|
||||
display: grid;
|
||||
grid-template-rows: 1.45em minmax(0, 1fr);
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.iq169-applet figcaption {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin: 0;
|
||||
font-size: .84em;
|
||||
font-weight: 650;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
line-height: 1.1;
|
||||
background: var(--bs-body-bg, #fff);
|
||||
}
|
||||
|
||||
.iq169-applet .iq169-constellation-panel {
|
||||
grid-template-rows: 1.45em minmax(0, 1fr) auto;
|
||||
}
|
||||
|
||||
.iq169-applet .iq169-canvas-wrap {
|
||||
position: relative;
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
border: 1px solid rgba(120, 130, 140, .35);
|
||||
border-radius: .2rem;
|
||||
background: var(--bs-body-bg, #fff);
|
||||
}
|
||||
|
||||
.iq169-applet canvas {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.iq169-applet .iq169-result {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: .8em;
|
||||
margin-top: .15rem;
|
||||
font-size: .8em;
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="iq169-applet" aria-label="I/Q-Modulation im Format 16 zu 9">
|
||||
<div class="iq169-controls">
|
||||
<label style="color:var(--iq169-i)"><var>I</var></label>
|
||||
<input data-iq169-i type="range" min="-100" max="100" step="1" value="50" aria-label="I-Anteil">
|
||||
<output data-iq169-i-output>50 %</output>
|
||||
|
||||
<label style="color:var(--iq169-q)"><var>Q</var></label>
|
||||
<input data-iq169-q type="range" min="-100" max="100" step="1" value="50" aria-label="Q-Anteil">
|
||||
<output data-iq169-q-output>50 %</output>
|
||||
</div>
|
||||
|
||||
<div class="iq169-content">
|
||||
<div class="iq169-waves">
|
||||
<figure>
|
||||
<figcaption>I- und Q-Anteil</figcaption>
|
||||
<div class="iq169-canvas-wrap">
|
||||
<canvas data-iq169-parts aria-label="I- und Q-Anteil"></canvas>
|
||||
</div>
|
||||
</figure>
|
||||
<figure>
|
||||
<figcaption>Summiertes I/Q-Signal</figcaption>
|
||||
<div class="iq169-canvas-wrap">
|
||||
<canvas data-iq169-sum aria-label="Summiertes I/Q-Signal"></canvas>
|
||||
</div>
|
||||
</figure>
|
||||
</div>
|
||||
|
||||
<figure class="iq169-constellation-panel">
|
||||
<figcaption>Konstellationsdiagramm</figcaption>
|
||||
<div class="iq169-canvas-wrap">
|
||||
<canvas data-iq169-constellation aria-label="Konstellationsdiagramm"></canvas>
|
||||
</div>
|
||||
<div class="iq169-result">
|
||||
<span><var>A</var> = <strong data-iq169-a>71 %</strong></span>
|
||||
<span><var>φ</var> = <strong data-iq169-phi>45°</strong></span>
|
||||
</div>
|
||||
</figure>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function () {
|
||||
const applet = document.currentScript.closest('.iq169-applet');
|
||||
const iInput = applet.querySelector('[data-iq169-i]');
|
||||
const qInput = applet.querySelector('[data-iq169-q]');
|
||||
const partsCanvas = applet.querySelector('[data-iq169-parts]');
|
||||
const sumCanvas = applet.querySelector('[data-iq169-sum]');
|
||||
const constellationCanvas = applet.querySelector('[data-iq169-constellation]');
|
||||
|
||||
function color(name, fallback) {
|
||||
return getComputedStyle(applet).getPropertyValue(name).trim() || fallback;
|
||||
}
|
||||
|
||||
function setup(canvas) {
|
||||
const rect = canvas.getBoundingClientRect();
|
||||
const dpr = window.devicePixelRatio || 1;
|
||||
const pixelWidth = Math.max(1, Math.round(rect.width * dpr));
|
||||
const pixelHeight = Math.max(1, Math.round(rect.height * dpr));
|
||||
if (canvas.width !== pixelWidth || canvas.height !== pixelHeight) {
|
||||
canvas.width = pixelWidth;
|
||||
canvas.height = pixelHeight;
|
||||
}
|
||||
const ctx = canvas.getContext('2d');
|
||||
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
|
||||
return { ctx: ctx, width: rect.width, height: rect.height };
|
||||
}
|
||||
|
||||
function line(ctx, x0, y0, x1, y1) {
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(x0, y0);
|
||||
ctx.lineTo(x1, y1);
|
||||
ctx.stroke();
|
||||
}
|
||||
|
||||
function drawWaveCanvas(canvas, series, yLimit) {
|
||||
const drawing = setup(canvas);
|
||||
const ctx = drawing.ctx;
|
||||
const width = drawing.width;
|
||||
const height = drawing.height;
|
||||
const left = 7;
|
||||
const right = 5;
|
||||
const middle = height / 2;
|
||||
const plotWidth = width - left - right;
|
||||
const scale = height * .4 / yLimit;
|
||||
|
||||
ctx.clearRect(0, 0, width, height);
|
||||
ctx.strokeStyle = 'rgba(100,110,120,.42)';
|
||||
ctx.lineWidth = 1;
|
||||
line(ctx, left, middle, width - right, middle);
|
||||
for (let grid = 1; grid < 4; grid++) {
|
||||
const x = left + plotWidth * grid / 4;
|
||||
ctx.strokeStyle = 'rgba(120,130,140,.16)';
|
||||
line(ctx, x, 2, x, height - 2);
|
||||
}
|
||||
|
||||
series.forEach(function (item) {
|
||||
ctx.strokeStyle = item.color;
|
||||
ctx.lineWidth = item.width || 2;
|
||||
ctx.lineJoin = 'round';
|
||||
ctx.beginPath();
|
||||
for (let pixel = 0; pixel <= Math.ceil(plotWidth); pixel++) {
|
||||
const theta = 4 * Math.PI * pixel / plotWidth;
|
||||
const x = left + pixel;
|
||||
const y = middle - item.value(theta) * scale;
|
||||
pixel === 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);
|
||||
}
|
||||
ctx.stroke();
|
||||
});
|
||||
}
|
||||
|
||||
function drawConstellation(i, q) {
|
||||
const drawing = setup(constellationCanvas);
|
||||
const ctx = drawing.ctx;
|
||||
const width = drawing.width;
|
||||
const height = drawing.height;
|
||||
const cx = width / 2;
|
||||
const cy = height / 2;
|
||||
const unit = Math.min(width, height) * .4 / 110;
|
||||
const px = cx + i * unit;
|
||||
const py = cy - q * unit;
|
||||
const textColor = getComputedStyle(applet).color || '#263238';
|
||||
const sumColor = color('--iq169-sum', '#ed7d71');
|
||||
|
||||
ctx.clearRect(0, 0, width, height);
|
||||
ctx.strokeStyle = 'rgba(100,110,120,.55)';
|
||||
ctx.lineWidth = 1;
|
||||
line(ctx, 5, cy, width - 5, cy);
|
||||
line(ctx, cx, 5, cx, height - 5);
|
||||
ctx.strokeStyle = 'rgba(120,130,140,.25)';
|
||||
ctx.beginPath();
|
||||
ctx.arc(cx, cy, 100 * unit, 0, 2 * Math.PI);
|
||||
ctx.stroke();
|
||||
|
||||
const axisFontSize = Math.max(9, width * .04);
|
||||
ctx.fillStyle = textColor;
|
||||
ctx.font = axisFontSize + 'px system-ui, sans-serif';
|
||||
ctx.textBaseline = 'top';
|
||||
ctx.fillText('Q', cx + 6, 6);
|
||||
ctx.textBaseline = 'alphabetic';
|
||||
ctx.fillText('I', width - axisFontSize, cy - 7);
|
||||
|
||||
ctx.setLineDash([4, 3]);
|
||||
ctx.strokeStyle = 'rgba(120,130,140,.65)';
|
||||
line(ctx, px, cy, px, py);
|
||||
line(ctx, cx, py, px, py);
|
||||
ctx.setLineDash([]);
|
||||
ctx.strokeStyle = sumColor;
|
||||
ctx.lineWidth = 2.5;
|
||||
line(ctx, cx, cy, px, py);
|
||||
ctx.fillStyle = sumColor;
|
||||
ctx.beginPath();
|
||||
ctx.arc(px, py, Math.max(4, width * .018), 0, 2 * Math.PI);
|
||||
ctx.fill();
|
||||
}
|
||||
|
||||
function draw() {
|
||||
const i = Number(iInput.value);
|
||||
const q = Number(qInput.value);
|
||||
const iColor = color('--iq169-i', '#00aedf');
|
||||
const qColor = color('--iq169-q', '#40c08c');
|
||||
const sumColor = color('--iq169-sum', '#ed7d71');
|
||||
|
||||
drawWaveCanvas(partsCanvas, [
|
||||
{ color: iColor, value: function (theta) { return i * Math.cos(theta); } },
|
||||
{ color: qColor, value: function (theta) { return q * Math.cos(theta + Math.PI / 2); } }
|
||||
], 100);
|
||||
drawWaveCanvas(sumCanvas, [
|
||||
{ color: sumColor, width: 2.5, value: function (theta) {
|
||||
return i * Math.cos(theta) + q * Math.cos(theta + Math.PI / 2);
|
||||
} }
|
||||
], Math.SQRT2 * 100);
|
||||
drawConstellation(i, q);
|
||||
|
||||
applet.querySelector('[data-iq169-i-output]').textContent = i + ' %';
|
||||
applet.querySelector('[data-iq169-q-output]').textContent = q + ' %';
|
||||
applet.querySelector('[data-iq169-a]').textContent = Math.round(Math.hypot(i, q)) + ' %';
|
||||
applet.querySelector('[data-iq169-phi]').textContent = Math.round(Math.atan2(q, i) * 180 / Math.PI) + '°';
|
||||
}
|
||||
|
||||
iInput.addEventListener('input', draw);
|
||||
qInput.addEventListener('input', draw);
|
||||
new ResizeObserver(draw).observe(applet);
|
||||
draw();
|
||||
})();
|
||||
</script>
|
||||
</div>
|
||||
@@ -1,9 +1,61 @@
|
||||
Bisher haben wir ASK und PSK kennengelernt. Es scheint für beide Verfahren zunächst nahezuliegen, die Anzahl der Symbole möglichst groß zu wählen, damit pro Symbol möglichst viele Informationen übertragen werden können. Doch dann muss ein Empfänger z. B. zwischen vielen unterschiedlichen Amplituden unterscheiden können. Somit wird das Verfahren anfälliger für Störungen.
|
||||
|
||||
Es scheint zunächst nahezuliegen, die Anzahl der Symbole möglichst groß zu wählen, damit pro Symbol möglichst viele Informationen übertragen werden können. Doch dann muss ein Empfänger z. B. zwischen vielen unterschiedlichen Amplituden unterscheiden können. Somit wird das Verfahren anfälliger für Störungen.
|
||||
Um dieses Problem zu mildern, kann man auf einen Trick zurückgreifen: Anstelle der Änderung nur eines Parameters (z. B. der Amplitude) werden pro Symbol zwei Parameter verändert, nämlich die Amplitude und die Phase. Ein Symbol entspricht dann einer Kombination einer bestimmten Amplitude mit einer bestimmten Phasenlage. So ergibt sich trotz kleiner Anzahl unterschiedlicher Amplituden und Phasenlagen dennoch eine größere Anzahl an Symbolen. Bei gleicher Symbolrate können somit mehr Bits pro Sekunde übertragen werden. Dieses Verfahren wird *Quadraturamplitudenmodulation* (QAM) genannt.
|
||||
|
||||
Um dieses Problem zu mildern, kann man auf einen Trick zurückgreifen: Anstelle der Änderung nur eines Parameters (z. B. der Amplitude) werden pro Symbol zwei Parameter verändert, nämlich die Amplitude und die Phase. Ein Symbol entspricht dann einer Kombination einer bestimmten Amplitude mit einer bestimmten Phasenlage. So ergibt sich trotz kleiner Anzahl unterschiedlicher Amplituden und Phasenlagen dennoch eine größere Anzahl an Symbolen. Es werden mehr Bits pro Symbol übertragen. Die Datenübertragung erfolgt somit schneller. Dieses Verfahren wird Quadraturamplitudenmodulation (QAM) oder manchmal auch einfach nur Quadraturmodulation genannt.
|
||||
Die Abbildung [ref:a_8qam] zeigt ein 8QAM-Signal im zeitlichen Verlauf. Jedes Symbol besitzt eine bestimmte Amplitude, eine bestimmte Phasenlage und eine 3-stellige Bitfolge, die durch das Mapping festgelegt ist. Mit jedem Symbol können somit drei Bits übertragen werden. Die Abbildung [ref:a_16qam] zeigt ein 16QAM-Mapping im Konstellationsdiagramm. Jedes Symbol entspricht einer Kombination aus einer bestimmten Amplitude und einer bestimmten Phasenlage. Mit jedem Symbol können somit vier Bits übertragen werden.
|
||||
|
||||
[picture:702:8qam:Signalverlauf eines 8QAM-Signals, je Symbol mit Amplitude ($\num{0,5}$ bzw. $\num{1}$), Phasenlage und 3-stelliger Bitfolge]
|
||||
<margin>
|
||||
[picture:702:a_8qam:Signalverlauf eines 8QAM-Signals, je Symbol mit Amplitude ($\num{0,5}$ bzw. $\num{1}$), Phasenlage und 3-stelliger Bitfolge]
|
||||
[picture:1061:a_16qam:I-Q-Diagramm für ein 16-QAM-Mapping]
|
||||
</margin>
|
||||
|
||||
[question:AE403]
|
||||
|
||||
---
|
||||
|
||||
Nachdem wir die I/Q-Darstellung, das Konstellationsdiagramm und die Quadraturamplitudenmodulation kennengelernt haben, stellt sich die Frage, wie ein solches Signal technisch erzeugt werden kann. Dazu kann ein sogenannter *I/Q-Modulator* verwendet werden.
|
||||
|
||||
Ein I/Q-Modulator arbeitet mit zwei Trägern gleicher Frequenz, die um $\qty{90}{\degree}$ gegeneinander phasenverschoben sind. Der erste Träger wird mit dem I-Signal und der um $\qty{90}{\degree}$ phasenverschobene Träger mit dem Q-Signal gewichtet. Abbildung [ref:a_iq_modulator] zeigt das Blockschaltbild eines I/Q-Modulators.
|
||||
|
||||
Anschließend werden die beiden modulierten Träger addiert. Je nachdem, welche Werte I und Q besitzen, entsteht dadurch ein Signal mit einer bestimmten Amplitude und Phasenlage. Werden die Werte von I und Q verändert, kann sich somit sowohl die Amplitude als auch die Phase des resultierenden Signals ändern.
|
||||
|
||||
<margin>
|
||||
[picture:196:a_iq_modulator:Blockschaltbild eines I/Q-Modulators]
|
||||
</margin>
|
||||
|
||||
<webonly>
|
||||
<indepth>
|
||||
Das Ganze lässt sich leicht mathematisch beschreiben. Für die Summe eines Cosinus-Trägers mit einem anderen, um $\qty{90}{\degree}$ phasenverschobenen Cosinus-Träger gilt folgender Zusammenhang:
|
||||
|
||||
$ I(t)\cdot \cos\left(\omega t\right) + Q(t)\cdot \cos\left(\omega t + \qty{90}{\degree}\right)=A \cdot \cos\left(\omega t+\phi\right) $
|
||||
|
||||
Es entsteht also ein neues Cosinussignal mit einer Amplitude von
|
||||
|
||||
$A=\sqrt{I(t)^2 + Q(t)^2}$
|
||||
|
||||
und einer Phasenverschiebung von
|
||||
|
||||
$ \phi = \operatorname{atan2}\left(Q(t),I(t)\right)$
|
||||
|
||||
[include:applet_iq]
|
||||
</indepth>
|
||||
</webonly>
|
||||
|
||||
[question:AF632]
|
||||
[question:AE404]
|
||||
|
||||
In einem digitalen System können die Werte für I und Q sehr einfach in Software erzeugt werden. Dazu ordnet beispielsweise ein Mikrocontroller, Signalprozessor oder SDR jedem zu übertragenden Symbol zwei Zahlenwerte für I und Q zu. Ein Signalpunkt im Konstellationsdiagramm entspricht somit unmittelbar einem Wertepaar $(I,Q)$.
|
||||
|
||||
Bei einer 16-QAM könnten beispielsweise für I und Q jeweils vier unterschiedliche Werte verwendet werden. Durch ihre Kombination entstehen die $\num{16}$ verschiedenen Signalpunkte. Die Software muss für jedes Symbol lediglich die zum gewünschten Signalpunkt gehörenden I- und Q-Werte ausgeben.
|
||||
|
||||
Die zunächst digitalen Zahlenwerte für I und Q können anschließend mit zwei DA-Wandlern in analoge Spannungen umgewandelt und dem I/Q-Modulator zugeführt werden. So lässt sich praktisch jeder gewünschte Punkt im Konstellationsdiagramm durch Software erzeugen. Moderne *Software Defined Radios* (SDR) nutzen genau dieses Prinzip: Ein großer Teil der Modulation wird nicht mehr durch fest verdrahtete analoge Schaltungen festgelegt, sondern durch die Berechnung der I- und Q-Signale in Software.
|
||||
|
||||
---
|
||||
|
||||
Ein I/Q-Modulator ist dabei keineswegs auf digitale Modulationsverfahren wie QPSK oder QAM beschränkt. Anstelle einzelner fester I- und Q-Werte kann die Software auch kontinuierlich veränderliche Signalverläufe für I und Q berechnen. Damit lassen sich auch analoge Modulationsverfahren erzeugen.
|
||||
|
||||
Bei einer Amplitudenmodulation wird beispielsweise die Länge des resultierenden Signalzeigers verändert. Bei einer Phasenmodulation wird sein Winkel verändert. Auch bei einer Frequenzmodulation wird die Phase des Signalzeigers kontinuierlich verändert, wobei die Geschwindigkeit dieser Phasenänderung die momentane Frequenz bestimmt. Mit zwei passend erzeugten I- und Q-Signalen lässt sich außerdem ein Einseitenbandsignal (SSB) erzeugen.
|
||||
|
||||
Mit demselben I/Q-Modulator können daher unter anderem AM, FM, PM, SSB, PSK und QAM erzeugt werden. Lediglich die I- und Q-Signale müssen jeweils anders berechnet werden.
|
||||
|
||||
Der I/Q-Modulator ist damit gewissermaßen das "Schweizer Taschenmesser der Modulatoren". Dies ist zugleich ein wesentlicher Grund für die große Flexibilität moderner SDR-Technik: Das verwendete Modulationsverfahren wird zu einem großen Teil durch Software bestimmt, während die Hochfrequenzhardware weitgehend unverändert bleiben kann.
|
||||
|
||||
+245
-5
@@ -1,12 +1,252 @@
|
||||
* Es scheint zunächst nahe zu liegen, die Anzahl der Symbole möglichst groß zu wählen, damit pro Symbol möglichst viele Informationen übertragen werden können.
|
||||
* Doch dann muss ein Empfänger z.B. zwischen vielen unterschiedlichen Amplituden unterscheiden können. Somit wird das Verfahren anfälliger für Störungen.
|
||||
## Ausgangslage: ASK und PSK
|
||||
|
||||
* Bei ASK und PSK können mehr Symbole verwendet werden, um mehr Bits pro Symbol zu übertragen
|
||||
* Bei sehr vielen Symbolen liegen die möglichen Signalzustände jedoch immer dichter beieinander
|
||||
* Der Empfänger muss dadurch kleinere Unterschiede erkennen können
|
||||
* Das Verfahren wird anfälliger für Störungen
|
||||
|
||||
<note>
|
||||
Es scheint zunächst nahezuliegen, einfach immer mehr Amplituden oder Phasenlagen zu verwenden. Dadurch können zwar mehr Bits pro Symbol übertragen werden, gleichzeitig wird es für den Empfänger aber schwieriger, die einzelnen Symbole sicher voneinander zu unterscheiden.
|
||||
</note>
|
||||
|
||||
---
|
||||
|
||||
## Quadraturamplitudenmodulation (QAM)
|
||||
|
||||
* Trick: Es wird nicht nur *ein* Parameter verändert
|
||||
* QAM kombiniert unterschiedliche
|
||||
* Amplituden und
|
||||
* Phasenlagen
|
||||
* Ein Symbol entspricht einer bestimmten Kombination aus Amplitude und Phase
|
||||
|
||||
<fragment>
|
||||
Bei gleicher Symbolrate können dadurch mehr Bits pro Sekunde übertragen werden.
|
||||
</fragment>
|
||||
|
||||
<note>
|
||||
Anstatt beispielsweise bei ASK sehr viele unterschiedliche Amplituden unterscheiden zu müssen, nutzt QAM zwei Freiheitsgrade gleichzeitig: Amplitude und Phase.
|
||||
|
||||
Dadurch kann bereits mit einer vergleichsweise kleinen Anzahl unterschiedlicher Werte eine größere Zahl verschiedener Symbole erzeugt werden.
|
||||
</note>
|
||||
|
||||
--- style="font-size: 0.7em;"
|
||||
## Beispiel: 8-QAM
|
||||
|
||||
[picture:702:8qam:Signalverlauf eines 8QAM-Signals, je Symbol mit Amplitude ($\num{0,5}$ bzw. $\num{1}$), Phasenlage und 3-stelliger Bitfolge]
|
||||
[picture:702:a_8qam:Signalverlauf eines 8QAM-Signals, je Symbol mit Amplitude ($\num{0,5}$ bzw. $\num{1}$), Phasenlage und 3-stelliger Bitfolge]
|
||||
|
||||
* Trick: Anstelle der Änderung nur eines Parameters (z.B. der Amplitude) werden pro Symbol zwei Parameter verändert, nämlich die Amplitude und die Phase.
|
||||
* Ein Symbol entspricht dann einer Kombination einer bestimmten Amplitude mit einer bestimmten Phasenlage.
|
||||
* $\num{8}$ verschiedene Symbole
|
||||
* Jedes Symbol besitzt eine bestimmte Amplitude und Phasenlage
|
||||
* $\num{8}$ Symbole → $\num{3}$ Bits pro Symbol
|
||||
|
||||
<note>
|
||||
Die Abbildung zeigt ein 8-QAM-Signal im Zeitbereich.
|
||||
|
||||
Jedem Symbol ist durch das Mapping eine dreistellige Bitfolge zugeordnet. Da acht unterschiedliche Symbole existieren, können mit jedem Symbol drei Bits übertragen werden.
|
||||
</note>
|
||||
|
||||
---
|
||||
## Beispiel: 16-QAM
|
||||
|
||||
<left>
|
||||
[picture:1061:a_16qam:I-Q-Diagramm für ein 16-QAM-Mapping]
|
||||
</left>
|
||||
<right>
|
||||
* $\num{16}$ verschiedene Signalpunkte
|
||||
* Jeder Punkt entspricht einem Wertepaar $(I,Q)$
|
||||
* Daraus ergeben sich unterschiedliche Amplituden und Phasenlagen
|
||||
* $\num{16}$ Symbole → $\num{4}$ Bits pro Symbol
|
||||
</right>
|
||||
|
||||
<note>
|
||||
Im Konstellationsdiagramm lässt sich besonders gut erkennen, wie QAM viele unterschiedliche Symbole erzeugt.
|
||||
|
||||
Bei 16-QAM gibt es 16 mögliche Signalpunkte. Jedem Punkt wird eine vierstellige Bitkombination zugeordnet.
|
||||
|
||||
Die Lage eines Punktes wird durch die beiden Werte I und Q beschrieben. Daraus ergeben sich wiederum die Amplitude und die Phasenlage des resultierenden Signals.
|
||||
</note>
|
||||
|
||||
---
|
||||
[question:AE403]
|
||||
|
||||
---
|
||||
## Wie wird ein QAM-Signal erzeugt?
|
||||
|
||||
Nachdem wir das Konstellationsdiagramm kennengelernt haben, stellt sich die Frage:
|
||||
|
||||
<fragment>
|
||||
**Wie erzeugt ein Sender einen gewünschten Signalpunkt?**
|
||||
</fragment>
|
||||
|
||||
<fragment>
|
||||
Dazu kann ein *I/Q-Modulator* verwendet werden.
|
||||
</fragment>
|
||||
|
||||
---
|
||||
## I/Q-Modulator
|
||||
|
||||
<left>
|
||||
[picture:196:a_iq_modulator:Blockschaltbild eines I/Q-Modulators]
|
||||
</left>
|
||||
<right>
|
||||
* Zwei Träger mit gleicher Frequenz
|
||||
* Phasenverschiebung von $\qty{90}{\degree}$
|
||||
* Ein Träger wird mit dem *I-Signal* gewichtet
|
||||
* Der andere Träger wird mit dem *Q-Signal* gewichtet
|
||||
* Anschließend werden beide Signale addiert
|
||||
</right>
|
||||
|
||||
<note>
|
||||
Ein I/Q-Modulator arbeitet mit zwei sinusförmigen Trägern gleicher Frequenz. Die beiden Träger sind um 90 Grad gegeneinander phasenverschoben.
|
||||
|
||||
Der erste wird mit dem I-Wert und der zweite mit dem Q-Wert gewichtet. Anschließend werden beide Signalanteile addiert.
|
||||
|
||||
Je nach Kombination von I und Q entsteht dadurch ein Signal mit einer bestimmten Amplitude und Phasenlage.
|
||||
</note>
|
||||
|
||||
---
|
||||
## I und Q bestimmen Amplitude und Phase
|
||||
|
||||
* Jeder Signalpunkt im Konstellationsdiagramm entspricht einem Wertepaar $(I,Q)$
|
||||
* Durch Änderung von I und Q ändern sich
|
||||
* die Amplitude und
|
||||
* die Phasenlage
|
||||
des resultierenden Signals
|
||||
|
||||
<fragment>
|
||||
Damit kann der I/Q-Modulator jeden gewünschten Punkt des Mappings erzeugen.
|
||||
</fragment>
|
||||
|
||||
<note>
|
||||
Das ist die direkte Verbindung zwischen dem Konstellationsdiagramm und der realen Schaltung:
|
||||
|
||||
Die Koordinaten eines Signalpunktes sind genau die Werte I und Q, mit denen der I/Q-Modulator angesteuert wird.
|
||||
|
||||
Das Konstellationsdiagramm ist damit nicht nur eine Darstellung des Signals. Es beschreibt unmittelbar, welche I- und Q-Werte erzeugt werden müssen.
|
||||
</note>
|
||||
|
||||
--- style="font-size: smaller;"
|
||||
|
||||
## I/Q-Modulation ausprobieren
|
||||
|
||||
[include:applet_iq_169]
|
||||
|
||||
<note>
|
||||
Mit dem Applet kann die Wirkung der beiden Werte I und Q unmittelbar ausprobiert werden.
|
||||
|
||||
Werden I und Q verändert, verschiebt sich der Signalpunkt im Konstellationsdiagramm. Gleichzeitig kann beobachtet werden, wie sich dadurch Amplitude und Phase des resultierenden Signals verändern.
|
||||
|
||||
Damit lässt sich auch nachvollziehen, wie ein I/Q-Modulator die unterschiedlichen Punkte eines QAM-Mappings erzeugen kann.
|
||||
</note>
|
||||
|
||||
---
|
||||
|
||||
[question:AF632]
|
||||
|
||||
---
|
||||
|
||||
[question:AE404]
|
||||
|
||||
---
|
||||
|
||||
## I und Q aus Software
|
||||
|
||||
* Ein Mikrocontroller, Signalprozessor oder SDR berechnet die Werte für I und Q
|
||||
* Für jedes Symbol wird das entsprechende Wertepaar $(I,Q)$ bestimmt
|
||||
|
||||
<fragment>
|
||||
Beispiel 16-QAM:
|
||||
|
||||
* $\num{4}$ mögliche I-Werte
|
||||
* $\num{4}$ mögliche Q-Werte
|
||||
* $\num{4}\cdot\num{4}=\num{16}$ mögliche Signalpunkte
|
||||
</fragment>
|
||||
|
||||
<note>
|
||||
Die I- und Q-Werte müssen nicht durch eine komplizierte analoge Schaltung erzeugt werden.
|
||||
|
||||
In einem digitalen System kann die Software für jedes zu übertragende Symbol einfach die beiden dazugehörigen Zahlenwerte bestimmen.
|
||||
|
||||
Bei einer 16-QAM können beispielsweise jeweils vier unterschiedliche Werte für I und Q verwendet werden. Aus den Kombinationen ergeben sich insgesamt 16 Signalpunkte.
|
||||
</note>
|
||||
|
||||
---
|
||||
|
||||
## Vom Zahlenwert zum I/Q-Signal
|
||||
|
||||
* I und Q liegen zunächst als *digitale Zahlenwerte* vor
|
||||
* DA-Wandler erzeugen daraus analoge I- und Q-Signale
|
||||
* Diese Signale steuern den I/Q-Modulator
|
||||
|
||||
<fragment>
|
||||
Das gewünschte Mapping kann damit zu einem großen Teil in *Software* festgelegt werden.
|
||||
</fragment>
|
||||
|
||||
<note>
|
||||
Die Software erzeugt zunächst digitale Zahlenwerte für I und Q.
|
||||
|
||||
DA-Wandler setzen diese anschließend in analoge Spannungen um, die dem I/Q-Modulator zugeführt werden können.
|
||||
|
||||
Vereinfacht betrachtet muss die Software also nur berechnen, welcher Punkt des Konstellationsdiagramms gerade erzeugt werden soll.
|
||||
</note>
|
||||
|
||||
---
|
||||
|
||||
## Software Defined Radio
|
||||
|
||||
* Bei einem *Software Defined Radio (SDR)* wird ein großer Teil der Signalverarbeitung in Software ausgeführt
|
||||
* Die Software berechnet die benötigten I- und Q-Signale
|
||||
* Die Hochfrequenzhardware kann für viele unterschiedliche Modulationsverfahren gleich bleiben
|
||||
|
||||
<fragment>
|
||||
Das Modulationsverfahren wird damit zu einem großen Teil durch *Software* bestimmt.
|
||||
</fragment>
|
||||
|
||||
---
|
||||
|
||||
## Nicht nur digitale Modulation
|
||||
|
||||
Ein I/Q-Modulator kann auch kontinuierlich veränderliche I- und Q-Signale verarbeiten.
|
||||
|
||||
<fragment>
|
||||
Damit lassen sich beispielsweise erzeugen:
|
||||
|
||||
* AM
|
||||
* FM
|
||||
* PM
|
||||
* SSB
|
||||
* PSK
|
||||
* QAM
|
||||
</fragment>
|
||||
|
||||
<note>
|
||||
Das I/Q-Prinzip ist keineswegs auf QAM oder andere digitale Modulationsverfahren beschränkt.
|
||||
|
||||
Die Software kann anstelle einzelner fester Symbolwerte auch kontinuierlich veränderliche Verläufe für I und Q erzeugen.
|
||||
|
||||
Bei AM wird beispielsweise hauptsächlich der Betrag des Signalzeigers verändert. Bei PM wird sein Winkel verändert.
|
||||
|
||||
Auch FM kann über die Phase erzeugt werden: Die Phase wird kontinuierlich verändert, wobei die Geschwindigkeit der Phasenänderung der momentanen Frequenz entspricht.
|
||||
|
||||
Mit geeigneten I- und Q-Signalen lässt sich außerdem ein Einseitenbandsignal erzeugen.
|
||||
</note>
|
||||
|
||||
---
|
||||
|
||||
## Nicht nur digitale Modulation
|
||||
|
||||
* Derselbe I/Q-Modulator kann viele unterschiedliche Modulationsverfahren erzeugen
|
||||
* Lediglich die Verläufe von *I* und *Q* müssen anders berechnet werden
|
||||
* Die HF-Hardware kann weitgehend unverändert bleiben
|
||||
|
||||
<fragment>
|
||||
Der I/Q-Modulator ist damit gewissermaßen das
|
||||
**„Schweizer Taschenmesser der Modulatoren“**.
|
||||
</fragment>
|
||||
|
||||
<note>
|
||||
Genau diese Eigenschaft macht moderne SDR-Technik so flexibel.
|
||||
|
||||
Anstatt für AM, FM, SSB, PSK oder QAM jeweils eine eigene Modulatorschaltung zu benötigen, kann dieselbe grundlegende I/Q-Hardware verwendet werden.
|
||||
|
||||
Das gewünschte Verfahren entsteht dadurch, dass die Software andere I- und Q-Signale berechnet.
|
||||
</note>
|
||||
|
||||
+1
-1
@@ -713,7 +713,7 @@
|
||||
},
|
||||
{
|
||||
"title": "Digitale Übertragungsverfahren",
|
||||
"abstract": "Dieses Kapitel beleuchtet die Grundlagen und Anwendungen der digitalen Signalverarbeitung, die essenziell für die moderne Informationsverarbeitung ist.",
|
||||
"abstract": "Dieses Kapitel beleuchtet die Grundlagen und Anwendungen der digitalen Übertragungsverfahren, die essenziell für die moderne Kommunikationi im Amateurfunk sind.",
|
||||
"ident": "a_digitale_uebertragungsverfahren",
|
||||
"video_url": null,
|
||||
"sections": [
|
||||
|
||||
+1
-1
@@ -1914,7 +1914,7 @@
|
||||
"video_url": null
|
||||
},
|
||||
{
|
||||
"title": "Quadraturamplitudenmodulation (QAM)",
|
||||
"title": "Quadraturamplitudenmodulation (QAM)",
|
||||
"ident": "qam",
|
||||
"status": "alpha",
|
||||
"class": "A",
|
||||
|
||||
Reference in New Issue
Block a user