Merge pull request #260 from DARC-e-V/refactor/digitaleuebertragung

Refactor/digitaleuebertragung
This commit is contained in:
Matthias Jung
2026-08-19 13:40:02 +02:00
committed by GitHub
37 changed files with 2266 additions and 463 deletions
+50
View File
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="256.896pt" height="261.012pt" viewBox="0 0 256.896 261.012">
<defs>
<g>
<g id="glyph-0-0">
<path d="M 0.53125 1.140625 C 0.453125 1.21875 0.390625 1.28125 0.328125 1.375 L 0.625 1.546875 C 0.765625 1.390625 0.890625 1.25 1.03125 1.125 C 1.171875 1.046875 1.28125 1.015625 1.359375 1.015625 C 2.15625 1.015625 2.53125 1.875 3.640625 1.875 C 4.1875 1.875 4.59375 1.640625 5.015625 1.140625 L 4.890625 1.03125 C 4.671875 1.265625 4.328125 1.359375 4.078125 1.359375 C 3.328125 1.359375 2.78125 0.625 1.828125 0.625 C 1.78125 0.625 1.71875 0.625 1.65625 0.640625 C 2.1875 0.296875 2.65625 0.109375 2.953125 0.03125 C 4.3125 -0.234375 5.34375 -1.375 5.65625 -2.9375 C 5.6875 -3.171875 5.71875 -3.390625 5.71875 -3.609375 C 5.71875 -5 4.765625 -5.875 3.46875 -5.875 C 1.9375 -5.875 0.59375 -4.515625 0.25 -2.765625 C 0.203125 -2.53125 0.171875 -2.3125 0.171875 -2.09375 C 0.171875 -0.84375 0.921875 -0.0625 2.03125 0.078125 C 1.46875 0.34375 0.90625 0.765625 0.53125 1.140625 Z M 3.296875 -5.578125 C 4.265625 -5.578125 4.921875 -4.9375 4.921875 -3.671875 C 4.921875 -3.390625 4.890625 -3.09375 4.828125 -2.765625 C 4.515625 -1.171875 3.578125 -0.21875 2.59375 -0.21875 C 1.71875 -0.21875 0.984375 -0.921875 0.984375 -2.1875 C 0.984375 -2.40625 1.015625 -2.65625 1.078125 -2.921875 C 1.4375 -4.796875 2.515625 -5.578125 3.296875 -5.578125 Z M 3.296875 -5.578125 "/>
</g>
<g id="glyph-0-1">
<path d="M 1.90625 -5.078125 L 1.046875 -0.671875 C 0.984375 -0.421875 0.859375 -0.296875 0.484375 -0.265625 L 0.21875 -0.234375 C 0.171875 -0.203125 0.15625 -0.0625 0.203125 0.015625 C 0.59375 0.015625 0.921875 0 1.265625 0 C 1.609375 0 2.015625 0.015625 2.40625 0.015625 C 2.4375 -0.015625 2.453125 -0.203125 2.4375 -0.234375 L 2.125 -0.265625 C 1.78125 -0.296875 1.6875 -0.40625 1.734375 -0.671875 L 2.59375 -5.078125 C 2.65625 -5.328125 2.78125 -5.453125 3.15625 -5.5 L 3.4375 -5.515625 C 3.46875 -5.5625 3.484375 -5.703125 3.453125 -5.78125 C 3.046875 -5.78125 2.71875 -5.765625 2.375 -5.765625 C 2.03125 -5.765625 1.640625 -5.78125 1.25 -5.78125 C 1.21875 -5.75 1.1875 -5.5625 1.21875 -5.515625 L 1.515625 -5.5 C 1.875 -5.46875 1.96875 -5.359375 1.90625 -5.078125 Z M 1.90625 -5.078125 "/>
</g>
<g id="glyph-0-2">
<path d="M 2.03125 0.09375 C 2.71875 0.09375 3.765625 -0.609375 3.765625 -2.703125 C 3.765625 -3.59375 3.5625 -4.359375 3.15625 -4.875 C 2.9375 -5.1875 2.5625 -5.453125 2.078125 -5.453125 C 1.1875 -5.453125 0.34375 -4.390625 0.34375 -2.625 C 0.34375 -1.671875 0.640625 -0.78125 1.140625 -0.28125 C 1.390625 -0.03125 1.6875 0.09375 2.03125 0.09375 Z M 2.078125 -5.140625 C 2.21875 -5.140625 2.375 -5.078125 2.46875 -4.984375 C 2.75 -4.75 3 -4.078125 3 -2.875 C 3 -2.0625 2.96875 -1.5 2.84375 -1.03125 C 2.640625 -0.296875 2.203125 -0.21875 2.046875 -0.21875 C 1.21875 -0.21875 1.125 -1.75 1.125 -2.53125 C 1.125 -4.734375 1.671875 -5.140625 2.078125 -5.140625 Z M 2.078125 -5.140625 "/>
</g>
<g id="glyph-0-3">
<path d="M 2.578125 -1.09375 L 2.578125 -4.1875 C 2.578125 -4.734375 2.578125 -5.265625 2.59375 -5.390625 C 2.59375 -5.4375 2.578125 -5.4375 2.546875 -5.4375 C 2.0625 -5.125 1.578125 -4.90625 0.796875 -4.546875 C 0.8125 -4.4375 0.84375 -4.359375 0.921875 -4.296875 C 1.34375 -4.46875 1.53125 -4.515625 1.703125 -4.515625 C 1.859375 -4.515625 1.890625 -4.3125 1.890625 -4 L 1.890625 -1.09375 C 1.890625 -0.34375 1.640625 -0.296875 1.015625 -0.28125 C 0.96875 -0.21875 0.96875 -0.03125 1.015625 0.015625 C 1.453125 0.015625 1.78125 0 2.265625 0 C 2.6875 0 2.90625 0.015625 3.359375 0.015625 C 3.40625 -0.03125 3.40625 -0.21875 3.359375 -0.28125 C 2.71875 -0.296875 2.578125 -0.34375 2.578125 -1.09375 Z M 2.578125 -1.09375 "/>
</g>
</g>
<clipPath id="clip-0">
<path clip-rule="nonzero" d="M 0.433594 136 L 124 136 L 124 138 L 0.433594 138 Z M 0.433594 136 "/>
</clipPath>
<clipPath id="clip-1">
<path clip-rule="nonzero" d="M 123 136 L 124 136 L 124 260.027344 L 123 260.027344 Z M 123 136 "/>
</clipPath>
</defs>
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 0.000296406 -0.000345254 L 0.000296406 119.959836 " transform="matrix(0.996229, 0, 0, -0.996229, 123.597361, 136.862937)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 3.173059 -0.000296406 L 0.200913 1.76417 L 0.200913 -1.764763 Z M 3.173059 -0.000296406 " transform="matrix(0, -0.996229, -0.996229, 0, 123.597361, 17.454062)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="120.653504" y="8.85548"/>
</g>
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 0.000296406 -0.000345254 L 119.960478 -0.000345254 " transform="matrix(0.996229, 0, 0, -0.996229, 123.597361, 136.862937)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 3.1737 -0.000345254 L 0.197634 1.764121 L 0.197634 -1.764812 Z M 3.1737 -0.000345254 " transform="matrix(0.996229, 0, 0, -0.996229, 243.006237, 136.862937)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="249.738882" y="139.744032"/>
</g>
<g clip-path="url(#clip-0)">
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 0.000296406 -0.000345254 L -123.433923 -0.000345254 " transform="matrix(0.996229, 0, 0, -0.996229, 123.597361, 136.862937)"/>
</g>
<g clip-path="url(#clip-1)">
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 0.000296406 -0.000345254 L 0.000296406 -123.434565 " transform="matrix(0.996229, 0, 0, -0.996229, 123.597361, 136.862937)"/>
</g>
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-miterlimit="10" d="M 98.747672 -0.000345254 C 98.747672 54.537347 54.537989 98.74703 0.000296406 98.74703 C -54.537396 98.74703 -98.747079 54.537347 -98.747079 -0.000345254 C -98.747079 -54.538038 -54.537396 -98.747721 0.000296406 -98.747721 C 54.537989 -98.747721 98.747672 -54.538038 98.747672 -0.000345254 Z M 98.747672 -0.000345254 " transform="matrix(0.996229, 0, 0, -0.996229, 123.597361, 136.862937)"/>
<path fill-rule="nonzero" fill="rgb(0%, 62.745667%, 86.274719%)" fill-opacity="1" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 102.974549 -0.000345254 C 102.974549 2.332671 101.080689 4.226532 98.747672 4.226532 C 96.410734 4.226532 94.520795 2.332671 94.520795 -0.000345254 C 94.520795 -2.333362 96.410734 -4.227222 98.747672 -4.227222 C 101.080689 -4.227222 102.974549 -2.333362 102.974549 -0.000345254 Z M 102.974549 -0.000345254 " transform="matrix(0.996229, 0, 0, -0.996229, 123.597361, 136.862937)"/>
<path fill-rule="nonzero" fill="rgb(0%, 62.745667%, 86.274719%)" fill-opacity="1" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -94.520202 -0.000345254 C -94.520202 2.332671 -96.410142 4.226532 -98.747079 4.226532 C -101.080096 4.226532 -102.973956 2.332671 -102.973956 -0.000345254 C -102.973956 -2.333362 -101.080096 -4.227222 -98.747079 -4.227222 C -96.410142 -4.227222 -94.520202 -2.333362 -94.520202 -0.000345254 Z M -94.520202 -0.000345254 " transform="matrix(0.996229, 0, 0, -0.996229, 123.597361, 136.862937)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-2" x="228.263173" y="130.481094"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-3" x="14.777274" y="130.551827"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.0 KiB

+15
View File
@@ -0,0 +1,15 @@
% Author: Prof. Dr. Matthias Jung, DL9MJ
% Year: 2026
\begin{tikzpicture}
\draw[-Triangle](0,0) -- ++(0,1.25) node[anchor=south] {$Q$};
\draw[-Triangle](0,0) -- ++(1.25,0) node[anchor=west] {$I$};
\draw(0,0) -- ++(-1.25,0);
\draw(0,0) -- ++(0,-1.25);
\draw[gray](0,0) circle (1);
%
\draw( 0:1) node[anchor=center, circle, draw, fill=DARCblue](m1){};
\draw(180:1) node[anchor=center, circle, draw, fill=DARCblue](m2){};
%
\draw(m1.north east) node[anchor=south west] {$0$};
\draw(m2.north west) node[anchor=south east] {$1$};
\end{tikzpicture}
+41
View File
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="112.212pt" height="28.576pt" viewBox="0 0 112.212 28.576">
<defs>
<g>
<g id="glyph-0-0">
<path d="M 1.234375 0.0625 C 1.765625 0.0625 2.265625 -0.359375 2.265625 -1.578125 C 2.265625 -2.796875 1.765625 -3.234375 1.234375 -3.234375 C 0.703125 -3.234375 0.1875 -2.796875 0.1875 -1.578125 C 0.1875 -0.359375 0.703125 0.0625 1.234375 0.0625 Z M 1.234375 -0.15625 C 0.9375 -0.15625 0.65625 -0.4375 0.65625 -1.578125 C 0.65625 -2.734375 0.9375 -3.015625 1.234375 -3.015625 C 1.53125 -3.015625 1.796875 -2.71875 1.796875 -1.578125 C 1.796875 -0.4375 1.53125 -0.15625 1.234375 -0.15625 Z M 1.234375 -0.15625 "/>
</g>
<g id="glyph-0-1">
<path d="M 0.3125 0 L 1.921875 0 L 1.921875 -0.171875 L 1.328125 -0.28125 C 1.328125 -0.53125 1.328125 -0.78125 1.328125 -1.03125 L 1.328125 -2.46875 L 1.34375 -3.171875 L 1.28125 -3.21875 L 0.3125 -2.96875 L 0.3125 -2.765625 L 0.90625 -2.8125 L 0.90625 -1.03125 C 0.90625 -0.78125 0.90625 -0.53125 0.890625 -0.28125 L 0.3125 -0.171875 Z M 0.3125 0 "/>
</g>
</g>
<clipPath id="clip-0">
<path clip-rule="nonzero" d="M 0.433594 13 L 111.003906 13 L 111.003906 15 L 0.433594 15 Z M 0.433594 13 "/>
</clipPath>
<clipPath id="clip-1">
<path clip-rule="nonzero" d="M 41 0 L 70 0 L 70 28.15625 L 41 28.15625 Z M 41 0 "/>
</clipPath>
<clipPath id="clip-2">
<path clip-rule="nonzero" d="M 36 0 L 75 0 L 75 28.15625 L 36 28.15625 Z M 36 0 "/>
</clipPath>
</defs>
<g clip-path="url(#clip-0)">
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 0.000757882 0.000989047 L 42.017414 0.000989047 M 69.798594 0.000989047 L 111.81525 0.000989047 " transform="matrix(0.985379, 0, 0, -0.985379, 0.628159, 14.0791)"/>
</g>
<g clip-path="url(#clip-1)">
<path fill="none" stroke-width="0.797" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 42.017414 13.891579 L 69.798594 13.891579 L 69.798594 -13.889601 L 42.017414 -13.889601 Z M 42.017414 13.891579 " transform="matrix(0.985379, 0, 0, -0.985379, 0.628159, 14.0791)"/>
</g>
<g clip-path="url(#clip-2)">
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 42.017414 -13.889601 L 69.798594 13.891579 " transform="matrix(0.985379, 0, 0, -0.985379, 0.628159, 14.0791)"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="45.913236" y="7.454394"/>
<use xlink:href="#glyph-0-1" x="48.377298" y="7.454394"/>
</g>
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 62.853299 -3.471658 L 62.853299 -10.416953 " transform="matrix(0.985379, 0, 0, -0.985379, 0.628159, 14.0791)"/>
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 59.380652 -6.944306 L 66.325947 -6.944306 " transform="matrix(0.985379, 0, 0, -0.985379, 0.628159, 14.0791)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 65.300781 22.976562 C 65.300781 22.597656 64.992188 22.289062 64.613281 22.289062 C 64.238281 22.289062 63.929688 22.597656 63.929688 22.976562 C 63.929688 23.351562 64.238281 23.660156 64.613281 23.660156 C 64.992188 23.660156 65.300781 23.351562 65.300781 22.976562 Z M 65.300781 22.976562 "/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 61.191406 22.976562 C 61.191406 22.597656 60.886719 22.289062 60.507812 22.289062 C 60.132812 22.289062 59.824219 22.597656 59.824219 22.976562 C 59.824219 23.351562 60.132812 23.660156 60.507812 23.660156 C 60.886719 23.660156 61.191406 23.351562 61.191406 22.976562 Z M 61.191406 22.976562 "/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 65.300781 18.871094 C 65.300781 18.492188 64.992188 18.183594 64.613281 18.183594 C 64.238281 18.183594 63.929688 18.492188 63.929688 18.871094 C 63.929688 19.246094 64.238281 19.554688 64.613281 19.554688 C 64.992188 19.554688 65.300781 19.246094 65.300781 18.871094 Z M 65.300781 18.871094 "/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 61.191406 18.871094 C 61.191406 18.492188 60.886719 18.183594 60.507812 18.183594 C 60.132812 18.183594 59.824219 18.492188 59.824219 18.871094 C 59.824219 19.246094 60.132812 19.554688 60.507812 19.554688 C 60.886719 19.554688 61.191406 19.246094 61.191406 18.871094 Z M 61.191406 18.871094 "/>
</svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

+5
View File
@@ -0,0 +1,5 @@
% Author: Prof. Dr. Matthias Jung, DL9MJ
% Year: 2026
\begin{tikzpicture}
\draw(0,0) to [mapper] ++(1,0);
\end{tikzpicture}
+46
View File
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="255.119pt" height="245.363pt" viewBox="0 0 255.119 245.363">
<defs>
<g>
<g id="glyph-0-0">
<path d="M 0.53125 1.140625 C 0.453125 1.21875 0.390625 1.28125 0.328125 1.375 L 0.625 1.546875 C 0.765625 1.390625 0.890625 1.25 1.03125 1.125 C 1.171875 1.046875 1.28125 1.015625 1.359375 1.015625 C 2.15625 1.015625 2.53125 1.875 3.640625 1.875 C 4.1875 1.875 4.59375 1.640625 5.015625 1.140625 L 4.890625 1.03125 C 4.671875 1.265625 4.328125 1.359375 4.078125 1.359375 C 3.328125 1.359375 2.78125 0.625 1.828125 0.625 C 1.78125 0.625 1.71875 0.625 1.65625 0.640625 C 2.1875 0.296875 2.65625 0.109375 2.953125 0.03125 C 4.3125 -0.234375 5.34375 -1.375 5.65625 -2.9375 C 5.6875 -3.171875 5.71875 -3.390625 5.71875 -3.609375 C 5.71875 -5 4.765625 -5.875 3.46875 -5.875 C 1.9375 -5.875 0.59375 -4.515625 0.25 -2.765625 C 0.203125 -2.53125 0.171875 -2.3125 0.171875 -2.09375 C 0.171875 -0.84375 0.921875 -0.0625 2.03125 0.078125 C 1.46875 0.34375 0.90625 0.765625 0.53125 1.140625 Z M 3.296875 -5.578125 C 4.265625 -5.578125 4.921875 -4.9375 4.921875 -3.671875 C 4.921875 -3.390625 4.890625 -3.09375 4.828125 -2.765625 C 4.515625 -1.171875 3.578125 -0.21875 2.59375 -0.21875 C 1.71875 -0.21875 0.984375 -0.921875 0.984375 -2.1875 C 0.984375 -2.40625 1.015625 -2.65625 1.078125 -2.921875 C 1.4375 -4.796875 2.515625 -5.578125 3.296875 -5.578125 Z M 3.296875 -5.578125 "/>
</g>
<g id="glyph-0-1">
<path d="M 1.90625 -5.078125 L 1.046875 -0.671875 C 0.984375 -0.421875 0.859375 -0.296875 0.484375 -0.265625 L 0.21875 -0.234375 C 0.171875 -0.203125 0.15625 -0.0625 0.203125 0.015625 C 0.59375 0.015625 0.921875 0 1.265625 0 C 1.609375 0 2.015625 0.015625 2.40625 0.015625 C 2.4375 -0.015625 2.453125 -0.203125 2.4375 -0.234375 L 2.125 -0.265625 C 1.78125 -0.296875 1.6875 -0.40625 1.734375 -0.671875 L 2.59375 -5.078125 C 2.65625 -5.328125 2.78125 -5.453125 3.15625 -5.5 L 3.4375 -5.515625 C 3.46875 -5.5625 3.484375 -5.703125 3.453125 -5.78125 C 3.046875 -5.78125 2.71875 -5.765625 2.375 -5.765625 C 2.03125 -5.765625 1.640625 -5.78125 1.25 -5.78125 C 1.21875 -5.75 1.1875 -5.5625 1.21875 -5.515625 L 1.515625 -5.5 C 1.875 -5.46875 1.96875 -5.359375 1.90625 -5.078125 Z M 1.90625 -5.078125 "/>
</g>
<g id="glyph-0-2">
<path d="M 2.03125 0.09375 C 2.71875 0.09375 3.765625 -0.609375 3.765625 -2.703125 C 3.765625 -3.59375 3.5625 -4.359375 3.15625 -4.875 C 2.9375 -5.1875 2.5625 -5.453125 2.078125 -5.453125 C 1.1875 -5.453125 0.34375 -4.390625 0.34375 -2.625 C 0.34375 -1.671875 0.640625 -0.78125 1.140625 -0.28125 C 1.390625 -0.03125 1.6875 0.09375 2.03125 0.09375 Z M 2.078125 -5.140625 C 2.21875 -5.140625 2.375 -5.078125 2.46875 -4.984375 C 2.75 -4.75 3 -4.078125 3 -2.875 C 3 -2.0625 2.96875 -1.5 2.84375 -1.03125 C 2.640625 -0.296875 2.203125 -0.21875 2.046875 -0.21875 C 1.21875 -0.21875 1.125 -1.75 1.125 -2.53125 C 1.125 -4.734375 1.671875 -5.140625 2.078125 -5.140625 Z M 2.078125 -5.140625 "/>
</g>
<g id="glyph-0-3">
<path d="M 2.578125 -1.09375 L 2.578125 -4.1875 C 2.578125 -4.734375 2.578125 -5.265625 2.59375 -5.390625 C 2.59375 -5.4375 2.578125 -5.4375 2.546875 -5.4375 C 2.0625 -5.125 1.578125 -4.90625 0.796875 -4.546875 C 0.8125 -4.4375 0.84375 -4.359375 0.921875 -4.296875 C 1.34375 -4.46875 1.53125 -4.515625 1.703125 -4.515625 C 1.859375 -4.515625 1.890625 -4.3125 1.890625 -4 L 1.890625 -1.09375 C 1.890625 -0.34375 1.640625 -0.296875 1.015625 -0.28125 C 0.96875 -0.21875 0.96875 -0.03125 1.015625 0.015625 C 1.453125 0.015625 1.78125 0 2.265625 0 C 2.6875 0 2.90625 0.015625 3.359375 0.015625 C 3.40625 -0.03125 3.40625 -0.21875 3.359375 -0.28125 C 2.71875 -0.296875 2.578125 -0.34375 2.578125 -1.09375 Z M 2.578125 -1.09375 "/>
</g>
</g>
<clipPath id="clip-0">
<path clip-rule="nonzero" d="M 115 129 L 116 129 L 116 244.625 L 115 244.625 Z M 115 129 "/>
</clipPath>
</defs>
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -0.0012187 0.00109472 L -0.0012187 112.137 " transform="matrix(0.996559, 0, 0, -0.996559, 115.407465, 129.215935)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 3.173826 0.0012187 L 0.198743 1.765101 L 0.198743 -1.762664 Z M 3.173826 0.0012187 " transform="matrix(0, -0.996559, -0.996559, 0, 115.407465, 17.565247)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="112.46363" y="8.963202"/>
</g>
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -0.0012187 0.00109472 L 126.006644 0.00109472 " transform="matrix(0.996559, 0, 0, -0.996559, 115.407465, 129.215935)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 3.17495 0.00109472 L 0.199868 1.764977 L 0.199868 -1.762788 Z M 3.17495 0.00109472 " transform="matrix(0.996559, 0, 0, -0.996559, 240.882852, 129.215935)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="247.617903" y="132.097982"/>
</g>
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -0.0012187 0.00109472 L -115.610013 0.00109472 " transform="matrix(0.996559, 0, 0, -0.996559, 115.407465, 129.215935)"/>
<g clip-path="url(#clip-0)">
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -0.0012187 0.00109472 L -0.0012187 -115.6077 " transform="matrix(0.996559, 0, 0, -0.996559, 115.407465, 129.215935)"/>
</g>
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-miterlimit="10" d="M 46.243867 0.00109472 C 46.243867 25.538197 25.539803 46.242261 -0.0012187 46.242261 C -25.538321 46.242261 -46.242385 25.538197 -46.242385 0.00109472 C -46.242385 -25.539927 -25.538321 -46.243991 -0.0012187 -46.243991 C 25.539803 -46.243991 46.243867 -25.539927 46.243867 0.00109472 Z M 46.243867 0.00109472 " transform="matrix(0.996559, 0, 0, -0.996559, 115.407465, 129.215935)"/>
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-miterlimit="10" d="M 92.485033 0.00109472 C 92.485033 51.079219 51.080825 92.487346 -0.0012187 92.487346 C -51.079343 92.487346 -92.48747 51.079219 -92.48747 0.00109472 C -92.48747 -51.080949 -51.079343 -92.485157 -0.0012187 -92.485157 C 51.080825 -92.485157 92.485033 -51.080949 92.485033 0.00109472 Z M 92.485033 0.00109472 " transform="matrix(0.996559, 0, 0, -0.996559, 115.407465, 129.215935)"/>
<path fill-rule="nonzero" fill="rgb(0%, 62.745667%, 86.274719%)" fill-opacity="1" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 50.469346 0.00109472 C 50.469346 2.33334 48.576112 4.226574 46.243867 4.226574 C 43.907702 4.226574 42.018388 2.33334 42.018388 0.00109472 C 42.018388 -2.33507 43.907702 -4.228304 46.243867 -4.228304 C 48.576112 -4.228304 50.469346 -2.33507 50.469346 0.00109472 Z M 50.469346 0.00109472 " transform="matrix(0.996559, 0, 0, -0.996559, 115.407465, 129.215935)"/>
<path fill-rule="nonzero" fill="rgb(0%, 62.745667%, 86.274719%)" fill-opacity="1" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 96.714432 0.00109472 C 96.714432 2.33334 94.821198 4.226574 92.485033 4.226574 C 90.152788 4.226574 88.259554 2.33334 88.259554 0.00109472 C 88.259554 -2.33507 90.152788 -4.228304 92.485033 -4.228304 C 94.821198 -4.228304 96.714432 -2.33507 96.714432 0.00109472 Z M 96.714432 0.00109472 " transform="matrix(0.996559, 0, 0, -0.996559, 115.407465, 129.215935)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-2" x="159.413499" y="142.253911"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-3" x="205.497358" y="142.235973"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.3 KiB

+21
View File
@@ -0,0 +1,21 @@
% Author: Prof. Dr. Matthias Jung, DL9MJ
% Year: 2026
\begin{tikzpicture}
% Achsen
\draw[-Triangle](0,0) -- ++(0,1.25) node[anchor=south] {$Q$};
\draw[-Triangle](0,0) -- ++(1.4,0) node[anchor=west] {$I$};
\draw(0,0) -- ++(-1.25,0);
\draw(0,0) -- ++(0,-1.25);
% Amplituden
\draw[gray](0,0) circle (0.5);
\draw[gray](0,0) circle (1.0);
% Symbolpunkte
\draw(0.5,0) node[anchor=center, circle, draw, fill=DARCblue](m0){};
\draw(1.0,0) node[anchor=center, circle, draw, fill=DARCblue](m1){};
% Bit-Zuordnung
\draw(m0.south) node[anchor=north] {$0$};
\draw(m1.south) node[anchor=north] {$1$};
\end{tikzpicture}
+60
View File
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="255.118pt" height="236.953pt" viewBox="0 0 255.118 236.953">
<defs>
<g>
<g id="glyph-0-0">
<path d="M 0.53125 1.140625 C 0.453125 1.21875 0.390625 1.28125 0.328125 1.375 L 0.625 1.546875 C 0.765625 1.390625 0.890625 1.25 1.03125 1.125 C 1.171875 1.046875 1.28125 1.015625 1.359375 1.015625 C 2.15625 1.015625 2.53125 1.875 3.640625 1.875 C 4.1875 1.875 4.59375 1.640625 5.015625 1.140625 L 4.890625 1.03125 C 4.671875 1.265625 4.328125 1.359375 4.078125 1.359375 C 3.328125 1.359375 2.78125 0.625 1.828125 0.625 C 1.78125 0.625 1.71875 0.625 1.65625 0.640625 C 2.1875 0.296875 2.65625 0.109375 2.953125 0.03125 C 4.3125 -0.234375 5.34375 -1.375 5.65625 -2.9375 C 5.6875 -3.171875 5.71875 -3.390625 5.71875 -3.609375 C 5.71875 -5 4.765625 -5.875 3.46875 -5.875 C 1.9375 -5.875 0.59375 -4.515625 0.25 -2.765625 C 0.203125 -2.53125 0.171875 -2.3125 0.171875 -2.09375 C 0.171875 -0.84375 0.921875 -0.0625 2.03125 0.078125 C 1.46875 0.34375 0.90625 0.765625 0.53125 1.140625 Z M 3.296875 -5.578125 C 4.265625 -5.578125 4.921875 -4.9375 4.921875 -3.671875 C 4.921875 -3.390625 4.890625 -3.09375 4.828125 -2.765625 C 4.515625 -1.171875 3.578125 -0.21875 2.59375 -0.21875 C 1.71875 -0.21875 0.984375 -0.921875 0.984375 -2.1875 C 0.984375 -2.40625 1.015625 -2.65625 1.078125 -2.921875 C 1.4375 -4.796875 2.515625 -5.578125 3.296875 -5.578125 Z M 3.296875 -5.578125 "/>
</g>
<g id="glyph-0-1">
<path d="M 1.90625 -5.078125 L 1.046875 -0.671875 C 0.984375 -0.421875 0.859375 -0.296875 0.484375 -0.265625 L 0.21875 -0.234375 C 0.171875 -0.203125 0.15625 -0.0625 0.203125 0.015625 C 0.59375 0.015625 0.921875 0 1.265625 0 C 1.609375 0 2.015625 0.015625 2.40625 0.015625 C 2.4375 -0.015625 2.453125 -0.203125 2.4375 -0.234375 L 2.125 -0.265625 C 1.78125 -0.296875 1.6875 -0.40625 1.734375 -0.671875 L 2.59375 -5.078125 C 2.65625 -5.328125 2.78125 -5.453125 3.15625 -5.5 L 3.4375 -5.515625 C 3.46875 -5.5625 3.484375 -5.703125 3.453125 -5.78125 C 3.046875 -5.78125 2.71875 -5.765625 2.375 -5.765625 C 2.03125 -5.765625 1.640625 -5.78125 1.25 -5.78125 C 1.21875 -5.75 1.1875 -5.5625 1.21875 -5.515625 L 1.515625 -5.5 C 1.875 -5.46875 1.96875 -5.359375 1.90625 -5.078125 Z M 1.90625 -5.078125 "/>
</g>
<g id="glyph-0-2">
<path d="M 2.03125 0.09375 C 2.71875 0.09375 3.765625 -0.609375 3.765625 -2.703125 C 3.765625 -3.59375 3.5625 -4.359375 3.15625 -4.875 C 2.9375 -5.1875 2.5625 -5.453125 2.078125 -5.453125 C 1.1875 -5.453125 0.34375 -4.390625 0.34375 -2.625 C 0.34375 -1.671875 0.640625 -0.78125 1.140625 -0.28125 C 1.390625 -0.03125 1.6875 0.09375 2.03125 0.09375 Z M 2.078125 -5.140625 C 2.21875 -5.140625 2.375 -5.078125 2.46875 -4.984375 C 2.75 -4.75 3 -4.078125 3 -2.875 C 3 -2.0625 2.96875 -1.5 2.84375 -1.03125 C 2.640625 -0.296875 2.203125 -0.21875 2.046875 -0.21875 C 1.21875 -0.21875 1.125 -1.75 1.125 -2.53125 C 1.125 -4.734375 1.671875 -5.140625 2.078125 -5.140625 Z M 2.078125 -5.140625 "/>
</g>
<g id="glyph-0-3">
<path d="M 2.578125 -1.09375 L 2.578125 -4.1875 C 2.578125 -4.734375 2.578125 -5.265625 2.59375 -5.390625 C 2.59375 -5.4375 2.578125 -5.4375 2.546875 -5.4375 C 2.0625 -5.125 1.578125 -4.90625 0.796875 -4.546875 C 0.8125 -4.4375 0.84375 -4.359375 0.921875 -4.296875 C 1.34375 -4.46875 1.53125 -4.515625 1.703125 -4.515625 C 1.859375 -4.515625 1.890625 -4.3125 1.890625 -4 L 1.890625 -1.09375 C 1.890625 -0.34375 1.640625 -0.296875 1.015625 -0.28125 C 0.96875 -0.21875 0.96875 -0.03125 1.015625 0.015625 C 1.453125 0.015625 1.78125 0 2.265625 0 C 2.6875 0 2.90625 0.015625 3.359375 0.015625 C 3.40625 -0.03125 3.40625 -0.21875 3.359375 -0.28125 C 2.71875 -0.296875 2.578125 -0.34375 2.578125 -1.09375 Z M 2.578125 -1.09375 "/>
</g>
</g>
<clipPath id="clip-0">
<path clip-rule="nonzero" d="M 111 125 L 112 125 L 112 236.519531 L 111 236.519531 Z M 111 125 "/>
</clipPath>
</defs>
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -0.00166165 0.000205928 L -0.00166165 107.930654 " transform="matrix(0.996555, 0, 0, -0.996555, 111.2165, 125.304893)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 3.172292 0.00166165 L 0.201117 1.761632 L 0.201117 -1.762228 Z M 3.172292 0.00166165 " transform="matrix(0, -0.996555, -0.996555, 0, 111.2165, 17.844956)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="108.272677" y="9.242148"/>
</g>
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -0.00166165 0.000205928 L 130.212592 0.000205928 " transform="matrix(0.996555, 0, 0, -0.996555, 111.2165, 125.304893)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 3.17354 0.000205928 L 0.198446 1.764096 L 0.198446 -1.763684 Z M 3.17354 0.000205928 " transform="matrix(0.996555, 0, 0, -0.996555, 240.880363, 125.304893)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="247.61494" y="128.185932"/>
</g>
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -0.00166165 0.000205928 L -111.405012 0.000205928 " transform="matrix(0.996555, 0, 0, -0.996555, 111.2165, 125.304893)"/>
<g clip-path="url(#clip-0)">
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -0.00166165 0.000205928 L -0.00166165 -111.403145 " transform="matrix(0.996555, 0, 0, -0.996555, 111.2165, 125.304893)"/>
</g>
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-miterlimit="10" d="M 22.282144 0.000205928 C 22.282144 12.304316 12.306368 22.280092 -0.00166165 22.280092 C -12.305772 22.280092 -22.281548 12.304316 -22.281548 0.000205928 C -22.281548 -12.303904 -12.305772 -22.27968 -0.00166165 -22.27968 C 12.306368 -22.27968 22.282144 -12.303904 22.282144 0.000205928 Z M 22.282144 0.000205928 " transform="matrix(0.996555, 0, 0, -0.996555, 111.2165, 125.304893)"/>
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-miterlimit="10" d="M 44.56203 0.000205928 C 44.56203 24.612346 24.610479 44.559978 -0.00166165 44.559978 C -24.609882 44.559978 -44.561434 24.612346 -44.561434 0.000205928 C -44.561434 -24.611934 -24.609882 -44.559566 -0.00166165 -44.559566 C 24.610479 -44.559566 44.56203 -24.611934 44.56203 0.000205928 Z M 44.56203 0.000205928 " transform="matrix(0.996555, 0, 0, -0.996555, 111.2165, 125.304893)"/>
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-miterlimit="10" d="M 66.841917 0.000205928 C 66.841917 36.916456 36.914589 66.843784 -0.00166165 66.843784 C -36.917912 66.843784 -66.84132 36.916456 -66.84132 0.000205928 C -66.84132 -36.916045 -36.917912 -66.843372 -0.00166165 -66.843372 C 36.914589 -66.843372 66.841917 -36.916045 66.841917 0.000205928 Z M 66.841917 0.000205928 " transform="matrix(0.996555, 0, 0, -0.996555, 111.2165, 125.304893)"/>
<path fill="none" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-miterlimit="10" d="M 89.121803 0.000205928 C 89.121803 49.220567 49.222619 89.12367 -0.00166165 89.12367 C -49.222022 89.12367 -89.121206 49.220567 -89.121206 0.000205928 C -89.121206 -49.220155 -49.222022 -89.123259 -0.00166165 -89.123259 C 49.222619 -89.123259 89.121803 -49.220155 89.121803 0.000205928 Z M 89.121803 0.000205928 " transform="matrix(0.996555, 0, 0, -0.996555, 111.2165, 125.304893)"/>
<path fill-rule="nonzero" fill="rgb(0%, 62.745667%, 86.274719%)" fill-opacity="1" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 26.50764 0.000205928 C 26.50764 2.33246 24.614398 4.225702 22.282144 4.225702 C 19.94597 4.225702 18.052729 2.33246 18.052729 0.000205928 C 18.052729 -2.335968 19.94597 -4.22529 22.282144 -4.22529 C 24.614398 -4.22529 26.50764 -2.335968 26.50764 0.000205928 Z M 26.50764 0.000205928 " transform="matrix(0.996555, 0, 0, -0.996555, 111.2165, 125.304893)"/>
<path fill-rule="nonzero" fill="rgb(0%, 62.745667%, 86.274719%)" fill-opacity="1" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 48.787526 0.000205928 C 48.787526 2.33246 46.894285 4.225702 44.56203 4.225702 C 42.225857 4.225702 40.336535 2.33246 40.336535 0.000205928 C 40.336535 -2.335968 42.225857 -4.22529 44.56203 -4.22529 C 46.894285 -4.22529 48.787526 -2.335968 48.787526 0.000205928 Z M 48.787526 0.000205928 " transform="matrix(0.996555, 0, 0, -0.996555, 111.2165, 125.304893)"/>
<path fill-rule="nonzero" fill="rgb(0%, 62.745667%, 86.274719%)" fill-opacity="1" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 71.067412 0.000205928 C 71.067412 2.33246 69.17809 4.225702 66.841917 4.225702 C 64.509663 4.225702 62.616421 2.33246 62.616421 0.000205928 C 62.616421 -2.335968 64.509663 -4.22529 66.841917 -4.22529 C 69.17809 -4.22529 71.067412 -2.335968 71.067412 0.000205928 Z M 71.067412 0.000205928 " transform="matrix(0.996555, 0, 0, -0.996555, 111.2165, 125.304893)"/>
<path fill-rule="nonzero" fill="rgb(0%, 62.745667%, 86.274719%)" fill-opacity="1" stroke-width="0.3985" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 93.351218 0.000205928 C 93.351218 2.33246 91.457977 4.225702 89.121803 4.225702 C 86.789549 4.225702 84.896307 2.33246 84.896307 0.000205928 C 84.896307 -2.335968 86.789549 -4.22529 89.121803 -4.22529 C 91.457977 -4.22529 93.351218 -2.335968 93.351218 0.000205928 Z M 93.351218 0.000205928 " transform="matrix(0.996555, 0, 0, -0.996555, 111.2165, 125.304893)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-2" x="129.265102" y="138.342818"/>
<use xlink:href="#glyph-0-2" x="133.420104" y="138.342818"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-2" x="151.469337" y="138.342818"/>
<use xlink:href="#glyph-0-3" x="155.624339" y="138.342818"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-3" x="173.672575" y="138.342818"/>
<use xlink:href="#glyph-0-2" x="177.827577" y="138.342818"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-3" x="195.875813" y="138.32488"/>
<use xlink:href="#glyph-0-3" x="200.030815" y="138.32488"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

+27
View File
@@ -0,0 +1,27 @@
% Author: Prof. Dr. Matthias Jung, DL9MJ
% Year: 2026
\begin{tikzpicture}
% Achsen
\draw[-Triangle](0,0) -- ++(0,1.25) node[anchor=south] {$Q$};
\draw[-Triangle](0,0) -- ++(1.5,0) node[anchor=west] {$I$};
\draw(0,0) -- ++(-1.25,0);
\draw(0,0) -- ++(0,-1.25);
% Hilfskreise für die vier Amplituden
\draw[gray](0,0) circle (0.25);
\draw[gray](0,0) circle (0.50);
\draw[gray](0,0) circle (0.75);
\draw[gray](0,0) circle (1.00);
% Symbolpunkte
\draw(0.25,0) node[anchor=center, circle, draw, fill=DARCblue](m0){};
\draw(0.50,0) node[anchor=center, circle, draw, fill=DARCblue](m1){};
\draw(0.75,0) node[anchor=center, circle, draw, fill=DARCblue](m2){};
\draw(1.00,0) node[anchor=center, circle, draw, fill=DARCblue](m3){};
% Bit-Zuordnung
\draw(m0.south) node[anchor=north] {$00$};
\draw(m1.south) node[anchor=north] {$01$};
\draw(m2.south) node[anchor=north] {$10$};
\draw(m3.south) node[anchor=north] {$11$};
\end{tikzpicture}
+1 -6
View File
@@ -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>
+302
View File
@@ -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>&phi;</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>
+339
View File
@@ -0,0 +1,339 @@
<style>
.iq-pointer-applet {
--iq-i-color: #168aad;
--iq-q-color: #2a9d6f;
--iq-vector-color: #d85a30;
margin: 1rem 0;
max-width: 100%;
min-width: 0;
box-sizing: border-box;
}
.iq-pointer-applet .iq-pointer-controls {
display: grid;
grid-template-columns: minmax(8rem, auto) minmax(10rem, 1fr) 4.5rem;
gap: .65rem .8rem;
align-items: center;
margin-bottom: 1rem;
}
.iq-pointer-applet .iq-pointer-controls label {
margin: 0;
font-weight: 600;
}
.iq-pointer-applet .iq-pointer-controls output {
text-align: right;
font-variant-numeric: tabular-nums;
}
.iq-pointer-applet input[type="range"] { width: 100%; }
.iq-pointer-applet .iq-pointer-toggle {
grid-column: 1 / -1;
justify-self: start;
min-width: 14rem;
}
.iq-pointer-applet figure { margin: 0; }
.iq-pointer-applet figcaption {
margin-bottom: .4rem;
font-size: .9rem;
font-weight: 600;
}
.iq-pointer-applet canvas {
display: block;
width: 100%;
aspect-ratio: 1.32 / 1;
border: 1px solid var(--bs-border-color, #d8dde2);
border-radius: .35rem;
background: var(--bs-body-bg, #fff);
}
.iq-pointer-applet .iq-pointer-values {
display: flex;
flex-wrap: wrap;
gap: .4rem 1.25rem;
margin-top: .9rem;
padding: .65rem .8rem;
border-radius: .35rem;
background: var(--bs-secondary-bg, #f3f5f7);
font-variant-numeric: tabular-nums;
}
.iq-pointer-applet .iq-pointer-note {
margin: .8rem 0 0;
font-size: .9rem;
}
@media (min-width: 800px) {
.course .iq-pointer-applet {
width: 59.3%;
}
}
@media (max-width: 650px) {
.iq-pointer-applet .iq-pointer-controls {
grid-template-columns: 1fr 4rem;
}
.iq-pointer-applet .iq-pointer-controls label,
.iq-pointer-applet .iq-pointer-toggle { grid-column: 1 / -1; }
.iq-pointer-applet canvas { aspect-ratio: 1 / 1.08; }
}
</style>
<section class="iq-pointer-applet" aria-label="Zeiger mit Sinus- und Cosinusprojektion">
<div class="iq-pointer-controls">
<label>Amplitude <var>A</var></label>
<input data-iq-amplitude type="range" min="0" max="1" step="0.01" value="0.75"
aria-label="Amplitude A">
<output data-iq-amplitude-output>0,75</output>
<label>Phase <var>&phi;</var></label>
<input data-iq-phase type="range" min="-180" max="180" step="1" value="0"
aria-label="Phase Phi">
<output data-iq-phase-output>0&deg;</output>
<button data-iq-toggle type="button" class="btn btn-outline-primary btn-sm iq-pointer-toggle"
aria-pressed="false">Zeiger drehen lassen</button>
</div>
<figure>
<figcaption data-iq-caption>Anfangszustand des Symbols bei <var>t</var> = 0</figcaption>
<canvas data-iq-diagram aria-label="Zeiger sowie daraus entstehende Sinus- und Cosinusschwingung"></canvas>
</figure>
<div class="iq-pointer-values" aria-live="polite">
<span><var>I</var> = <strong data-iq-i-value>0,75</strong></span>
<span><var>Q</var> = <strong data-iq-q-value>0,00</strong></span>
<span><var>A</var> = <strong data-iq-a-value>0,75</strong></span>
<span><var>&phi;</var> = <strong data-iq-phi-value>0&deg;</strong></span>
</div>
<p class="iq-pointer-note" data-iq-note>
Bei <var>t</var> = 0 ist die waagerechte Projektion der I-Anteil und die senkrechte Projektion der Q-Anteil.
</p>
<script>
(function () {
const applet = document.currentScript.closest('.iq-pointer-applet');
const amplitudeInput = applet.querySelector('[data-iq-amplitude]');
const phaseInput = applet.querySelector('[data-iq-phase]');
const toggleButton = applet.querySelector('[data-iq-toggle]');
const caption = applet.querySelector('[data-iq-caption]');
const note = applet.querySelector('[data-iq-note]');
const canvas = applet.querySelector('[data-iq-diagram]');
let running = false;
let timePhase = 0;
let previousTime = performance.now();
function color(name, fallback) {
return getComputedStyle(applet).getPropertyValue(name).trim() || fallback;
}
function formatNumber(value) {
const normalized = Math.abs(value) < .005 ? 0 : value;
return normalized.toLocaleString('de-DE', {
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
}
function setupCanvas() {
const rect = canvas.getBoundingClientRect();
const dpr = window.devicePixelRatio || 1;
const pixelWidth = Math.round(rect.width * dpr);
const pixelHeight = 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, 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 arrow(ctx, x0, y0, x1, y1, strokeColor, width) {
const angle = Math.atan2(y1 - y0, x1 - x0);
const head = 9;
ctx.strokeStyle = strokeColor;
ctx.fillStyle = strokeColor;
ctx.lineWidth = width;
ctx.lineCap = 'round';
line(ctx, x0, y0, x1, y1);
ctx.beginPath();
ctx.moveTo(x1, y1);
ctx.lineTo(x1 - head * Math.cos(angle - Math.PI / 6), y1 - head * Math.sin(angle - Math.PI / 6));
ctx.lineTo(x1 - head * Math.cos(angle + Math.PI / 6), y1 - head * Math.sin(angle + Math.PI / 6));
ctx.closePath();
ctx.fill();
}
function draw(amplitude, phase) {
const { ctx, width, height } = setupCanvas();
const compact = width < 540;
const cx = width * (compact ? .27 : .275);
const cy = height * (compact ? .245 : .29);
const radius = Math.min(width * .19, height * (compact ? .145 : .205));
const rightStart = cx + radius + (compact ? 16 : 28);
const rightEnd = width - 18;
const bottomStart = cy + radius + (compact ? 25 : 32);
const bottomEnd = height - 24;
const angle = phase + timePhase;
const tipX = cx + radius * amplitude * Math.cos(angle);
const tipY = cy - radius * amplitude * Math.sin(angle);
const progress = (((timePhase % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI)) / (2 * Math.PI);
const sineCursorX = rightStart + (rightEnd - rightStart) * progress;
const cosineCursorY = bottomStart + (bottomEnd - bottomStart) * progress;
const textColor = getComputedStyle(applet).color || '#263238';
const gridColor = 'rgba(120,130,140,.38)';
const axisColor = 'rgba(80,90,100,.75)';
const iColor = color('--iq-i-color', '#168aad');
const qColor = color('--iq-q-color', '#2a9d6f');
const vectorColor = color('--iq-vector-color', '#d85a30');
ctx.clearRect(0, 0, width, height);
ctx.font = (compact ? '11px' : '13px') + ' system-ui, sans-serif';
ctx.fillStyle = textColor;
// I/Q-Ebene und Kreisbahn
ctx.strokeStyle = gridColor;
ctx.lineWidth = 1;
ctx.beginPath();
ctx.arc(cx, cy, radius, 0, 2 * Math.PI);
ctx.stroke();
ctx.strokeStyle = axisColor;
arrow(ctx, cx - radius - 10, cy, cx + radius + 14, cy, axisColor, 1);
arrow(ctx, cx, cy + radius + 10, cx, cy - radius - 14, axisColor, 1);
ctx.fillText('I', cx + radius + 16, cy - 7);
ctx.fillText('Q', cx + 7, cy - radius - 13);
// Phasenwinkel nur beim Anfangszustand
if (!running && Math.abs(phase) > .02) {
const angleRadius = radius * .27;
ctx.strokeStyle = vectorColor;
ctx.lineWidth = 1.5;
ctx.beginPath();
ctx.arc(cx, cy, angleRadius, 0, -phase, phase > 0);
ctx.stroke();
ctx.fillStyle = vectorColor;
ctx.font = 'italic ' + (compact ? '12px' : '14px') + ' system-ui, sans-serif';
ctx.fillText('φ', cx + angleRadius * 1.35 * Math.cos(phase / 2), cy - angleRadius * 1.35 * Math.sin(phase / 2));
}
// Rotierender Zeiger
if (amplitude > 0) arrow(ctx, cx, cy, tipX, tipY, vectorColor, 3);
ctx.fillStyle = vectorColor;
ctx.beginPath(); ctx.arc(tipX, tipY, 4.5, 0, 2 * Math.PI); ctx.fill();
// Sinusschwingung rechts: senkrechte Projektion
ctx.strokeStyle = axisColor;
arrow(ctx, rightStart, cy, rightEnd, cy, axisColor, 1);
line(ctx, rightStart, cy + radius + 8, rightStart, cy - radius - 8);
ctx.fillStyle = qColor;
ctx.font = '600 ' + (compact ? '10px' : '12px') + ' system-ui, sans-serif';
ctx.fillText('Q: Sinus', rightStart, cy - radius - 13);
ctx.strokeStyle = qColor;
ctx.lineWidth = 2.5;
ctx.beginPath();
for (let p = 0; p <= Math.ceil(rightEnd - rightStart); p++) {
const theta = 2 * Math.PI * p / (rightEnd - rightStart);
const x = rightStart + p;
const y = cy - radius * amplitude * Math.sin(phase + theta);
p === 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);
}
ctx.stroke();
// Cosinusschwingung nach unten: waagerechte Projektion
ctx.strokeStyle = axisColor;
arrow(ctx, cx, bottomStart, cx, bottomEnd, axisColor, 1);
line(ctx, cx - radius - 8, bottomStart, cx + radius + 8, bottomStart);
ctx.fillStyle = iColor;
ctx.font = '600 ' + (compact ? '10px' : '12px') + ' system-ui, sans-serif';
ctx.fillText('I: Cosinus', cx + radius + 13, bottomStart + 4);
ctx.strokeStyle = iColor;
ctx.lineWidth = 2.5;
ctx.beginPath();
for (let p = 0; p <= Math.ceil(bottomEnd - bottomStart); p++) {
const theta = 2 * Math.PI * p / (bottomEnd - bottomStart);
const x = cx + radius * amplitude * Math.cos(phase + theta);
const y = bottomStart + p;
p === 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);
}
ctx.stroke();
// Projektionen des aktuellen Augenblickswerts
ctx.setLineDash([5, 4]);
ctx.lineWidth = 1.5;
ctx.strokeStyle = qColor;
line(ctx, tipX, tipY, sineCursorX, tipY);
ctx.strokeStyle = iColor;
line(ctx, tipX, tipY, tipX, cosineCursorY);
ctx.setLineDash([]);
ctx.fillStyle = qColor;
ctx.beginPath(); ctx.arc(sineCursorX, tipY, 4, 0, 2 * Math.PI); ctx.fill();
ctx.fillStyle = iColor;
ctx.beginPath(); ctx.arc(tipX, cosineCursorY, 4, 0, 2 * Math.PI); ctx.fill();
}
function update() {
const amplitude = Number(amplitudeInput.value);
const phaseDegrees = Number(phaseInput.value);
const phase = phaseDegrees * Math.PI / 180;
const i = amplitude * Math.cos(phase);
const q = amplitude * Math.sin(phase);
draw(amplitude, phase);
applet.querySelector('[data-iq-amplitude-output]').textContent = formatNumber(amplitude);
applet.querySelector('[data-iq-phase-output]').textContent = phaseDegrees + '°';
applet.querySelector('[data-iq-i-value]').textContent = formatNumber(i);
applet.querySelector('[data-iq-q-value]').textContent = formatNumber(q);
applet.querySelector('[data-iq-a-value]').textContent = formatNumber(amplitude);
applet.querySelector('[data-iq-phi-value]').textContent = phaseDegrees + '°';
}
function setRunning(enabled) {
running = enabled;
timePhase = 0;
toggleButton.setAttribute('aria-pressed', String(enabled));
toggleButton.textContent = enabled ? 'Anfangszustand anzeigen' : 'Zeiger drehen lassen';
toggleButton.classList.toggle('btn-primary', enabled);
toggleButton.classList.toggle('btn-outline-primary', !enabled);
caption.innerHTML = enabled
? 'Laufender Zeiger und seine beiden Projektionen'
: 'Anfangszustand des Symbols bei <var>t</var> = 0';
note.innerHTML = enabled
? 'Die gestrichelten Linien verbinden die Zeigerspitze mit den momentanen Werten beider Schwingungen.'
: 'Bei <var>t</var> = 0 ist die waagerechte Projektion der I-Anteil und die senkrechte Projektion der Q-Anteil.';
update();
}
function animate(now) {
const delta = Math.min((now - previousTime) / 1000, .1);
previousTime = now;
if (running) timePhase = (timePhase + delta * Math.PI * .8) % (2 * Math.PI);
update();
requestAnimationFrame(animate);
}
amplitudeInput.addEventListener('input', update);
phaseInput.addEventListener('input', update);
toggleButton.addEventListener('click', function () { setRunning(!running); });
new ResizeObserver(update).observe(applet);
document.addEventListener('visibilitychange', function () { previousTime = performance.now(); });
requestAnimationFrame(animate);
})();
</script>
</section>
+364
View File
@@ -0,0 +1,364 @@
<style>
.qpsk-applet {
--qpsk-primary: #009fda;
--qpsk-current: #d85a30;
--qpsk-received: #7451b9;
margin: 1rem 0;
width: 100%;
max-width: 100%;
min-width: 0;
box-sizing: border-box;
overflow: hidden;
}
.qpsk-applet .qpsk-controls {
display: flex;
flex-wrap: wrap;
gap: .65rem;
align-items: center;
margin-bottom: .8rem;
}
.qpsk-applet .qpsk-noise-control {
display: grid;
grid-template-columns: 1fr auto;
gap: .25rem .65rem;
align-items: center;
width: 100%;
}
.qpsk-applet input[type="range"] {
grid-column: 1 / -1;
width: 100%;
min-width: 0;
}
.qpsk-applet output {
text-align: right;
font-variant-numeric: tabular-nums;
}
.qpsk-applet .qpsk-stream {
display: flex;
width: 100%;
max-width: 100%;
min-width: 0;
box-sizing: border-box;
contain: inline-size;
gap: .3rem;
overflow-x: auto;
padding: .45rem .15rem .65rem;
margin-bottom: .7rem;
scrollbar-width: thin;
}
.qpsk-applet .qpsk-symbol {
flex: 0 0 auto;
min-width: 2.25rem;
padding: .28rem .38rem;
border: 1px solid var(--bs-border-color, #ccd2d8);
border-radius: .3rem;
text-align: center;
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-weight: 650;
transition: background .15s, border-color .15s, color .15s;
}
.qpsk-applet .qpsk-symbol.sent {
background: var(--bs-secondary-bg, #edf0f2);
color: var(--bs-secondary-color, #687078);
}
.qpsk-applet .qpsk-symbol.current {
border-color: var(--qpsk-current);
background: var(--qpsk-current);
color: #fff;
}
.qpsk-applet figure { margin: 0; }
.qpsk-applet canvas {
display: block;
width: 100%;
aspect-ratio: 1 / 1;
border: 1px solid var(--bs-border-color, #d8dde2);
border-radius: .35rem;
background: var(--bs-body-bg, #fff);
}
@media (min-width: 800px) {
.course .qpsk-applet { width: 59.3%; }
.course .margin .qpsk-applet { width: 100%; }
}
</style>
<section class="qpsk-applet" aria-label="QPSK-Übertragung mit Rauschen">
<div class="qpsk-controls">
<button data-qpsk-start type="button" class="btn btn-primary btn-sm">Übertragung starten</button>
<button data-qpsk-new type="button" class="btn btn-outline-secondary btn-sm">Neuer Bitstrom</button>
</div>
<div class="qpsk-noise-control">
<label for="qpsk-noise">Rauschen</label>
<input data-qpsk-noise id="qpsk-noise" type="range" min="0" max="60" step="1" value="18">
<output data-qpsk-noise-output>18 %</output>
</div>
<div data-qpsk-stream class="qpsk-stream" aria-label="Zu übertragender Bitstrom"></div>
<figure>
<canvas data-qpsk-canvas aria-label="QPSK-Konstellationsdiagramm"></canvas>
</figure>
<script>
(function () {
const applet = document.currentScript.closest('.qpsk-applet');
const canvas = applet.querySelector('[data-qpsk-canvas]');
const startButton = applet.querySelector('[data-qpsk-start]');
const newButton = applet.querySelector('[data-qpsk-new]');
const noiseInput = applet.querySelector('[data-qpsk-noise]');
const streamElement = applet.querySelector('[data-qpsk-stream]');
const mapping = {
'11': { angle: 45, i: 1, q: 1 },
'01': { angle: 135, i: -1, q: 1 },
'00': { angle: 225, i: -1, q: -1 },
'10': { angle: 315, i: 1, q: -1 }
};
const symbolOrder = ['11', '01', '00', '10'];
const pointColors = {
'11': '#d85a30',
'01': '#2a9d6f',
'00': '#7451b9',
'10': '#168aad'
};
let symbols = [];
let receivedPoints = [];
let currentIndex = -1;
let timer = 0;
let running = false;
function makeBitstream() {
symbols = [];
for (let repetition = 0; repetition < 8; repetition++) {
const group = symbolOrder.slice();
for (let i = group.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
const temporary = group[i];
group[i] = group[j];
group[j] = temporary;
}
symbols.push.apply(symbols, group);
}
receivedPoints = [];
currentIndex = -1;
renderStream(true);
draw();
}
function renderStream(rebuild) {
if (rebuild) {
streamElement.replaceChildren();
symbols.forEach(function (bits) {
const span = document.createElement('span');
span.className = 'qpsk-symbol';
span.textContent = bits;
streamElement.appendChild(span);
});
streamElement.scrollLeft = 0;
}
Array.from(streamElement.children).forEach(function (span, index) {
span.classList.toggle('sent', index < currentIndex);
span.classList.toggle('current', index === currentIndex);
});
const current = streamElement.children[currentIndex];
if (current) {
const streamRect = streamElement.getBoundingClientRect();
const currentRect = current.getBoundingClientRect();
const centeredPosition = streamElement.scrollLeft
+ currentRect.left - streamRect.left
- (streamElement.clientWidth - currentRect.width) / 2;
streamElement.scrollTo({
left: Math.max(0, centeredPosition),
behavior: 'smooth'
});
}
}
function gaussianNoise() {
let u = 0;
let v = 0;
while (u === 0) u = Math.random();
while (v === 0) v = Math.random();
return Math.sqrt(-2 * Math.log(u)) * Math.cos(2 * Math.PI * v);
}
function transmitNext() {
currentIndex += 1;
if (currentIndex >= symbols.length) {
stopTransmission(true);
return;
}
const bits = symbols[currentIndex];
const target = mapping[bits];
const sigma = Number(noiseInput.value) / 100;
const receivedI = target.i + gaussianNoise() * sigma;
const receivedQ = target.q + gaussianNoise() * sigma;
receivedPoints.push({
i: receivedI,
q: receivedQ,
bits: bits
});
renderStream(false);
draw();
}
function startTransmission() {
if (running) return;
if (currentIndex >= symbols.length - 1) makeBitstream();
running = true;
startButton.disabled = true;
startButton.textContent = 'Übertragung läuft …';
newButton.disabled = true;
transmitNext();
timer = window.setInterval(transmitNext, 420);
}
function stopTransmission(finished) {
running = false;
window.clearInterval(timer);
startButton.disabled = false;
newButton.disabled = false;
startButton.textContent = finished ? 'Erneut übertragen' : 'Übertragung starten';
}
function setupCanvas() {
const rect = canvas.getBoundingClientRect();
const dpr = window.devicePixelRatio || 1;
const pixelWidth = Math.round(rect.width * dpr);
const pixelHeight = 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 drawCross(ctx, x, y, size, strokeColor) {
ctx.strokeStyle = strokeColor;
ctx.lineWidth = 2;
line(ctx, x - size, y - size, x + size, y + size);
line(ctx, x - size, y + size, x + size, y - size);
}
function drawArrow(ctx, x0, y0, x1, y1, strokeColor) {
const angle = Math.atan2(y1 - y0, x1 - x0);
const head = 9;
ctx.strokeStyle = strokeColor;
ctx.fillStyle = strokeColor;
ctx.lineWidth = 2.5;
line(ctx, x0, y0, x1, y1);
ctx.beginPath();
ctx.moveTo(x1, y1);
ctx.lineTo(x1 - head * Math.cos(angle - Math.PI / 6), y1 - head * Math.sin(angle - Math.PI / 6));
ctx.lineTo(x1 - head * Math.cos(angle + Math.PI / 6), y1 - head * Math.sin(angle + Math.PI / 6));
ctx.closePath();
ctx.fill();
}
function draw() {
const setup = setupCanvas();
const ctx = setup.ctx;
const width = setup.width;
const height = setup.height;
const cx = width / 2;
const cy = height / 2;
const unit = Math.min(width, height) * .265;
const limit = 1.65;
const textColor = getComputedStyle(applet).color || '#263238';
const axisColor = 'rgba(90,100,110,.72)';
function x(i) { return cx + i * unit; }
function y(q) { return cy - q * unit; }
ctx.clearRect(0, 0, width, height);
// Entscheidungsbereiche
ctx.fillStyle = 'rgba(216,90,48,.035)';
ctx.fillRect(cx, 0, width - cx, cy);
ctx.fillStyle = 'rgba(42,157,111,.035)';
ctx.fillRect(0, 0, cx, cy);
ctx.fillStyle = 'rgba(116,81,185,.035)';
ctx.fillRect(0, cy, cx, height - cy);
ctx.fillStyle = 'rgba(22,138,173,.035)';
ctx.fillRect(cx, cy, width - cx, height - cy);
// Kreis und Achsen
ctx.strokeStyle = 'rgba(120,130,140,.32)';
ctx.lineWidth = 1;
ctx.beginPath();
ctx.arc(cx, cy, Math.SQRT2 * unit, 0, 2 * Math.PI);
ctx.stroke();
ctx.strokeStyle = axisColor;
line(ctx, x(-limit), cy, x(limit), cy);
line(ctx, cx, y(-limit), cx, y(limit));
ctx.fillStyle = textColor;
ctx.font = '13px system-ui, sans-serif';
ctx.fillText('I', x(limit) - 7, cy - 9);
ctx.fillText('Q', cx + 9, y(limit) + 11);
// Ideale Symbole und Beschriftungen
symbolOrder.forEach(function (bits) {
const symbol = mapping[bits];
drawCross(ctx, x(symbol.i), y(symbol.q), 6, pointColors[bits]);
ctx.fillStyle = textColor;
ctx.font = '600 13px ui-monospace, monospace';
ctx.textAlign = symbol.i > 0 ? 'left' : 'right';
ctx.fillText(bits, x(symbol.i) + (symbol.i > 0 ? 11 : -11), y(symbol.q) - 9);
});
ctx.textAlign = 'left';
// Empfangspunkte
receivedPoints.forEach(function (point, index) {
ctx.globalAlpha = index === receivedPoints.length - 1 ? 1 : .58;
ctx.fillStyle = pointColors[point.bits];
ctx.beginPath();
ctx.arc(x(point.i), y(point.q), index === receivedPoints.length - 1 ? 5 : 3.2, 0, 2 * Math.PI);
ctx.fill();
});
ctx.globalAlpha = 1;
// Zeiger zum aktuell empfangenen, verrauschten Signalpunkt
if (currentIndex >= 0 && receivedPoints.length > 0) {
const current = receivedPoints[receivedPoints.length - 1];
drawArrow(ctx, cx, cy, x(current.i), y(current.q), pointColors[current.bits]);
}
}
startButton.addEventListener('click', startTransmission);
newButton.addEventListener('click', function () {
stopTransmission(false);
makeBitstream();
});
noiseInput.addEventListener('input', function () {
applet.querySelector('[data-qpsk-noise-output]').textContent = noiseInput.value + ' %';
});
new ResizeObserver(draw).observe(applet);
makeBitstream();
})();
</script>
</section>
+20
View File
@@ -32,3 +32,23 @@ Nehmen wir ein praktisches Beispiel wie im Fall eines CD-Players, der mit einer
Mit der folgenden Aufgabe kannst du dein Wissen zum Abtasttheorem testen.
[question:AF619]
Im vorherigen Kapitel haben wir die I/Q-Darstellung und den I/Q-Modulator kennengelernt. In einem digitalen System werden die beiden Komponenten I und Q als zwei getrennte digitale Datenströme verarbeitet. Diese können durch digitale Signalverarbeitung erzeugt, verändert und ausgewertet werden.
Auf der Empfängerseite wird das Eingangssignal dazu mit zwei Signalen gleicher Frequenz gemischt, die um $\qty{90}{\degree}$ gegeneinander phasenverschoben sind. Dadurch entstehen ein I- und ein Q-Signal. Beide Signale werden anschließend jeweils mit einem A/D-Umsetzer digitalisiert und können danach digital weiterverarbeitet werden. Auf der Senderseite funktioniert der Vorgang umgekehrt: Digitale I- und Q-Datenströme werden mit zwei D/A-Umsetzern in analoge Signale umgewandelt und anschließend einem I/Q-Modulator zugeführt.
Ein digitaler I/Q-Datenstrom kann einen Frequenzbereich um eine bestimmte Mittenfrequenz herum darstellen. Dabei werden Frequenzen unterhalb der Mittenfrequenz durch negative und Frequenzen oberhalb der Mittenfrequenz durch positive Frequenzabweichungen beschrieben.
Wird ein Eingangssignal beispielsweise mit zwei um $\qty{90}{\degree}$ gegeneinander phasenverschobenen Signalen von jeweils $\qty{435}{\mega\hertz}$ gemischt, repräsentiert der entstehende I/Q-Datenstrom einen Frequenzbereich um die Mittenfrequenz von $\qty{435}{\mega\hertz}$.
Wie groß dieser Frequenzbereich ist, hängt von der Abtastrate ab. Werden sowohl I als auch Q mit einer Abtastrate von $f_\mathrm{S}$ abgetastet, kann idealerweise ein Frequenzbereich von
$-\frac{f_\mathrm{S}}{2}$ bis $+\frac{f_\mathrm{S}}{2}$
um die Mittenfrequenz dargestellt werden. Die insgesamt darstellbare Bandbreite entspricht damit der Abtastrate $f_\mathrm{S}$.
Werden beispielsweise I und Q jeweils mit $\qty{10}{\mega\sample\per\second}$ abgetastet, kann der I/Q-Datenstrom einen Frequenzbereich von $\qty{-5}{\mega\hertz}$ bis $\qty{+5}{\mega\hertz}$ um die Mittenfrequenz darstellen. Bei einer Mittenfrequenz von $\qty{435}{\mega\hertz}$ entspricht dies einem Frequenzbereich von $\qty{430}{\mega\hertz}$ bis $\qty{440}{\mega\hertz}$.
[question:AF634]
[question:AF635]
[question:AF636]
+2 -3
View File
@@ -1,7 +1,6 @@
Digitale Übertragungssysteme verwenden sehr unterschiedliche Verfahren, um die pro Sekunde übertragbare Datenmenge (Bits) und/oder die Robustheit gegenüber Störungen unterschiedlicher Natur zu optimieren. Dabei spielen drei Begriffe eine wichtige Rolle:
Digitale Übertragungssysteme übertragen keine analogen Signale, sondern digitale Informationen. Diese werden in Form von binären Zahlen übertragen, den sogenannten Bits. Dabei müssen zwei Begriffe unterschieden werden:
- *Symbolrate*: Bei digitalen Modulationsverfahren spricht man auch von Modulationsalphabeten, die eine bestimmte Anzahl von Symbolen enthalten können. Bei einfachen Verfahren, wie etwa dem klassischen Funkfernschreiben, wird je Symbol nur ein Bit ($\num{0}$ oder $\num{1}$) übertragen, bei anderen kann es mehr Symbole geben. Die Symbolrate wird in *Baud ($\unit{\baud}$)* angegeben, dies ist der Kehrwert der zeitlichen Symbollänge. Wenn zum Beispiel ein Symbol $\qty{20}{\milli\second}$ dauert, beträgt die Symbolrate $(\qty{20}{\milli\second})^{-1}= \qty{50}{\baud}$. Die Bandbreite wird im Wesentlichen von der Symbolrate beeinflusst.
- *Datenübertragungsrate*: Pro Symbol können durchaus auch mehrere Bit übertragen werden. So hat die sogenannte quaternäre Phasenmodulation vier unterschiedliche Phasenzustände ($\qty{0}{\degree}$, $\qty{90}{\degree}$, $\qty{180}{\degree}$, $\qty{270}{\degree}$), die wir mit den Bitkombinationen (0,0), (1,0), (0,1), (1,1) belegen können. Pro Symbol können also zwei Bit übertragen werden, die Datenübertragungsrate ist zweimal so hoch wie die Symbolrate. Es gibt noch sehr viel komplexere Modulationsalphabete, die deutlich mehr Bit pro Symbol übertragen können - allerdings zu Lasten der Störfestigkeit. Die Datenübertragungsrate wird in *$\unit{\bit\per\second}$* angegeben.
- *Datenübertragungsrate*: Sie gibt an wie viele Bit pro Sekunde übertragen werden. Die Einheit der Datenübertragungsrate ist *$\unit{\bit\per\second}$*
- *Bandbreite*: Den Begriff der Bandbreite haben wir bereits kennen gelernt. Sie wird in *Hertz ($\unit{\hertz}$)* angegeben, wie die Frequenz, und darf nicht mit der Datenübertragungsrate verwechselt werden, auch wenn in der Umgangssprache von der Datenübertragungsrate als Bandbreite gesprochen wird (z.B. beim DSL-Anschluss).
[question:EA106]
+15 -14
View File
@@ -1,41 +1,42 @@
Erkennt der Empfänger einen Fehler, zum Beispiel durch Prüfbits, kann er den Sender um eine erneute Übertragung der Daten bitten, um den Fehler zu korrigieren. Bei der Vorwärtsfehlerkorrektur hingegen ist oft keine Neuübertragung nötig. Dazu wird weitere Redundanz zu den Daten hinzugefügt, z. B. mehrere Prüfbits. So wird nicht nur erkannt, dass ein Fehler vorliegt, sondern auch wo. Das Verfahren kann den Fehler somit korrigieren, indem es das als fehlerhaft erkannte Bit berichtigt. Wie das im Detail funktioniert, kannst du im Bonus-Kasten nachlesen. Es ist aber nicht prüfungsrelevant. Im Englischen wird von Forward Error Correction (FEC) gesprochen.
Erkennt der Empfänger einen Übertragungsfehler, zum Beispiel mithilfe von Prüfbits, kann er den Sender um eine erneute Übertragung der Daten bitten. Bei der *Vorwärtsfehlerkorrektur* ist dagegen häufig keine Neuübertragung erforderlich. Dazu werden den Nutzdaten zusätzliche Informationen hinzugefügt, zum Beispiel mehrere Prüfbits. Damit kann der Empfänger unter bestimmten Voraussetzungen nicht nur erkennen, dass ein Fehler aufgetreten ist, sondern auch bestimmen, welches Bit fehlerhaft ist, und dieses korrigieren. Im Englischen wird dieses Verfahren als *Forward Error Correction* (FEC) bezeichnet.
Wie das im Detail funktionieren kann, zeigt der folgende Bonus-Kasten am Beispiel eines Hamming-Codes. Das genaue Verfahren ist nicht prüfungsrelevant.
[question:AE413]
[question:AE414]
<indepth>
Der Hamming-Code ist ein Fehlerkorrekturverfahren, das mehrere Parity Bits verwendet. Nehmen wir an, wir wollen die folgenden 11 Bits übertragen:
Der Hamming-Code ist ein Fehlerkorrekturverfahren, das mehrere Paritätsbits verwendet. Nehmen wir an, wir wollen die folgenden $\num{11}$ Datenbits übertragen:
[picture:683:hamming1: ]
Das Ziel soll es sein, dass ein Bitfehler nicht nur erkannt, sondern auch korrigiert werden kann. Dazu ist es hilfreich, wenn wir uns die Positionen der einzelnen Bits mal genauer anschauen. Dazu benennen wir die Positionen alphabetisch:
Damit ein einzelner Bitfehler nicht nur erkannt, sondern auch korrigiert werden kann, müssen wir feststellen können, an welcher Stelle der Fehler aufgetreten ist. Dazu betrachten wir zunächst die Positionen der einzelnen Bits und benennen sie alphabetisch:
[picture:682:hamming2: ]
Nun ordnen wir die Bits etwas anders an und fügen noch einige zusätzliche Bits hinzu:
Nun ordnen wir die Datenbits etwas anders an und fügen vier zusätzliche Paritätsbits $p_1$ bis $p_4$ hinzu:
[picture:684:hamming3: ]
Anstatt eines einzelnen Prüfbits verwenden wir jetzt vier ($p_1$-$p_4$), die verschiedene Bereiche unserer Datenbits, ähnlich einem Kreuzworträtsel, abdecken:
Die vier Paritätsbits überprüfen unterschiedliche, sich überlappende Gruppen von Bits:
[picture:685:hamming4: ]
Jedes Prüfbit sichert einen gewissen Bereich ab:
Jedes Paritätsbit sichert dabei eine bestimmte Gruppe ab:
[picture:686:hamming5: ]
Schauen wir uns wieder das Ganze mit unseren Daten an. Für jeden Bereich berechnen wir das Prüfbit mit Even Parity:
Für jede dieser Gruppen berechnen wir nun das zugehörige Paritätsbit mit *Even Parity*:
[picture:687:hamming6: ]
Tritt bei der Übertragung ein Fehler auf, kann dieser durch die Kombination der verschiedenen Bereiche der Fehler lokalisiert und korrigiert werden.
Tritt bei der Übertragung ein einzelner Bitfehler auf, schlagen bestimmte Paritätsprüfungen fehl. Aus der Kombination der fehlgeschlagenen Prüfungen lässt sich bestimmen, an welcher Position der Fehler aufgetreten ist. Das fehlerhafte Bit kann anschließend umgekehrt und damit korrigiert werden.
Wird zum Beispiel das Bit $k$ durch die Übertragung zu einer $\num{0}$, so werden alle Paritätsprüfungen ($p_1$-$p_4$) fehlschlagen. Der Fehler muss also bei Bit $k$ liegen.
Wird zum Beispiel das Bit $k$ bei der Übertragung zu einer $\num{0}$, schlagen alle vier Paritätsprüfungen $p_1$ bis $p_4$ fehl. Nur Bit $k$ gehört zu allen vier überprüften Gruppen. Der Fehler muss daher bei Bit $k$ liegen.
Tritt z.\,B. der Fehler im Bit $a$ auf, so schlägt die Paritätsprüfung von $p_1$ und $p_2$ fehl, während die von $p_3$ und $p_4$ erfolgreich ist. Der Fehler muss also bei Bit $a$ liegen.
Tritt dagegen ein Fehler im Bit $a$ auf, schlagen nur die Paritätsprüfungen von $p_1$ und $p_2$ fehl, während die Prüfungen von $p_3$ und $p_4$ erfolgreich sind. Aus diesem Muster kann der Empfänger erkennen, dass Bit $a$ fehlerhaft ist.
Selbst fehler in den Parity Bits können erkannt und korrigiert werden. Tritt z.\,B. der Fehler im Bit $p_1$ auf, so schlägt die Paritätsprüfung von $p_1$ fehlschlägt, während die von $p_2$, $p_3$ und $p_4$ erfolgreich ist. Der Fehler muss also bei Bit $p_1$ liegen.
Auch ein Fehler in einem Paritätsbit selbst kann erkannt und korrigiert werden. Ist beispielsweise $p_1$ fehlerhaft, schlägt nur die zu $p_1$ gehörende Paritätsprüfung fehl, während die Prüfungen von $p_2$, $p_3$ und $p_4$ erfolgreich sind. Der Fehler muss daher bei $p_1$ liegen.
Treten mehr als 1 Fehler auf, so kann der Hamming-Code diese nicht mehr korrekt erkennen und korrigieren. Es gibt aber Erweiterungen des Hamming-Codes, die auch Mehrbitfehler erkennen können.
</indepth>
Der hier gezeigte Hamming-Code ist für die Korrektur eines einzelnen Bitfehlers ausgelegt. Treten mehrere Bitfehler gleichzeitig auf, kann aus den Paritätsprüfungen nicht mehr zuverlässig auf die tatsächliche Fehlerposition geschlossen werden. Erweiterte Hamming-Codes können zusätzlich beispielsweise zwei gleichzeitig auftretende Bitfehler sicher erkennen.
</indepth>
+27 -18
View File
@@ -1,28 +1,37 @@
% TODO neu formulieren
% Idee DL9MJ: Beispiel mit Bild je ein Bit in I und Q und wie das Signal für 00, 01, 10, 11 aussieht
Im vorherigen Abschnitt haben wir gesehen, dass Symbole beispielsweise durch unterschiedliche Amplituden oder Frequenzen dargestellt werden können. Eine weitere Möglichkeit besteht darin, die Phasenlage eines Signals zu verändern. Um Signalzustände mit unterschiedlicher Amplitude und Phase übersichtlich darzustellen, wird häufig die sogenannte *I/Q-Darstellung* verwendet.
QAM kann besonders einfach mit Hilfe von zwei Trägern derselben Frequenz erzeugt werden. Einer der beiden Träger muss dabei um $\qty{90}{\degree}$ phasenverschoben sein. Beide Träger werden dann jeweils mit einem eigenen Signal amplitudenmoduliert. Das eine Signal wird als I (für In-Phase Component) und das andere Signal als Q (für Quadrature Phase Component) bezeichnet. Der phasenverschobene Träger wird dabei mit dem Q-Signal moduliert. In Anschluss werden die beiden modulierten Träger überlagert, wobei ein Träger entsteht, der sich sowohl in der Amplitude als auch in der Phase ändert.
Betrachten wir zunächst einen Signalzustand zum Zeitpunkt $t=0$. Für das Symbol werden eine Amplitude $A$ und eine Phasenlage $\varphi$ festgelegt. In einer Zeigerdarstellung bestimmt die Amplitude die Länge des Zeigers und die Phasenlage seinen Winkel gegenüber der waagerechten Achse.
<indepth>
[include:applet_iq]
</indepth>
%TODO BILD QAM4 QAM8 oder mehr?
Der Zeiger lässt sich in einen waagerechten und einen senkrechten Anteil zerlegen. Der waagerechte Anteil wird als $I$ für *In-Phase Component* bezeichnet, der senkrechte Anteil als $Q$ für *Quadrature Component*. Für den dargestellten Signalzustand gilt:
[question:AE404]
[question:AF632]
$I=A\cdot\cos(\varphi)$
Die Grundidee, ein Signal in zwei Teilen getrennt zu verarbeiten, findet auch in der digitalen Signalverarbeitung breite Anwendung. Es wird nach den beiden Teilsignalen als I/Q-Verfahren bezeichnet. Das I/Q-Verfahren ermöglicht es, jedes beliebige Signal zu erzeugen. Dazu besteht der zu modulierende Datenstrom aus einem I- und einem Q-Anteil. Zwei D/A-Umsetzer wandeln jeweils einen der beiden Anteile in ein analoges I- bzw. Q-Signal um. Mit dem I- und dem Q-Signal werden wiederum die beiden phasenverschobenen Träger moduliert. Im letzten Schritt werden diese zu einem Träger überlagert, der ausgesendet wird.
$Q=A\cdot\cos(\varphi-\qty{90}{\degree})=A\cdot\sin(\varphi)$
Entsprechend wird auch auf der Empfängerseite vorgegangen. Das Eingangssignal wird mit einem Träger gemischt, um das I-Signal zu erhalten, das dann mittels A/D-Umsetzer in den I-Anteil eines Datenstroms umgewandelt wird. Gleichzeitig wird das Eingangssignal aber auch mit einem um $\qty{90}{\degree}$ phasenverschobenen Träger gemischt, um das Q-Signal zu erhalten, das wiederum mittels eines A/D-Umsetzers in den Q-Anteil des Datenstroms umgewandelt wird.
Lassen wir die Zeit weiterlaufen, dreht sich der zur Schwingung gehörende Zeiger. Seine Projektionen auf die beiden Achsen verlaufen sinusförmig und sind um $\qty{90}{\degree}$ gegeneinander phasenverschoben. Das Applet zeigt diesen Zusammenhang zwischen der Schwingung und ihrer I/Q-Darstellung.
[include:applet_iq_zeiger]
[question:AF633]
Ein solcher digitaler Datenstrom kann immer einen bestimmten Frequenzbereich des Eingangssignals abbilden, der um eine Mittenfrequenz herum liegt. Wird das Eingangssignal beispielsweise mit einem $\qty{435}{\mega\hertz}$-Träger und einem um $\qty{90}{\degree}$ phasenverschobenen $\qty{435}{\mega\hertz}$-Träger gemischt und die beiden entstehenden Signale durch A/D-Umsetzer digitalisiert, dann bildet der entstehende I/Q-Datenstrom den Frequenzbereich um $\qty{435}{\mega\hertz}$ herum ab.
Anschaulich kann man sich vorstellen, dass zu Beginn jedes Symbolintervalls der zu übertragende Symbolwert einen Punkt in der I/Q-Ebene und damit die Amplitude und die anfängliche Phasenlage der Schwingung für dieses Symbol festlegt. Beim nächsten Symbol wird entsprechend auf den Signalzustand des nächsten Punktes übergegangen.
% TODO Verweis auf Abtasttheorem?
Die abgedeckte Bandbreite hängt dabei von der Abtastrate der A/D-Umsetzung ab. Die Bandbreite in Hz entspricht dabei der Abtastrate in Samples pro Sekunde. Werden in unserem Beispiel sowohl der I- als auch der Q-Anteil mit 10 Millionen Samples pro Sekunde abgetastet, dann kann der entstehende I/Q-Datenstrom einen Frequenzbereich von $\qty{10}{\mega\hertz}$ Bandbreite abdecken, also von $\qty{-5}{\mega\hertz}$ bis $\qty{+5}{\mega\hertz}$ in Bezug auf die Mittenfrequenz. Der Datenstrom deckt dann also die Frequenzen von $\qty{430}{\mega\hertz}$ bis $\qty{440}{\mega\hertz}$ ab.
Für die Darstellung der Symbole interessiert uns also nicht die fortlaufende Drehung des Zeigers, sondern der für das jeweilige Symbol festgelegte Startzustand. Werden die möglichen Startzustände als Punkte in der I/Q-Ebene eingezeichnet, spricht man von einem *Konstellationsdiagramm* (vgl. Abbildung [ref:a_konstellationsdiagramm]). Jeder Punkt entspricht einem möglichen Symbol. Der Abstand eines Punktes vom Ursprung beschreibt die Amplitude des Signals. Sein Winkel gegenüber der I-Achse beschreibt die Phasenlage.
[question:AF634]
[question:AF635]
[question:AF636]
<margin>
[picture:1060:a_konstellationsdiagramm:Konstellationsdiagramm]
</margin>
<indepth>
Für mathematisch interessierte: Eine sinusförmige Schwingung kann mathematisch auch als *komplexer Zeiger* beschrieben werden, der sich mit der Kreisfrequenz $\omega_\mathrm{c}$ dreht:
$s(t) = \Re\left\{A \cdot e^{j(\omega_\mathrm{c}t+\varphi)}\right\} = A\cos(\omega_\mathrm{c}t+\varphi)$
Dabei beschreibt $A$ die Amplitude und $\varphi$ die anfängliche Phasenlage des Signals. Der komplexe Ausdruck lässt sich in zwei Teile zerlegen:
$A \cdot e^{j(\omega_\mathrm{c}t+\varphi)} = \underbrace{A \cdot e^{j\varphi}}_{\text{Amplitude und Phase}} \cdot \underbrace{e^{j\omega_\mathrm{c}t}}_{\text{Träger}}$
In einem Konstellationsdiagramm interessiert uns der erste Teil $A \cdot e^{j\varphi}$. Er beschreibt Amplitude und Phasenlage des Signalzustands. Die fortlaufende Drehung des eigentlichen Trägers wird dabei nicht dargestellt.
</indepth>
Diese Darstellung werden wir in den folgenden Abschnitten immer wieder verwenden: Mit ihr lassen sich die möglichen Symbole digitaler Modulationsverfahren übersichtlich darstellen und später auch die Zuordnung von Bitkombinationen zu diesen Symbolen beschreiben.
+18 -21
View File
@@ -1,40 +1,37 @@
Im Rahmen der digitalen Signalverarbeitung beschreibt das *Mapping* den Schritt, bei dem digitale Daten in spezifische Signalpunkte (Symbole) umgewandelt werden, die über das Übertragungssystem gesendet werden können. Dies ist ein entscheidender Prozess in der Modulation, insbesondere bei Quadraturamplitudenmodulationen (QAM) und Phasenumtastungen wie QPSK (Quadrature Phase Shift Keying).
Um die Symbole zu visualisieren, verwenden wir ein *Konstellationsdiagramm* wie in Abbildung [ref:a_konstellation], das die möglichen Signalpunkte in einem zweidimensionalen Raum darstellt. Man bezeichnet die Achsen oft als In-Phase (I) und Quadrature (Q). Jeder Punkt im Diagramm repräsentiert eine bestimmte Amplitude und Phase, die durch das Mapping einer bestimmten Bitkombination zugeordnet ist, wie in Abbildung [ref:a_qpsk] dargestellt.
Bei digitalen Übertragungsverfahren müssen die zu übertragenden Bits den verschiedenen möglichen Symbolen zugeordnet werden. Diese Zuordnung wird als *Mapping* bezeichnet. Der Baustein, der diese Zuordnung vornimmt, wird als *Mapper* bezeichnet. Das Blocksymbol eines Mappers ist in Abbildung [ref:a_mapper] dargestellt. Der Mapper nimmt einen digitalen Bitstrom entgegen und ordnet die enthaltenen Bitkombinationen den entsprechenden Symbolen in einem Konstellationsdiagramm zu.
<margin>
[picture:1060:a_konstellation:Konstellationsdiagramm]
[picture:1102:a_mapper:Blockschaltbild eines Mappers]
</margin>
---
Schauen wir uns im ersten Schritt QPSK in Abbildung [ref:a_qpsk] an: Bei QPSK werden jeweils zwei Bits zu einem Symbol zusammengefasst. Da wir zwei Bits pro Symbol haben, ergeben sich vier mögliche Kombinationen ($\num{00}$, $\num{01}$, $\num{10}$, $\num{11}$). Jede dieser Kombinationen wird einem spezifischen Signalpunkt zugeordnet, der durch eine bestimmte Phase repräsentiert wird.
Um das Prinzip des Mappings kennenzulernen, betrachten wir zunächst die bereits aus Klasse E bekannte *Amplitudenumtastung* (*Amplitude-Shift Keying*, ASK). Die Abbildung [ref:a_ask] zeigt eine binäre ASK in der Zeitdarstellung. Dabei wird die Amplitude des Trägersignals zwischen zwei Werten umgeschaltet. Beispielsweise kann eine große Amplitude das Bit $1$ und eine kleine Amplitude das Bit $0$ darstellen.
<margin>
[picture:1059:a_qpsk:I-Q-Diagramm für ein QPSK-Mapping]
[picture:700:a_ask:ASK (Amplitude-Shift Keying) im zeitlichen Verlauf]
</margin>
---
Bei QPSK hat jedes Symbol eine eigene Phase. Die Phasen werden typischerweise in $\qty{90}{\degree}$-Schritten definiert und auf die vier möglichen Bitkombinationen gemapped, zum Beispiel:
Die beiden möglichen Symbole lassen sich auch in dem zuvor kennengelernten Konstellationsdiagramm darstellen. Da sich bei diesem Beispiel nur die Amplitude ändert und die Phasenlage gleich bleibt, liegen beide Signalpunkte auf der I-Achse. Der unterschiedliche Abstand vom Ursprung entspricht den beiden unterschiedlichen Amplituden. Jedem der beiden Signalpunkte wird nun über das Mapping ein Bitwert zugeordnet.
- $\num{11}$ entspricht $\qty{45}{\degree}$
- $\num{01}$ entspricht $\qty{135}{\degree}$
- $\num{00}$ entspricht $\qty{225}{\degree}$
- $\num{10}$ entspricht $\qty{315}{\degree}$
Die Amplitude der Signale bleibt dabei konstant, und die Information wird ausschließlich durch die Phasenlage übertragen. Deshalb liegen die vier Punkte im Konstellationsdiagramm für QPSK auf einem Kreis.
<indepth>
Genau genommen gibt es aber auch noch andere Möglichkeiten, die Phasen den Bitkombinationen zuzuordnen, solange sie eindeutig sind. Das hier gezeigte Mapping ist nur ein Beispiel. In dem hier gezeigten Beispiel wurden die Zuordnungen so gewählt, dass sich zwischen benachbarten Symbolen nur wenige Bits ändern. Das hat den Vorteil, dass unter Rauscheinfluss nur wenige Bitfehler entstehen. Dafür wird der Gray-Code verwendet, der in den meisten digitalen Übertragungsverfahren Anwendung findet.
</indepth>
<margin>
[picture:1128:a_ask_mapping:ASK (Amplitude-Shift Keying) im Konstellationsdiagramm]
</margin>
---
Jeder dieser Punkte repräsentiert ein Symbol. Der Empfänger kann anhand der Phasenlage bestimmen, welche Bitkombination gesendet wurde. Das Konstellationsdiagramm bei QPSK zeigt vier Signalpunkte im rechten Winkel zueinander, die den vier verwendeten Phasen entsprechen. Die große Trennung zwischen den einzelnen Phasen ermöglicht eine zuverlässige Decodierung auch unter rauschbehafteten Bedingungen.
Eine Amplitudenumtastung ist nicht auf zwei mögliche Amplituden beschränkt. Werden beispielsweise vier unterschiedliche Amplituden verwendet, stehen vier verschiedene Symbole zur Verfügung. Da sich mit zwei Bits vier unterschiedliche Bitkombinationen bilden lassen, kann jedem Symbol eine der Kombinationen $00$, $01$, $10$ oder $11$ zugeordnet werden.
Ändert man neben der Phase auch die Amplitude, so spricht man von einer Quadraturamplitudenmodulation (QAM). Bei QAM werden sowohl die Amplitude als auch die Phase variiert, um mehr Bits pro Symbol zu übertragen. Zum Beispiel kann bei 16-QAM jedes Symbol vier Bits repräsentieren, was zu 16 möglichen Signalpunkten im Konstellationsdiagramm führt. Ein Beispiel für ein 16-QAM-Mapping ist in Abbildung [ref:a_qam] dargestellt.
Die Abbildung [ref:a_4_ask] zeigt eine solche *4ASK* mit vier unterschiedlichen Amplituden in der Zeitdarstellung. Beispielsweise können $\qty{25}{\percent}$, $\qty{50}{\percent}$, $\qty{75}{\percent}$ und $\qty{100}{\percent}$ der maximalen Amplitude verwendet werden. Mit jedem Symbol können dadurch zwei Bits übertragen werden.
<margin>
[picture:1061:a_qam:I-Q-Diagramm für ein 16-QAM-Mapping]
</margin>
[picture:701:a_4_ask:Quaternäre Amplitudenumtastung (Quaternary Amplitude-Shift Keying)]
</margin>
Auch im Konstellationsdiagramm sind nun vier mögliche Signalpunkte vorhanden. Da sich weiterhin nur die Amplitude ändert, liegen in diesem Beispiel alle vier Punkte auf der I-Achse. Jedem Punkt ist eine bestimmte Bitkombination zugeordnet.
<margin>
[picture:1129:a_4_ask_mapping:Quaternäre Amplitudenumtastung (Quaternary Amplitude-Shift Keying) im Konstellationsdiagramm]
</margin>
@@ -1,24 +0,0 @@
Viele digitale Modulationsverfahren verwenden mehr als zwei Symbole. Anstelle von nur zwei Amplituden (klein und groß) funktioniert Amplitudenumtastung auch mit vier oder noch mehr unterschiedlichen Amplituden, also beispielsweise $\qty{25}{\percent}$, $\qty{50}{\percent}$, $\qty{75}{\percent}$, $\qty{100}{\percent}$ des Maximums. So lassen sich zwei oder mehr Bits zu einem Symbol zusammenfassen und gleichzeitig übertragen.
[picture:701:4ask:Quaternäre Amplitudenumtastung (Quaternary Amplitude-shift Keying)]
Dieses Prinzip lässt sich auch wieder auf die Frequenz- und Phasenumtastung übertragen. Eine einfache Phasenumtastung (Binary Phase-Shift Keying, BPSK) verwendet nur zwei verschiedene Phasenlagen und kann daher nur ein Bit gleichzeitig senden. Die Quadraturphasenumtastung (Quadrature Phase-Shift Keying, QPSK) hingegen nutzt schon vier verschiedene Phasenlagen ($\qty{0}{\degree}$, $\qty{90}{\degree}$, $\qty{180}{\degree}$ und $\qty{270}{\degree}$). QPSK überträgt somit zwei Bits in jedem Schritt.
[question:AE402]
Da bei Verfahren wie QPSK mehr als ein Bit pro Symbol übertragen wird, müssen wir mit den Einheiten aufpassen. Während wir in Hinblick auf den Datenstrom von einer Datenrate in $\unit{\bit\per\second}$ sprechen, wird die Rate der Abfolge unterschiedlicher Symbole in Symbolen pro Sekunde mit der Einheit Baud notiert.
[question:AA104]
Werden nur zwei Symbole verwendet und somit jedes Bit einzeln gesendet, entspricht die Symbolrate in Baud ($\unit{\baud}$) der Datenrate in Bit pro Sekunde ($\unit{\bit\per\second}$). Werden jedoch mehr Symbole verwendet und somit mehrere Bits gleichzeitig übertragen, ist die Datenrate höher als die Symbolrate. Für den Zusammenhang gilt, dass die Datenrate in $\unit{\bit\per\second}$ gleich der Symbolrate in $\unit{\baud}$ multipliziert mit der Anzahl der pro Symbol übertragenen Bits ist:
$C=R_\mathrm{S}\cdot n$
$C$ Datenübertragungsrate in $\unit{\bit\per\second}$
$R_\mathrm{S}$ Symbolrate in $\unit{\baud}$
$n$ Symbolgröße in $\unit{\bit\per\text{Symbol}}$
[question:AE405]
[question:AE406]
+1 -2
View File
@@ -1,7 +1,6 @@
Es ist auch möglich, einen Datenstrom auf mehrere Träger zu verteilen, die auf unterschiedlichen, jedoch nahegelegenen Frequenzen liegen. Die Träger können allerdings nicht beliebig dicht nebeneinander liegen, da sie aufgrund der zwangsläufig entstehenden Seitenbänder eine gewisse Breite aufweisen.
Bei der orthogonalen Frequenzmodulation (Orthogonal Frequency-Division Multiplexing, OFDM) werden nun die einzelnen Träger in genau dem Abstand platziert, wo ein gegenseitiges Stören untereinander (ein sogenanntes "Übersprechen") möglichst vermieden wird.
Beim orthogonalen Frequenzmultiplexverfahren, (Orthogonal Frequency-Division Multiplexing, OFDM) werden nun die einzelnen Träger in genau dem Abstand platziert, wo ein gegenseitiges Stören untereinander (ein sogenanntes "Übersprechen") möglichst vermieden wird.
Je höher die Symbolrate pro Träger ist, umso größer muss der Abstand der Träger gewählt werden. Aus diesem Grunde wählt man oft eine kleinere Symbolrate für jeden einzelnen Träger, damit entsprechend mehr Träger Platz finden. Die übertragene Informationsmenge bleibt hierbei gleich, denn obwohl pro Träger weniger Information übertragen werden kann, können mehr Träger nebeneinander verwendet werden.
+60 -21
View File
@@ -1,33 +1,72 @@
Die Phasenumtastung (Phase Shift Keying, PSK) ist ein digitales Modulationsverfahren, das zur Übertragung von Daten in der Telekommunikation und im Amateurfunk genutzt wird. PSK basiert auf der Veränderung der Phase eines Trägersignals, um verschiedene Datenzustände zu repräsentieren. Im Vergleich zu Amplituden- oder Frequenzmodulation ist PSK weniger anfällig für Amplitudenrauschen und kann bei gleicher Bandbreite eine höhere Datenrate erreichen.
Bei der Phasenumtastung (Phase-Shift Keying, PSK) werden die verschiedenen Symbole durch unterschiedliche Phasenlagen eines Trägers dargestellt. Die Amplitude und die Frequenz des Trägers bleiben dabei gleich. Beim Wechsel von einem Symbol zum nächsten kann sich dagegen die Phasenlage ändern.
[picture:705:psk:Phasenumtastung (Phase-shift Keying)]
Die Abbildung [ref:a_psk] zeigt ein PSK-Signal im zeitlichen Verlauf. An den Symbolgrenzen erkennt man, dass die Schwingung mit einer anderen Phasenlage fortgesetzt wird.
Prinzip der Phasenumtastung (PSK)
<margin>
[picture:705:a_psk:Phasenumtastung (Phase-Shift Keying)]
</margin>
In der einfachsten Form, dem **BPSK (Binary Phase Shift Keying)**, gibt es zwei Phasenwinkel, z. B. $\qty{0}{\degree}$ und $\qty{180}{\degree}$. Jeder Phasenwinkel repräsentiert einen Bitwert ($\num{0}$ oder $\num{1}$). Bei einem Wechsel der Bitwerte verändert sich die Phase des Trägers um $\qty{180}{\degree}$.
---
Für höhere Datenraten gibt es Varianten wie **QPSK (Quadrature Phase Shift Keying)** und **8-PSK**, bei denen vier bzw. acht Phasenlagen verwendet werden, um mehrere Bits pro Symbol zu übertragen:
- **QPSK**: Verwendet vier Phasen ($\qty{0}{\degree}$, $\qty{90}{\degree}$, $\qty{180}{\degree}$ und $\qty{270}{\degree}$), um jeweils zwei Bits pro Symbol zu kodieren.
- **8-PSK**: Verwendet acht Phasen, um drei Bits pro Symbol zu kodieren.
Die einfachste Form ist die binäre Phasenumtastung (Binary Phase-Shift Keying, BPSK). Dabei stehen zwei verschiedene Phasenlagen und damit zwei mögliche Symbole zur Verfügung. Beispielsweise können die Phasenlagen $\qty{0}{\degree}$ und $\qty{180}{\degree}$ verwendet und den Bitwerten $0$ und $1$ zugeordnet werden. Die Abbildung [ref:a_psk_mapping] zeigt ein mögliches Mapping der beiden Bitwerte auf die beiden BPSK-Symbole.
Signale in der Zeitdarstellung
Da sich die beiden Symbole nur durch ihre Phasenlage unterscheiden und ihre Amplitude gleich ist, liegen die beiden Punkte im Konstellationsdiagramm gegenüberliegend auf einem Kreis.
In der Zeitdarstellung eines PSK-Signals zeigt sich die Phasenumtastung als abrupter Wechsel im Phasenwinkel des Trägersignals, während die Amplitude konstant bleibt. Dies ist ein deutlicher Unterschied zur Amplituden- oder Frequenzmodulation, da die Höhe und Frequenz des Signals gleichbleiben, nur die Phase ändert sich bei jedem Symbolwechsel.
<margin>
[picture:1101:a_psk_mapping:BPSK im Konstellationsdiagramm]
</margin>
Beispiel: BPSK in der Zeitdarstellung
- Bei BPSK ist das Signal in zwei Phasen gespalten: z. B. positive Amplitude für eine Phase ($\qty{0}{\degree}$) und negative Amplitude für die entgegengesetzte Phase ($\qty{180}{\degree}$).
- In einem Zeit-Diagramm sieht man daher bei jedem Bitwechsel einen Sprung des Signals, z. B. von positiv nach negativ oder umgekehrt.
<indepth>
Spitzfindigkeit: Genaugenommen kann BPSK mit den Winkeln $\qty{0}{\degree}$ und $\qty{180}{\degree}$ auch als ein ASK-Verfahren betrachtet werden, bei dem die Amplitude des Trägersignals zwischen einem negativen und einem positiven Wert umgeschaltet wird. Eine Multiplikation mit $-1$ resultiert bei einem Sinus-Signal zu einer Phasenverschiebung um $\qty{180}{\degree}$:
Beispiel: QPSK in der Zeitdarstellung
- Hier sieht man vier verschiedene Phasenwinkel. Die Übergänge können ebenfalls abrupt sein, aber die Amplitude ändert sich nicht.
- Da hier mehrere Phasenwinkel verwendet werden, sind die Phasensprünge kleiner, und die Kurve hat einen etwas „geglätteten“ Verlauf im Vergleich zu BPSK.
$-\sin(\omega t)=\sin(\omega t+\qty{180}{\degree})$
Wie die Signale zu erkennen sind
Dies ist ein Spezialfall. Es wären übrigens auch andere Phasenwinkel wie z. B. $\qty{90}{\degree}$ und $\qty{270}{\degree}$ möglich, deren beide Symbolphasen ebenfalls um $\qty{180}{\degree}$ voneinander getrennt wären.
</indepth>
In einem Oszilloskop- oder Phasen-Diagramm sind die Phasenübergänge sichtbar:
- **Im Zeitbereich**: Ein abruptes Umkippen der Signalphase (positiv zu negativ oder zwischen verschiedenen Phasenlagen).
- **Im Phasendiagramm** (oft als Constellation Diagram angezeigt): Jeder Phasenwinkel ist als Punkt auf einem Kreis dargestellt, der für die verschiedenen Zustände (Bits) steht. Bei einem sauberen Signal bleiben die Punkte stabil auf festen Positionen.
[question:AE401]
PSK ist besonders nützlich in der digitalen Kommunikation, da es hohe Datenraten bei vergleichsweise robuster Übertragung erlaubt. Die Veränderung der Phase bei gleichbleibender Amplitude hilft, das Signal auch bei Rauschen und Interferenzen besser zu erkennen und damit eine stabilere Übertragung zu ermöglichen.
---
[question:AE401]
Mit mehr als zwei unterschiedlichen Phasenlagen können entsprechend mehr Symbole dargestellt werden. Dadurch lassen sich mehrere Bits zu einem Symbol zusammenfassen.
---
Bei der Quadraturphasenumtastung (Quadrature Phase-Shift Keying, QPSK) stehen vier unterschiedliche Phasenlagen und damit vier mögliche Symbole zur Verfügung. Da es vier mögliche Bitkombinationen aus zwei Bits gibt, können mit jedem Symbol zwei Bits übertragen werden.
Zum Vergleich:
* BPSK: $\num{2}$ Symbole → $\num{1}$ Bit pro Symbol
* QPSK: $\num{4}$ Symbole → $\num{2}$ Bit pro Symbol
* 8-PSK: $\num{8}$ Symbole → $\num{3}$ Bit pro Symbol
[question:AE402]
Schauen wir uns QPSK nun im Konstellationsdiagramm an. Die vier möglichen Symbole besitzen die gleiche Amplitude, unterscheiden sich aber durch ihre Phasenlage. Deshalb liegen alle vier Signalpunkte auf einem Kreis. Die Abbildung [ref:a_qpsk] zeigt ein mögliches Mapping der vier Bitkombinationen $00$, $01$, $10$ und $11$ auf die vier QPSK-Symbole.
<margin>
[picture:1059:a_qpsk:I/Q-Diagramm für ein QPSK-Mapping]
</margin>
---
In diesem Beispiel werden folgende Phasenlagen verwendet:
* $11$ entspricht $\qty{45}{\degree}$
* $01$ entspricht $\qty{135}{\degree}$
* $00$ entspricht $\qty{225}{\degree}$
* $10$ entspricht $\qty{315}{\degree}$
<margin>
Das folgende Applet veranschaulicht die digitale QPSK-Modulation. In einem echten System wird das Signal durch Rauschen und andere Störungen beeinflusst. Dadurch liegen die empfangenen Signalpunkte nicht exakt auf den idealen Positionen, sondern weichen sowohl in ihrer Amplitude als auch in ihrer Phase davon ab. Das Applet simuliert dies, indem es Rauschen hinzufügt. Die Kreuze markieren die vier idealen QPSK-Symbole. Jeder farbige Punkt ist ein verrauschter Empfangswert. Der Empfänger ordnet ihn dem nächstgelegenen Symbol zu. Die farbig hinterlegten Bereiche sind die Entscheidungsbereiche des Empfängers. Solange ein verrauschter Empfangswert im Bereich des ursprünglich gesendeten Symbols liegt, wird es richtig erkannt. Überschreitet ein Punkt durch starkes Rauschen eine Grenze zu einem benachbarten Bereich, entscheidet sich der Empfänger für das falsche Symbol. Durch Kanalkodierung können diese Fehler jedoch korrigiert werden. Damit beschäftigen wir uns in einem späteren Abschnitt.
[include:applet_qpsk]
</margin>
Die vier Phasenlagen sind jeweils um $\qty{90}{\degree}$ gegeneinander versetzt. Der Empfänger kann anhand der erkannten Phasenlage bestimmen, welches Symbol und damit welche Bitkombination übertragen wurde.
Die Zuordnung der Bitkombinationen zu den einzelnen Phasenlagen ist nicht eindeutig festgelegt. Entscheidend ist zunächst nur, dass jedem Symbol eine eindeutige Bitkombination zugeordnet wird.
In der Praxis wird das Mapping häufig so gewählt, dass sich die Bitkombinationen benachbarter Signalpunkte nur in einem Bit unterscheiden. Eine solche Zuordnung wird als *Gray-Code* bezeichnet. Wird durch Rauschen versehentlich ein benachbarter Signalpunkt erkannt, führt dies dadurch häufig nur zu einem einzelnen Bitfehler.
Das Konstellationsdiagramm macht damit einen wesentlichen Unterschied zwischen ASK und PSK unmittelbar sichtbar: Bei ASK unterscheiden sich die Symbole durch ihren Abstand vom Ursprung und liegen in der Regel nur auf der positiven I-Achse, bei PSK dagegen durch ihren Winkel. Bei PSK liegen die Signalpunkte daher bei gleicher Amplitude auf einem Kreis.
+55 -3
View File
@@ -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.
+2 -2
View File
@@ -1,10 +1,10 @@
Im folgenden Abschnitt werden die einzelnen Schritte einer Sende- und Empfangskette beschrieben. Die Abbildung [ref:a_sdr_sender] zeigt beispielhaft einen SDR-Sender für die Sprachkommunikation. Im ersten Schritt wird das Mikrofonsignal durch einen A/D-Umsetzer digitalisiert. Das digitale Signal wird anschließend durch einen Quellencodierer komprimiert, um die benötigte Bandbreite zu reduzieren. Im darauffolgenden Schritt versieht ein Kanalcodierer das komprimierte Signal gezielt mit Redundanz, sodass Übertragungsfehler erkannt und korrigiert werden können. Die codierten Daten werden schließlich durch einen Mapper in Symbole umgewandelt und anschließend durch einen I/Q-Modulator moduliert, auf den in einem späteren Kapitel noch näher eingegangen wird. Den Abschluss der Sendekette bilden ein Leistungsverstärker sowie die Antenne, über die das Signal abgestrahlt wird.
Im folgenden Abschnitt werden die einzelnen Schritte einer Sende- und Empfangskette beschrieben. Die Abbildung [ref:a_sdr_sender] zeigt beispielhaft einen SDR-Sender für die Sprachkommunikation. Im ersten Schritt wird das Mikrofonsignal durch einen A/D-Umsetzer digitalisiert. Das digitale Signal wird anschließend durch einen Quellencodierer komprimiert, um die benötigte Bandbreite zu reduzieren. Im darauffolgenden Schritt versieht ein Kanalcodierer das komprimierte Signal gezielt mit Redundanz, sodass Übertragungsfehler erkannt und korrigiert werden können. Die codierten Daten werden schließlich durch einen Mapper in Symbole umgewandelt und anschließend durch einen I/Q-Modulator moduliert. Den Abschluss der Sendekette bilden ein Leistungsverstärker sowie die Antenne, über die das Signal abgestrahlt wird.
<margin>
[picture:1062:a_sdr_sender:SDR Sender für Sprachkommunikation]
</margin>
Die in blau hervorgehobenen Blöcke in Abbildung [ref:a_sender] repräsentieren die Signalverarbeitungsschritte, die beispielsweise rein softwarebasiert oder mithilfe eines FPGAs implementiert werden können. Die Reihenfolge dieser Verarbeitungsschritte ist für einen Sender stets wie folgt und sollte für Prüfungsfragen gut eingeprägt werden:
Die in blau hervorgehobenen Blöcke in Abbildung [ref:a_sdr_sender] repräsentieren die Signalverarbeitungsschritte, die beispielsweise rein softwarebasiert oder mithilfe eines FPGAs implementiert werden können. Die Reihenfolge dieser Verarbeitungsschritte ist für einen Sender stets wie folgt und sollte für Prüfungsfragen gut eingeprägt werden:
1. Quellencodierer: Daten komprimieren
2. Kanalcodierer: Hinzufügen von Redundanz zur Fehlererkennung und -korrektur
+41
View File
@@ -0,0 +1,41 @@
Bei digitalen Übertragungen werden Informationen in Form von Symbolen übertragen. Ein Symbol ist dabei ein unterscheidbarer Signalzustand, der für eine bestimmte Zeit übertragen wird. Diese Signalzustände können sich beispielsweise durch unterschiedliche Amplituden, Frequenzen oder Phasen beziehungsweise durch Kombinationen dieser Eigenschaften unterscheiden. Wie solche Symbole erzeugt werden, betrachten wir in den folgenden Abschnitten. Je nachdem, wie viele unterschiedliche Symbole ein Übertragungsverfahren verwenden kann, kann ein einzelnes Symbol ein oder mehrere Bits an Information enthalten.
Stehen nur zwei unterschiedliche Symbole zur Verfügung, kann mit jedem Symbol genau ein Bit übertragen werden. Bei vier möglichen Symbolen können bereits zwei Bit mit einem Symbol übertragen werden, da sich mit zwei Bit vier verschiedene Kombinationen darstellen lassen. Entsprechend können acht unterschiedliche Symbole drei Bit und $\num{16}$ unterschiedliche Symbole vier Bit gleichzeitig übertragen.
Allgemein ergibt sich die Anzahl $N$ der mit einem Symbol übertragbaren Bits aus der Anzahl $M=2^N$ der möglichen Symbole:
$N = \log_2(M)$
Die *Symbolrate* gibt an, wie viele Symbole pro Sekunde übertragen werden. Ihre Einheit ist *Baud*. Eine Symbolrate von $\qty{1000}{\baud}$ bedeutet also, dass pro Sekunde $\num{1000}$ Symbole übertragen werden.
Die Symbolrate ist nicht zwangsläufig mit der Datenrate identisch. Werden mit jedem Symbol mehrere Bits übertragen, ist die Datenrate entsprechend größer. Für die Datenrate $R_\mathrm{D}$ (mit der Einheit $\unit{\bit\per\second}$) und die Symbolrate $R_\mathrm{S}$ gilt:
$R_\mathrm{D} = R_\mathrm{S} \cdot N$
Werden beispielsweise bei einer Symbolrate von $\qty{1200}{\baud}$ mit jedem Symbol zwei Bit übertragen, ergibt sich eine Datenrate von:
$R_\mathrm{D} = \qty{1200}{\baud} \cdot 2 = \qty{2400}{\bit\per\second}$
Die Anzahl der möglichen Symbole und die Symbolrate sind damit wichtige Größen für digitale Übertragungsverfahren. Wie sich die einzelnen Symbole durch unterschiedliche Eigenschaften eines Signals darstellen lassen, betrachten wir in den folgenden Abschnitten.
[question:AA104]
---
Ein einfaches Beispiel dafür, wie unterschiedliche Symbole durch verschiedene Signalzustände dargestellt werden können, ist die bereits aus Klasse E bekannte *Frequenzumtastung* (*Frequency-Shift Keying*, FSK).
Bei FSK wird die Frequenz des ausgesendeten Signals zwischen verschiedenen Werten umgeschaltet. Die Abbildung [ref:a_fsk] zeigt eine binäre FSK mit zwei möglichen Symbolfrequenzen in der Zeitdarstellung. Beispielsweise kann die höhere Frequenz für das Symbol $1$ und die niedrigere Frequenz für das Symbol $0$ stehen. Da zwei verschiedene Symbole zur Verfügung stehen, kann mit jedem Symbol ein Bit übertragen werden.
<margin>
[picture:703:a_fsk:FSK (Frequency-Shift Keying)]
</margin>
Ein Beispiel ist *RTTY*. Hier wird zwischen zwei Symbolfrequenzen umgetastet, beispielsweise zwischen $\qty{14072,43}{\kilo\hertz}$ und $\qty{14072,60}{\kilo\hertz}$. Mit jedem Symbol kann damit ein Bit, also $0$ oder $1$, übertragen werden.
[question:AE405]
FSK ist jedoch nicht auf zwei Symbolfrequenzen beschränkt. Werden beispielsweise vier unterschiedliche Frequenzen verwendet, stehen vier verschiedene Symbole zur Verfügung. Jedem Symbol kann dann eine der vier möglichen Bitkombinationen $00$, $01$, $10$ oder $11$ zugeordnet werden. Dadurch können mit jedem Symbol zwei Bit übertragen werden.
Ein Beispiel dafür ist das Übertragungsverfahren *FT4*. Hier kann zwischen vier Symbolfrequenzen umgetastet werden, beispielsweise $\qty{14081,20}{\kilo\hertz}$, $\qty{14081,40}{\kilo\hertz}$, $\qty{14081,61}{\kilo\hertz}$ und $\qty{14081,83}{\kilo\hertz}$.
[question:AE406]
+28
View File
@@ -53,3 +53,31 @@
---
[question:AF619]
---
### Abbildung des Frequenzbereichs beim I/Q-Verfahren
* Der I/Q-Datenstrom bildet den Frequenzbereich um eine Mittenfrequenz ab
* Beispiel:
* $\qty{435}{\mega\hertz}$-Träger
* Abtastrate von $\num{10}$ Mio. Samples/s $\rightarrow$ Bandbreite = $\qty{10}{\mega\hertz}$ ($\pm\qty{5}{\mega\hertz}$ um die Mittenfrequenz)
* Abgedeckter Bereich: ca. $\qty{430}{\mega\hertz}$ bis $\qty{440}{\mega\hertz}$
---
[question:AF634]
---
### Abhängigkeit der Bandbreite von der Abtastrate
* Die abgedeckte Bandbreite in $\unit{\hertz}$ entspricht der Abtastrate in Samples pro Sekunde
---
[question:AF635]
---
[question:AF636]
+32 -56
View File
@@ -1,50 +1,30 @@
## QAM und I/Q-Verfahren
### Warum I/Q?
* Digitale Modulationstechnik, die zwei Träger derselben Frequenz verwendet
* Einer der Träger ist um $\qty{90}{\degree}$ phasenverschoben
* Erzeugt ein Signal, das sich in Amplitude und Phase ändert
* Symbole können sich durch Amplitude, Frequenz oder Phase unterscheiden.
* Für Amplitude und Phase braucht man eine übersichtliche Darstellung.
* Diese Darstellung heißt *I/Q-Darstellung*.
* Sie zeigt den Signalzustand eines Symbols als Punkt in einer Ebene.
---
### Erzeugung von QAM
--- style="font-size: 0.7em;"
<left>
* Zwei Träger:
* Einer wird mit dem I-Signal (In-Phase) moduliert
* Der andere, um $\qty{90}{\degree}$ verschoben, mit dem Q-Signal (Quadrature)
[include:applet_iq_zeiger]
</left>
<right>
* Beide modulierten Träger werden überlagert
* Das resultierende Signal ändert sich in Amplitude und Phase
### Symbol als Zeiger
* Länge des Zeigers: Amplitude $A$
* Winkel des Zeigers: Phase $\varphi$
* Der Zeiger kann in zwei Anteile zerlegt werden:
$I=A\cdot\cos(\varphi)$
$Q=A\cdot\cos(\varphi-\qty{90}{\degree})=A\cdot\sin(\varphi)$
* Konstellationsdiagramm zeigt den Anfangszustand des Zeigers für jedes Symbol.
</right>
---
[include:applet_iq]
---
[question:AE404]
---
[question:AF632]
---
### I/Q-Verfahren – Senderseite
* Der digitale Datenstrom wird in zwei Teile aufgeteilt: I und Q
* Zwei D/A-Umsetzer wandeln die digitalen I- und Q-Werte in analoge Signale um
* Diese modulieren die beiden phasenverschobenen Träger, die anschließend kombiniert werden
---
### I/Q-Verfahren – Empfängerseite
* Das empfangene Signal wird mit einem $\qty{0}{\degree}$-Träger gemischt, um das I-Signal zu extrahieren
* Gleichzeitig erfolgt eine Mischung mit einem um $\qty{90}{\degree}$ phasenverschobenen Träger, um das Q-Signal zu erhalten
* Beide Signale werden A/D-umgesetzt und bilden so den digitalen I/Q-Datenstrom
---
@@ -52,28 +32,24 @@
---
### Abbildung des Frequenzbereichs
### Konstellationsdiagramm
* Der I/Q-Datenstrom bildet den Frequenzbereich um eine Mittenfrequenz ab
* Beispiel:
* $\qty{435}{\mega\hertz}$-Träger
* Abtastrate von $\num{10}$ Mio. Samples/s $\rightarrow$ Bandbreite = $\qty{10}{\mega\hertz}$ ($\pm\qty{5}{\mega\hertz}$ um die Mittenfrequenz)
* Abgedeckter Bereich: ca. $\qty{430}{\mega\hertz}$ bis $\qty{440}{\mega\hertz}$
[picture:1060:a_konstellationsdiagramm:Konstellationsdiagramm]
---
[question:AF634]
### Konstellationsdiagramm
* Für die Darstellung der Symbole betrachten wir nicht die fortlaufende Drehung des Trägers.
* Stattdessen betrachten wir den Signalzustand, der zu einem Symbol gehört.
* Jeder mögliche Symbolzustand wird als Punkt in der I/Q-Ebene dargestellt.
* Abstand vom Ursprung: Amplitude
* Winkel zur I-Achse: Phasenlage
---
### Abhängigkeit der Bandbreite von der Abtastrate
### Warum brauchen wir das?
* Die abgedeckte Bandbreite in $\unit{\hertz}$ entspricht der Abtastrate in Samples pro Sekunde
---
[question:AF635]
---
[question:AF636]
* Konstellationsdiagramme zeigen auf einen Blick die möglichen Symbole eines digitalen Übertragungsverfahrens.
* Man erkennt, ob sich Symbole durch Amplitude, Phase oder beides unterscheiden.
* In den nächsten Abschnitten verwenden wir diese Darstellung für Mapping, PSK und QAM.
+39 -30
View File
@@ -1,48 +1,57 @@
## Mapping in der digitalen Signalverarbeitung
## Mapping
* Wandelt digitale Daten in spezifische Signalpunkte (Symbole) um
* Entscheidend für Modulationstechniken wie QAM und QPSK
* Ermöglicht die Übertragung der Daten über das Kommunikationssystem
* Bits müssen den möglichen Symbolen zugeordnet werden.
* Diese Zuordnung heißt *Mapping*.
* Der Baustein dafür heißt *Mapper*.
* Er wandelt Bitkombinationen in Symbole um.
[picture:1102:a_mapper:Blockschaltbild eines Mappers]
---
## Schritt 1: Binäre Daten in Symbole umwandeln
## Beispiel: ASK
* Bei QPSK werden jeweils zwei Bits zu einem Symbol zusammengefasst
* Es ergeben sich 4 mögliche Kombinationen: $\num{00}$, $\num{01}$, $\num{10}$, $\num{11}$
* Jede Kombination wird einem bestimmten Signalpunkt zugeordnet
* Bei ASK unterscheiden sich die Symbole durch ihre Amplitude.
* Binäre ASK verwendet zwei Amplituden.
* Beispiel:
* kleine Amplitude → $0$
* große Amplitude → $1$
[picture:700:a_ask:ASK (Amplitude-Shift Keying) im zeitlichen Verlauf]
---
## Schritt 2: Phasenvergabe
* Jedem Symbol wird eine eigene Phase zugewiesen
* Typische Phasen in $\qty{90}{\degree}$-Schritten:
* $\num{00}$ entspricht $\qty{0}{\degree}$
* $\num{01}$ entspricht $\qty{90}{\degree}$
* $\num{10}$ entspricht $\qty{180}{\degree}$
* $\num{11}$ entspricht $\qty{270}{\degree}$
--- style="font-size: smaller;"
## Schritt 3: Mapping auf das Konstellationsdiagramm
## ASK im Konstellationsdiagramm
<left>
[picture:697:a_8qam:I-Q-Diagramm für ein 8QAM-Mapping]
Die Darstellung ist für ein 8QAM-Mapping. QPSK im Beispiel entspricht dem äußeren Kreis.
* Beide Symbole liegen auf der I-Achse.
* Die Phase bleibt gleich.
* Der Abstand vom Ursprung beschreibt die Amplitude.
* Das Mapping ordnet jedem Punkt einen Bitwert zu.
</left>
<right>
* Das Konstellationsdiagramm stellt die Signalpunkte in einem quadratischen Diagramm dar
* Die X-Achse (*I*n-Phase) und die Y-Achse (*Q*uadratur) zeigen die Amplituden der Signalbestandteile
* Für QPSK liegen die vier Signalpunkte an den Enden eines Quadrats
[picture:1128:a_ask_mapping:ASK (Amplitude-Shift Keying) im Konstellationsdiagramm]
</right>
---
## Darstellung der QPSK-Symbole
## 4ASK
* $\num{00}$ bei $\qty{0}{\degree}$: Punkt auf der positiven X-Achse
* $\num{01}$ bei $\qty{90}{\degree}$: Punkt auf der positiven Y-Achse
* $\num{10}$ bei $\qty{180}{\degree}$: Punkt auf der negativen X-Achse
* $\num{11}$ bei $\qty{270}{\degree}$: Punkt auf der negativen Y-Achse
* ASK ist nicht auf zwei Amplituden beschränkt.
* Vier Amplituden ergeben vier Symbole.
* Vier Symbole können zwei Bits pro Symbol übertragen: $00$, $01$, $10$, $11$
* Die klare Trennung der Phasen erleichtert das Auseinanderhalten der Symbole – auch bei Rauschen
[picture:701:a_4_ask:Quaternäre Amplitudenumtastung]
---
## 4ASK im Konstellationsdiagramm
<left>
* Auch bei 4ASK liegen alle Punkte auf der I-Achse.
* Die Punkte unterscheiden sich nur im Abstand vom Ursprung.
* Jedem Punkt ist eine Bitkombination zugeordnet.
</left>
<right>
[picture:1129:a_4_ask_mapping:4ASK im Konstellationsdiagramm]
</right>
-73
View File
@@ -1,73 +0,0 @@
--- style="font-size: 0.7em;"
[picture:701:4ask:Quaternäre Amplitudenumtastung (Quaternary Amplitude-shift Keying)]
* Viele digitale Modulationsverfahren verwenden mehr als zwei Symbole.
* So funktioniert zum Beispiel die 4-Fach-Amplitudenumtastung (4ASK) mit vier unterschiedlichen Amplituden, $\qty{25}{\percent}$, $\qty{50}{\percent}$, $\qty{75}{\percent}$, $\qty{100}{\percent}$ des Maximums.
* So lassen sich zwei Bits zu einem Symbol zusammenfassen und gleichzeitig übertragen.
---
* Dieses Prinzip lässt sich auf die Frequenz- und Phasenumtastung übertragen.
* Eine einfache Phasenumtastung (Binary Phase-Shift Keying, BPSK) verwendet nur zwei verschiedene Phasenlagen und kann daher nur ein Bit gleichzeitig senden.
* Die Quadraturphasenumtastung (Quadrature Phase-Shift Keying, QPSK) hingegen nutzt vier verschiedene Phasenlagen ($\qty{0}{\degree}$, $\qty{90}{\degree}$, $\qty{180}{\degree}$ und $\qty{270}{\degree}$) und überträgt somit zwei Bits in jedem Schritt.
---
[question:AE402]
---
* Da bei Verfahren wie QPSK mehr als ein Bit pro Symbol übertragen wird, müssen wir mit den Einheiten aufpassen.
* Werden nur zwei Symbole verwendet und somit jedes Bit einzeln gesendet, entspricht die Symbolrate in Baud der Datenrate in $\unit{\bit\per\second}$.
* Werden jedoch mehr Symbole verwendet und somit mehrere Bits gleichzeitig übertragen, ist die Datenrate höher als die Symbolrate.
---
* Die Formel $C = R_{ s } \cdot n$ stellt den Zusammenhang dar:
<fragment>
* $C$ → Datenübertragungsrate in $\unit{\bit\per\second}$
* $R_{ s }$ → Symbolrate in $\unit{\baud}$
* $n$ → Symbolgröße in $\unit{\bit\per\text{Symbol}}$
</fragment>
---
[question:AA104]
---
Beispiele:
<fragment>
*RTTY*: Umschaltung zwischen zwei Symbolfrequenzen, sodass pro Symbol ein Bit ($\num{0}$ oder $\num{1}$) übertragen werden kann.
→ Datenrate = Symbolrate
</fragment>
<fragment>
*FT4*: Umschaltung zwischen vier Symbolfrequenzen, so dass pro Symbol zwei Bit ($\num{00}$, $\num{01}$, $\num{10}$ oder $\num{11}$) übertragen werden können.
→ Datenrate = 2 $\cdot$ Symbolrate
</fragment>
---
[question:AE405]
---
#### Lösungsweg
* gegeben: $R_S = \qty{45,45}{\baud}$
* gegeben: $n=\qty{1}{\bit\per\text{Symbol}}$
* gesucht: $C$
<fragment>
$C = R_S \cdot n = \qty{45,45}{\baud} \cdot \qty{1}{\bit\per\text{Symbol}} = \qty{45,45}{\bit\per\second}$
</fragment>
---
[question:AE406]
---
#### Lösungsweg
* gegeben: $R_S = \qty{23,4}{\baud}$
* gegeben: $n=\qty{2}{\bit\per\text{Symbol}}$
* gesucht: $C$
<fragment>
$C = R_S \cdot n = \qty{23,4}{\baud} \cdot \qty{2}{\bit\per\text{Symbol}} = \qty{46,8}{\bit\per\second}$
</fragment>
+154 -27
View File
@@ -1,44 +1,171 @@
* Digitales Modulationsverfahren zur Datenübertragung
* Veränderung der Phase eines Trägersignals zur Repräsentation von Bitwerten
* Weniger anfällig für Amplitudenrauschen $\rightarrow$ ermöglicht höhere Datenraten
## Phasenumtastung (PSK)
---
## Prinzip der Phasenumtastung
* Digitales Modulationsverfahren zur Datenübertragung
* Die Symbole werden durch unterschiedliche Phasenlagen eines Trägers dargestellt
* Amplitude und Frequenz des Trägers bleiben bei idealer PSK gleich
* Beim Wechsel des Symbols kann sich die Phasenlage ändern
--- style="font-size: smaller;"
## PSK in der Zeitdarstellung
<left>
[picture:705:psk:Phasenumtastung (Phase-shift Keying)]
[picture:705:a_psk:Phasenumtastung (Phase-Shift Keying)]
</left>
<right>
<fragment>
*BPSK (Binary Phase Shift Keying)*
* Zwei Phasenwinkel: $\qty{0}{\degree}$ und $\qty{180}{\degree}$
* Jeder Winkel repräsentiert einen Bitwert ($\num{0}$ oder $\num{1}$)
</fragment>
* Die Amplitude bleibt konstant
* Die Information steckt in der *Phasenlage*
* Beim Wechsel zwischen zwei Symbolen kann sich die Phase sprunghaft ändern
* Wird dasselbe Symbol erneut übertragen, bleibt auch die Phasenlage gleich
</right>
---
Höhere Varianten:
--- style="font-size: smaller;"
* *QPSK (Quadrature PSK)*: Vier Phasen ($\qty{0}{\degree}$, $\qty{90}{\degree}$, $\qty{180}{\degree}$, $\qty{270}{\degree}$) – $\qty{2}{\text{Bits pro Symbol}}$
* *8-PSK*: Acht Phasen – $\qty{3}{\text{Bits pro Symbol}}$
## Binäre Phasenumtastung (BPSK)
<left>
[picture:1101:a_psk_mapping:BPSK im Konstellationsdiagramm]
</left>
<right>
* Zwei verschiedene Phasenlagen
* Zwei mögliche Symbole
* Damit kann $\num{1}$ Bit pro Symbol übertragen werden
* Beispiel: $\qty{0}{\degree}$ → $0$ und $\qty{180}{\degree}$ → $1$
* Die beiden Signalpunkte liegen sich im Konstellationsdiagramm gegenüber
</right>
---
<note>
Die einfachste Form der Phasenumtastung ist BPSK. Die beiden möglichen Symbole besitzen die gleiche Amplitude, ihre Phasen unterscheiden sich aber um 180 Grad.
## PSK-Signale in der Zeitdarstellung
Randbemerkung: Mathematisch lässt sich BPSK auch dadurch erzeugen, dass der Träger abhängig vom Bitwert mit +1 oder -1 multipliziert wird. Die Multiplikation mit -1 entspricht einer Phasenverschiebung um 180 Grad:
* Die Amplitude bleibt konstant; nur die Phase ändert sich
* *BPSK*: Abrupter Sprung von positiver zu negativer Amplitude bei Bitwechsel
* *QPSK*: Mehrere Phasenwinkel mit kleineren Übergängen, wodurch die Kurve geglättet erscheint
$-\sin(\omega t)=\sin(\omega t+\qty{180}{\degree})$
---
## Erkennung von PSK-Signalen
* *Im Zeitbereich*: Deutliche, abrupte Phasenwechsel
* *Im Phasendiagramm (Constellation Diagram)*: Punkte auf einem Kreis, die die stabilen Phasenlagen anzeigen
* PSK bietet eine robuste digitale Kommunikation mit hoher Datenrate und guter Rauschfestigkeit
Die Wahl von 0 Grad und 180 Grad ist dabei nicht zwingend. Ebenso wären beispielsweise 90 Grad und 270 Grad möglich.
</note>
---
[question:AE401]
---
## Mehr Phasenlagen – mehr Symbole
* Mit mehr Phasenlagen können mehr unterschiedliche Symbole dargestellt werden
* Dadurch lassen sich mehrere Bits zu einem Symbol zusammenfassen
<fragment>
* *BPSK*: $\num{2}$ Symbole → $\num{1}$ Bit pro Symbol
* *QPSK*: $\num{4}$ Symbole → $\num{2}$ Bit pro Symbol
* *8-PSK*: $\num{8}$ Symbole → $\num{3}$ Bit pro Symbol
</fragment>
---
[question:AE402]
---
## Quadraturphasenumtastung (QPSK)
* QPSK verwendet vier verschiedene Phasenlagen
* Damit stehen vier verschiedene Symbole zur Verfügung
* Jeweils zwei Bits werden zu einem Symbol zusammengefasst: $00$, $01$, $10$, $11$
* Mit jedem QPSK-Symbol werden somit $\num{2}$ Bits übertragen
--- style="font-size: smaller;"
## QPSK im Konstellationsdiagramm
<left>
[picture:1059:a_qpsk:I/Q-Diagramm für ein QPSK-Mapping]
</left>
<right>
In diesem Beispiel gilt:
* $11$ → $\qty{45}{\degree}$
* $01$ → $\qty{135}{\degree}$
* $00$ → $\qty{225}{\degree}$
* $10$ → $\qty{315}{\degree}$
<fragment>
* Alle Signalpunkte besitzen die gleiche Amplitude
* Die Phasenlagen sind jeweils um $\qty{90}{\degree}$ gegeneinander versetzt
* Die vier Punkte liegen auf einem Kreis
</fragment>
</right>
<note>
Die Zuordnung der Bitkombinationen zu den einzelnen Phasenlagen ist nicht grundsätzlich festgelegt. Sender und Empfänger müssen jedoch dasselbe Mapping verwenden.
Das hier verwendete Mapping entspricht auch der Darstellung im Lehrtext und im folgenden Applet.
</note>
--- style="font-size: smaller;"
## Gray-Code bei QPSK
<left>
[picture:1059:a_qpsk_gray:I/Q-Diagramm für ein QPSK-Mapping]
</left>
<right>
* Benachbarte Symbole unterscheiden sich jeweils nur in *einem Bit*
* Eine solche Zuordnung nennt man *Gray-Code*
<fragment>
Beispiel:
$11 \leftrightarrow 01 \leftrightarrow 00 \leftrightarrow 10$
</fragment>
<fragment>
Wird durch Rauschen versehentlich ein benachbartes Symbol erkannt, entsteht dadurch häufig nur ein einzelner Bitfehler.
</fragment>
</right>
<note>
Das Mapping ist so gewählt, dass sich benachbarte Punkte im Konstellationsdiagramm nur in einem Bit unterscheiden.
Beim Übergang von 11 zu 01 ändert sich beispielsweise nur das erste Bit. Gleiches gilt für die übrigen benachbarten Signalpunkte, einschließlich 10 und 11.
</note>
--- style="font-size: smaller;"
<left>
[include:applet_qpsk]
</left>
<right>
### QPSK bei Rauschen
* Rauschen verändert Amplitude und Phase des empfangenen Signals
* Empfangswerte streuen um die idealen QPSK-Symbole
* Der Empfänger entscheidet sich für das nächstgelegene Symbol
* Wird eine Entscheidungsgrenze überschritten, entsteht ein Symbolfehler
</right>
<note>
Das Applet zeigt nicht nur die idealen QPSK-Symbole, sondern auch die Situation am Empfänger.
Die Kreuze markieren die vier idealen Signalpunkte. Die kleinen farbigen Punkte stellen verrauschte Empfangswerte dar. Durch Rauschen und andere Störungen ändern sich sowohl die Amplitude als auch die Phase des empfangenen Signals.
Die farbig hinterlegten Bereiche sind die Entscheidungsbereiche des Empfängers. Der Empfänger ordnet einen Empfangswert dem nächstgelegenen idealen Symbol zu.
Solange ein verrauschter Punkt im Entscheidungsbereich des ursprünglich gesendeten Symbols liegt, wird das Symbol richtig erkannt. Überschreitet der Punkt durch starkes Rauschen eine Entscheidungsgrenze, wird stattdessen ein anderes Symbol erkannt.
Mit „Erneut übertragen“ wird derselbe Bitstrom nochmals mit neuem Rauschen übertragen. Dadurch kann man gut erkennen, dass trotz gleicher gesendeter Symbole jedes Mal etwas andere Empfangswerte entstehen.
Mit zunehmendem Rauschen steigt die Wahrscheinlichkeit für Symbol- und damit Bitfehler. Durch geeignete Kanalkodierung können viele solcher Fehler erkannt und korrigiert werden.
</note>
---
## ASK und PSK im Konstellationsdiagramm
* Bei *ASK* unterscheiden sich die Symbole hauptsächlich durch ihre Amplitude
* unterschiedlicher Abstand vom Ursprung
* gleiche Phasenlage
* Bei *PSK* unterscheiden sich die Symbole durch ihre Phasenlage
* gleicher Abstand vom Ursprung
* unterschiedlicher Winkel
* Bei PSK liegen die Signalpunkte daher bei gleicher Amplitude auf einem Kreis.
+245 -5
View File
@@ -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>
+80
View File
@@ -0,0 +1,80 @@
---
### Symbol
* Ein *Symbol* ist ein unterscheidbarer Signalzustand.
* Symbole können sich z. B. durch Amplitude, Frequenz oder Phase unterscheiden.
* Mehr mögliche Symbole ermöglichen mehr Bits pro Symbol.
---
### Symbolrate
* Die *Symbolrate* gibt die Anzahl der übertragenen Symbole pro Sekunde an, die Einheit der Symbolrate ist *Baud*
* Datenrate und Symbolrate sind daher nicht immer identisch.
* Werden nur zwei Symbole verwendet und somit jedes Bit einzeln gesendet, entspricht die Symbolrate in Baud der Datenrate in $\unit{\bit\per\second}$.
* Werden jedoch mehr Symbole verwendet und somit mehrere Bits gleichzeitig übertragen, ist die Datenrate höher als die Symbolrate.
---
**Beispiele**
* 2 Symbole → 1 Bit/Symbol
* 4 Symbole → 2 Bit/Symbol
* 8 Symbole → 3 Bit/Symbol
---
* Die Formel $R_\mathrm{D} = R_\mathrm{S} \cdot N$ stellt den Zusammenhang dar:
<fragment>
* $R_\mathrm{D}$ → Datenübertragungsrate in $\unit{\bit\per\second}$
* $R_\mathrm{S}$ → Symbolrate in $\unit{\baud}$
* $N$ → Symbolgröße in $\unit{\bit\per\text{Symbol}}$
</fragment>
---
[question:AA104]
---
Beispiele:
<fragment>
*RTTY*: Umschaltung zwischen zwei Symbolfrequenzen, sodass pro Symbol ein Bit ($\num{0}$ oder $\num{1}$) übertragen werden kann.
→ Datenrate = Symbolrate
</fragment>
<fragment>
*FT4*: Umschaltung zwischen vier Symbolfrequenzen, so dass pro Symbol zwei Bit ($\num{00}$, $\num{01}$, $\num{10}$ oder $\num{11}$) übertragen werden können.
→ Datenrate = 2 $\cdot$ Symbolrate
</fragment>
---
[question:AE405]
---
#### Lösungsweg
* gegeben: $R_S = \qty{45,45}{\baud}$
* gegeben: $N=\qty{1}{\bit\per\text{Symbol}}$
* gesucht: $R_\mathrm{D}$
<fragment>
$R_\mathrm{D} = R_\mathrm{S} \cdot N = \qty{45,45}{\baud} \cdot \qty{1}{\bit\per\text{Symbol}} = \qty{45,45}{\bit\per\second}$
</fragment>
---
[question:AE406]
---
#### Lösungsweg
* gegeben: $R_S = \qty{23,4}{\baud}$
* gegeben: $N=\qty{2}{\bit\per\text{Symbol}}$
* gesucht: $R_\mathrm{D}$
<fragment>
$R_\mathrm{D} = R_\mathrm{S} \cdot N = \qty{23,4}{\baud} \cdot \qty{2}{\bit\per\text{Symbol}} = \qty{46,8}{\bit\per\second}$
</fragment>
+9
View File
@@ -0,0 +1,9 @@
Pro Symbol wird genau ein Bit übertragen. Damit entspricht die Datenrate direkt der Symbolrate:
$R_\mathrm{Daten} = R_\mathrm{Symbol} \cdot 1$
Mit einer Symbolrate von $\qty{45,45}{\baud}$ ergibt sich somit:
$R_\mathrm{Daten} = \qty{45,45}{\bit\per\second}$
Die Datenrate beträgt also $\qty{45,45}{\bit\per\second}$.
+9
View File
@@ -0,0 +1,9 @@
Pro Symbol werden zwei Bits übertragen. Die Datenrate ergibt sich daher aus der Symbolrate multipliziert mit der Anzahl der Bits pro Symbol:
$R_\mathrm{Daten} = R_\mathrm{Symbol} \cdot 2$
Mit einer Symbolrate von $\qty{23,4}{\baud}$ ergibt sich:
$R_\mathrm{Daten} = \qty{23,4}{\baud} \cdot 2 = \qty{46,8}{\bit\per\second}$
Die Datenrate beträgt also $\qty{46,8}{\bit\per\second}$.
+44 -44
View File
@@ -713,17 +713,45 @@
},
{
"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": [
{
"title": "Phasenumtastung (PSK)",
"title": "Symbole und Symbolrate",
"ident": "symbole_symbolrate",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "I/Q-Darstellung und Konstellationsdiagramm",
"ident": "iq_verfahren",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Mapping",
"ident": "mapping",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Phasenumtastung: PSK und QPSK",
"ident": "psk",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Quadraturamplitudenmodulation (QAM)",
"ident": "qam",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Symbolumschaltung und Bandbreite",
"ident": "symbolumschaltung_bandbreite",
@@ -731,27 +759,6 @@
"class": "A",
"video_url": null
},
{
"title": "Mehrwertige Verfahren",
"ident": "mehrwertige_verfahren",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Quadraturamplitudenmodulation (QAM)",
"ident": "qam",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Orthogonales Frequenzmultiplexverfahren (OFDM)",
"ident": "ofdm",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Shannon-Hartley-Gesetz",
"ident": "shannon_hartley_gesetzt",
@@ -787,13 +794,6 @@
"class": "A",
"video_url": null
},
{
"title": "Mapping",
"ident": "mapping",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Sende- und Empfangsketten",
"ident": "sende_empfangsketten",
@@ -801,12 +801,26 @@
"class": "A",
"video_url": null
},
{
"title": "Orthogonales Frequenzmultiplexverfahren (OFDM)",
"ident": "ofdm",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Synchronisation",
"ident": "synchronisation",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Polarmodulation",
"ident": "polarmodulation",
"status": "alpha",
"class": "A",
"video_url": null
}
]
},
@@ -893,20 +907,6 @@
"class": "A",
"video_url": null
},
{
"title": "I/Q-Verfahren",
"ident": "iq_verfahren",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Polarmodulation",
"ident": "polarmodulation",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Latenz",
"ident": "latenz",
+7 -7
View File
@@ -593,6 +593,13 @@
"class": "E",
"video_url": null
},
{
"title": "Datenübertragungsrate",
"ident": "datenuebertragungsdrate",
"status": "prod",
"class": "E",
"video_url": null
},
{
"title": "Amplituden- und Frequenzumtastung (ASK, FSK)",
"ident": "ask_fsk_afsk",
@@ -607,13 +614,6 @@
"class": "E",
"video_url": null
},
{
"title": "Datenübertragungsrate",
"ident": "datenuebertragungsdrate",
"status": "prod",
"class": "E",
"video_url": null
},
{
"title": "Vielfachzugriff",
"ident": "vielfachzugriff",
+50 -50
View File
@@ -1230,6 +1230,27 @@
"class": "E",
"video_url": null
},
{
"title": "Datenübertragungsrate",
"ident": "datenuebertragungsdrate",
"status": "prod",
"class": "E",
"video_url": null
},
{
"title": "Symbole und Symbolrate",
"ident": "symbole_symbolrate",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "I/Q-Darstellung und Konstellationsdiagramm",
"ident": "iq_verfahren",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Amplituden- und Frequenzumtastung (ASK, FSK)",
"ident": "ask_fsk_afsk",
@@ -1238,12 +1259,26 @@
"video_url": null
},
{
"title": "Phasenumtastung (PSK)",
"title": "Mapping",
"ident": "mapping",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Phasenumtastung: PSK und QPSK",
"ident": "psk",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Quadraturamplitudenmodulation (QAM)",
"ident": "qam",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Symbolumschaltung und Bandbreite",
"ident": "symbolumschaltung_bandbreite",
@@ -1251,27 +1286,6 @@
"class": "A",
"video_url": null
},
{
"title": "Mehrwertige Verfahren",
"ident": "mehrwertige_verfahren",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Quadraturamplitudenmodulation (QAM)",
"ident": "qam",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Orthogonales Frequenzmultiplexverfahren (OFDM)",
"ident": "ofdm",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "AFSK",
"ident": "afsk",
@@ -1279,13 +1293,6 @@
"class": "E",
"video_url": null
},
{
"title": "Datenübertragungsrate",
"ident": "datenuebertragungsdrate",
"status": "prod",
"class": "E",
"video_url": null
},
{
"title": "Shannon-Hartley-Gesetz",
"ident": "shannon_hartley_gesetzt",
@@ -1321,13 +1328,6 @@
"class": "A",
"video_url": null
},
{
"title": "Mapping",
"ident": "mapping",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Sende- und Empfangsketten",
"ident": "sende_empfangsketten",
@@ -1342,12 +1342,26 @@
"class": "E",
"video_url": null
},
{
"title": "Orthogonales Frequenzmultiplexverfahren (OFDM)",
"ident": "ofdm",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Synchronisation",
"ident": "synchronisation",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Polarmodulation",
"ident": "polarmodulation",
"status": "alpha",
"class": "A",
"video_url": null
}
]
},
@@ -1441,20 +1455,6 @@
"class": "A",
"video_url": null
},
{
"title": "I/Q-Verfahren",
"ident": "iq_verfahren",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Polarmodulation",
"ident": "polarmodulation",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Latenz",
"ident": "latenz",
+7 -7
View File
@@ -1241,6 +1241,13 @@
"class": "E",
"video_url": null
},
{
"title": "Datenübertragungsrate",
"ident": "datenuebertragungsdrate",
"status": "prod",
"class": "E",
"video_url": null
},
{
"title": "Amplituden- und Frequenzumtastung (ASK, FSK)",
"ident": "ask_fsk_afsk",
@@ -1255,13 +1262,6 @@
"class": "E",
"video_url": null
},
{
"title": "Datenübertragungsrate",
"ident": "datenuebertragungsdrate",
"status": "prod",
"class": "E",
"video_url": null
},
{
"title": "Vielfachzugriff",
"ident": "vielfachzugriff",
+50 -50
View File
@@ -1871,6 +1871,27 @@
"class": "E",
"video_url": null
},
{
"title": "Datenübertragungsrate",
"ident": "datenuebertragungsdrate",
"status": "prod",
"class": "E",
"video_url": null
},
{
"title": "Symbole und Symbolrate",
"ident": "symbole_symbolrate",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "I/Q-Darstellung und Konstellationsdiagramm",
"ident": "iq_verfahren",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Amplituden- und Frequenzumtastung (ASK, FSK)",
"ident": "ask_fsk_afsk",
@@ -1879,12 +1900,26 @@
"video_url": null
},
{
"title": "Phasenumtastung (PSK)",
"title": "Mapping",
"ident": "mapping",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Phasenumtastung: PSK und QPSK",
"ident": "psk",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Quadraturamplitudenmodulation (QAM)",
"ident": "qam",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Symbolumschaltung und Bandbreite",
"ident": "symbolumschaltung_bandbreite",
@@ -1892,27 +1927,6 @@
"class": "A",
"video_url": null
},
{
"title": "Mehrwertige Verfahren",
"ident": "mehrwertige_verfahren",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Quadraturamplitudenmodulation (QAM)",
"ident": "qam",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Orthogonales Frequenzmultiplexverfahren (OFDM)",
"ident": "ofdm",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "AFSK",
"ident": "afsk",
@@ -1920,13 +1934,6 @@
"class": "E",
"video_url": null
},
{
"title": "Datenübertragungsrate",
"ident": "datenuebertragungsdrate",
"status": "prod",
"class": "E",
"video_url": null
},
{
"title": "Shannon-Hartley-Gesetz",
"ident": "shannon_hartley_gesetzt",
@@ -1962,13 +1969,6 @@
"class": "A",
"video_url": null
},
{
"title": "Mapping",
"ident": "mapping",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Sende- und Empfangsketten",
"ident": "sende_empfangsketten",
@@ -1983,12 +1983,26 @@
"class": "E",
"video_url": null
},
{
"title": "Orthogonales Frequenzmultiplexverfahren (OFDM)",
"ident": "ofdm",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Synchronisation",
"ident": "synchronisation",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Polarmodulation",
"ident": "polarmodulation",
"status": "alpha",
"class": "A",
"video_url": null
}
]
},
@@ -2082,20 +2096,6 @@
"class": "A",
"video_url": null
},
{
"title": "I/Q-Verfahren",
"ident": "iq_verfahren",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Polarmodulation",
"ident": "polarmodulation",
"status": "alpha",
"class": "A",
"video_url": null
},
{
"title": "Latenz",
"ident": "latenz",