Compare commits

..

2 Commits

Author SHA1 Message Date
122273e102 Tangle matlab files without comments 2025-03-28 16:40:53 +01:00
a5ab404d2b Add correct prefix 2025-02-04 15:30:07 +01:00
13 changed files with 792 additions and 1380 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -1,106 +1,116 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="127.06" height="154.578" viewBox="0 0 127.06 154.578">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="124.915" height="154.578" viewBox="0 0 124.915 154.578">
<defs>
<g>
<g id="glyph-0-0">
<path d="M 8.390625 -1.421875 C 8.390625 -1.515625 8.296875 -1.515625 8.265625 -1.515625 C 8.171875 -1.515625 8.171875 -1.484375 8.125 -1.328125 C 7.96875 -0.8125 7.65625 -0.109375 7.109375 -0.109375 C 6.9375 -0.109375 6.875 -0.203125 6.875 -0.4375 C 6.875 -0.6875 6.96875 -0.921875 7.046875 -1.140625 C 7.234375 -1.65625 7.65625 -2.75 7.65625 -3.3125 C 7.65625 -3.953125 7.265625 -4.375 6.515625 -4.375 C 5.78125 -4.375 5.265625 -3.9375 4.90625 -3.40625 C 4.890625 -3.546875 4.859375 -3.875 4.59375 -4.109375 C 4.34375 -4.328125 4.03125 -4.375 3.78125 -4.375 C 2.890625 -4.375 2.40625 -3.734375 2.234375 -3.515625 C 2.1875 -4.078125 1.765625 -4.375 1.328125 -4.375 C 0.875 -4.375 0.6875 -3.984375 0.59375 -3.8125 C 0.421875 -3.46875 0.28125 -2.875 0.28125 -2.84375 C 0.28125 -2.75 0.40625 -2.75 0.40625 -2.75 C 0.5 -2.75 0.515625 -2.765625 0.578125 -2.984375 C 0.734375 -3.671875 0.9375 -4.15625 1.296875 -4.15625 C 1.453125 -4.15625 1.609375 -4.078125 1.609375 -3.703125 C 1.609375 -3.484375 1.578125 -3.375 1.4375 -2.875 L 0.875 -0.578125 C 0.84375 -0.4375 0.78125 -0.203125 0.78125 -0.15625 C 0.78125 0.015625 0.921875 0.109375 1.0625 0.109375 C 1.1875 0.109375 1.359375 0.03125 1.4375 -0.171875 C 1.4375 -0.1875 1.5625 -0.65625 1.625 -0.90625 L 1.84375 -1.796875 C 1.90625 -2 1.953125 -2.21875 2 -2.453125 L 2.140625 -2.953125 C 2.28125 -3.25 2.8125 -4.15625 3.75 -4.15625 C 4.1875 -4.15625 4.28125 -3.78125 4.28125 -3.46875 C 4.28125 -3.21875 4.21875 -2.9375 4.140625 -2.640625 L 3.859375 -1.5 C 3.765625 -1.125 3.75 -1.0625 3.65625 -0.734375 C 3.625 -0.546875 3.53125 -0.203125 3.53125 -0.15625 C 3.53125 0.015625 3.671875 0.109375 3.8125 0.109375 C 4.125 0.109375 4.1875 -0.140625 4.265625 -0.453125 L 4.859375 -2.84375 C 4.890625 -2.96875 5.40625 -4.15625 6.484375 -4.15625 C 6.90625 -4.15625 7.015625 -3.8125 7.015625 -3.46875 C 7.015625 -2.890625 6.609375 -1.765625 6.40625 -1.25 C 6.3125 -1.015625 6.28125 -0.90625 6.28125 -0.703125 C 6.28125 -0.234375 6.625 0.109375 7.09375 0.109375 C 8.015625 0.109375 8.390625 -1.328125 8.390625 -1.421875 Z M 8.390625 -1.421875 "/>
<path d="M 8.421875 -1.421875 C 8.421875 -1.515625 8.34375 -1.515625 8.3125 -1.515625 C 8.203125 -1.515625 8.203125 -1.484375 8.15625 -1.34375 C 8.015625 -0.8125 7.6875 -0.109375 7.140625 -0.109375 C 6.96875 -0.109375 6.90625 -0.203125 6.90625 -0.4375 C 6.90625 -0.6875 7 -0.921875 7.078125 -1.140625 C 7.28125 -1.65625 7.6875 -2.765625 7.6875 -3.328125 C 7.6875 -3.96875 7.296875 -4.390625 6.546875 -4.390625 C 5.796875 -4.390625 5.296875 -3.953125 4.921875 -3.421875 C 4.921875 -3.5625 4.890625 -3.890625 4.609375 -4.140625 C 4.359375 -4.34375 4.046875 -4.390625 3.796875 -4.390625 C 2.90625 -4.390625 2.421875 -3.75 2.25 -3.53125 C 2.203125 -4.09375 1.78125 -4.390625 1.328125 -4.390625 C 0.875 -4.390625 0.6875 -4 0.59375 -3.828125 C 0.421875 -3.484375 0.28125 -2.890625 0.28125 -2.859375 C 0.28125 -2.765625 0.40625 -2.765625 0.40625 -2.765625 C 0.5 -2.765625 0.515625 -2.765625 0.578125 -2.984375 C 0.75 -3.703125 0.9375 -4.171875 1.296875 -4.171875 C 1.453125 -4.171875 1.609375 -4.09375 1.609375 -3.71875 C 1.609375 -3.515625 1.578125 -3.40625 1.453125 -2.875 L 0.875 -0.59375 C 0.84375 -0.4375 0.78125 -0.203125 0.78125 -0.15625 C 0.78125 0.015625 0.921875 0.109375 1.078125 0.109375 C 1.1875 0.109375 1.375 0.03125 1.4375 -0.171875 C 1.453125 -0.1875 1.5625 -0.65625 1.625 -0.90625 L 1.84375 -1.796875 C 1.90625 -2.015625 1.96875 -2.234375 2.015625 -2.46875 L 2.140625 -2.96875 C 2.296875 -3.265625 2.828125 -4.171875 3.765625 -4.171875 C 4.21875 -4.171875 4.296875 -3.8125 4.296875 -3.484375 C 4.296875 -3.234375 4.234375 -2.953125 4.15625 -2.65625 L 3.875 -1.5 C 3.78125 -1.140625 3.765625 -1.078125 3.671875 -0.75 C 3.640625 -0.546875 3.546875 -0.203125 3.546875 -0.15625 C 3.546875 0.015625 3.6875 0.109375 3.828125 0.109375 C 4.140625 0.109375 4.203125 -0.140625 4.28125 -0.453125 L 4.875 -2.859375 C 4.90625 -2.984375 5.4375 -4.171875 6.515625 -4.171875 C 6.953125 -4.171875 7.0625 -3.828125 7.0625 -3.484375 C 7.0625 -2.90625 6.640625 -1.78125 6.4375 -1.25 C 6.34375 -1.015625 6.3125 -0.90625 6.3125 -0.703125 C 6.3125 -0.234375 6.65625 0.109375 7.125 0.109375 C 8.0625 0.109375 8.421875 -1.34375 8.421875 -1.421875 Z M 8.421875 -1.421875 "/>
</g>
<g id="glyph-0-1">
<path d="M 5.453125 -6.296875 C 5.453125 -6.75 5 -6.96875 4.59375 -6.96875 C 4.265625 -6.96875 3.640625 -6.796875 3.34375 -5.8125 C 3.28125 -5.609375 3.25 -5.515625 3.015625 -4.265625 L 2.328125 -4.265625 C 2.140625 -4.265625 2.03125 -4.265625 2.03125 -4.078125 C 2.03125 -3.953125 2.125 -3.953125 2.3125 -3.953125 L 2.96875 -3.953125 L 2.21875 -0.046875 C 2.046875 0.90625 1.875 1.8125 1.359375 1.8125 C 1.328125 1.8125 1.078125 1.8125 0.890625 1.625 C 1.34375 1.609375 1.4375 1.25 1.4375 1.09375 C 1.4375 0.875 1.25 0.75 1.0625 0.75 C 0.8125 0.75 0.53125 0.96875 0.53125 1.34375 C 0.53125 1.796875 0.953125 2.03125 1.359375 2.03125 C 1.90625 2.03125 2.296875 1.4375 2.484375 1.0625 C 2.796875 0.4375 3.03125 -0.75 3.03125 -0.828125 L 3.625 -3.953125 L 4.484375 -3.953125 C 4.671875 -3.953125 4.78125 -3.953125 4.78125 -4.15625 C 4.78125 -4.265625 4.671875 -4.265625 4.515625 -4.265625 L 3.6875 -4.265625 C 3.796875 -4.84375 3.78125 -4.8125 3.890625 -5.390625 C 3.9375 -5.59375 4.078125 -6.296875 4.140625 -6.421875 C 4.21875 -6.609375 4.390625 -6.75 4.59375 -6.75 C 4.640625 -6.75 4.890625 -6.75 5.078125 -6.578125 C 4.65625 -6.53125 4.546875 -6.1875 4.546875 -6.046875 C 4.546875 -5.8125 4.734375 -5.703125 4.921875 -5.703125 C 5.171875 -5.703125 5.453125 -5.921875 5.453125 -6.296875 Z M 5.453125 -6.296875 "/>
<path d="M 5.484375 -6.3125 C 5.484375 -6.78125 5.03125 -7 4.625 -7 C 4.28125 -7 3.65625 -6.828125 3.359375 -5.84375 C 3.296875 -5.640625 3.265625 -5.53125 3.03125 -4.28125 L 2.34375 -4.28125 C 2.15625 -4.28125 2.046875 -4.28125 2.046875 -4.09375 C 2.046875 -3.96875 2.140625 -3.96875 2.328125 -3.96875 L 2.984375 -3.96875 L 2.234375 -0.046875 C 2.0625 0.921875 1.890625 1.8125 1.375 1.8125 C 1.328125 1.8125 1.078125 1.8125 0.890625 1.640625 C 1.34375 1.609375 1.4375 1.25 1.4375 1.109375 C 1.4375 0.875 1.265625 0.75 1.078125 0.75 C 0.8125 0.75 0.53125 0.96875 0.53125 1.34375 C 0.53125 1.796875 0.96875 2.03125 1.375 2.03125 C 1.921875 2.03125 2.3125 1.453125 2.5 1.078125 C 2.8125 0.453125 3.046875 -0.75 3.046875 -0.828125 L 3.640625 -3.96875 L 4.5 -3.96875 C 4.703125 -3.96875 4.796875 -3.96875 4.796875 -4.171875 C 4.796875 -4.28125 4.703125 -4.28125 4.53125 -4.28125 L 3.703125 -4.28125 C 3.8125 -4.859375 3.8125 -4.84375 3.921875 -5.421875 C 3.953125 -5.625 4.09375 -6.328125 4.15625 -6.453125 C 4.25 -6.640625 4.40625 -6.78125 4.625 -6.78125 C 4.65625 -6.78125 4.921875 -6.78125 5.109375 -6.609375 C 4.671875 -6.5625 4.578125 -6.21875 4.578125 -6.078125 C 4.578125 -5.84375 4.75 -5.71875 4.9375 -5.71875 C 5.203125 -5.71875 5.484375 -5.9375 5.484375 -6.3125 Z M 5.484375 -6.3125 "/>
</g>
<g id="glyph-0-2">
<path d="M 4.84375 -1.421875 C 4.84375 -1.515625 4.75 -1.515625 4.734375 -1.515625 C 4.625 -1.515625 4.625 -1.46875 4.59375 -1.328125 C 4.390625 -0.609375 4.15625 -0.109375 3.734375 -0.109375 C 3.546875 -0.109375 3.40625 -0.21875 3.40625 -0.578125 C 3.40625 -0.734375 3.453125 -0.96875 3.484375 -1.125 C 3.53125 -1.296875 3.53125 -1.328125 3.53125 -1.4375 C 3.53125 -2.078125 2.90625 -2.359375 2.0625 -2.46875 C 2.375 -2.65625 2.6875 -2.96875 2.921875 -3.203125 C 3.390625 -3.734375 3.84375 -4.15625 4.328125 -4.15625 C 4.390625 -4.15625 4.40625 -4.15625 4.421875 -4.140625 C 4.546875 -4.125 4.546875 -4.125 4.625 -4.0625 C 4.65625 -4.0625 4.65625 -4.046875 4.671875 -4.03125 C 4.1875 -4 4.109375 -3.609375 4.109375 -3.484375 C 4.109375 -3.328125 4.21875 -3.140625 4.484375 -3.140625 C 4.734375 -3.140625 5.03125 -3.359375 5.03125 -3.75 C 5.03125 -4.046875 4.796875 -4.375 4.359375 -4.375 C 4.078125 -4.375 3.625 -4.296875 2.90625 -3.5 C 2.578125 -3.125 2.1875 -2.734375 1.8125 -2.578125 L 2.84375 -6.75 C 2.84375 -6.75 2.84375 -6.859375 2.703125 -6.859375 C 2.484375 -6.859375 1.765625 -6.78125 1.5 -6.765625 C 1.421875 -6.75 1.3125 -6.75 1.3125 -6.5625 C 1.3125 -6.453125 1.40625 -6.453125 1.546875 -6.453125 C 2.03125 -6.453125 2.046875 -6.375 2.046875 -6.28125 L 2.015625 -6.078125 L 0.578125 -0.390625 C 0.546875 -0.25 0.546875 -0.234375 0.546875 -0.171875 C 0.546875 0.0625 0.734375 0.109375 0.828125 0.109375 C 0.953125 0.109375 1.109375 0.015625 1.171875 -0.09375 C 1.21875 -0.1875 1.65625 -2.015625 1.71875 -2.265625 C 2.0625 -2.234375 2.875 -2.078125 2.875 -1.421875 C 2.875 -1.359375 2.875 -1.3125 2.84375 -1.21875 C 2.8125 -1.09375 2.796875 -0.984375 2.796875 -0.875 C 2.796875 -0.28125 3.1875 0.109375 3.703125 0.109375 C 4 0.109375 4.265625 -0.046875 4.484375 -0.421875 C 4.734375 -0.84375 4.84375 -1.421875 4.84375 -1.421875 Z M 4.84375 -1.421875 "/>
<path d="M 4.875 -1.421875 C 4.875 -1.515625 4.78125 -1.515625 4.75 -1.515625 C 4.65625 -1.515625 4.640625 -1.484375 4.609375 -1.34375 C 4.40625 -0.609375 4.1875 -0.109375 3.75 -0.109375 C 3.5625 -0.109375 3.421875 -0.21875 3.421875 -0.578125 C 3.421875 -0.75 3.46875 -0.96875 3.515625 -1.140625 C 3.546875 -1.296875 3.546875 -1.34375 3.546875 -1.4375 C 3.546875 -2.09375 2.921875 -2.375 2.078125 -2.484375 C 2.390625 -2.65625 2.703125 -2.984375 2.9375 -3.21875 C 3.40625 -3.75 3.859375 -4.171875 4.359375 -4.171875 C 4.40625 -4.171875 4.421875 -4.171875 4.4375 -4.15625 C 4.5625 -4.140625 4.578125 -4.140625 4.65625 -4.078125 C 4.671875 -4.078125 4.671875 -4.0625 4.6875 -4.046875 C 4.21875 -4.015625 4.125 -3.625 4.125 -3.515625 C 4.125 -3.34375 4.234375 -3.15625 4.5 -3.15625 C 4.765625 -3.15625 5.046875 -3.375 5.046875 -3.765625 C 5.046875 -4.0625 4.8125 -4.390625 4.375 -4.390625 C 4.09375 -4.390625 3.640625 -4.3125 2.921875 -3.515625 C 2.578125 -3.140625 2.203125 -2.75 1.8125 -2.59375 L 2.859375 -6.78125 C 2.859375 -6.78125 2.859375 -6.890625 2.71875 -6.890625 C 2.5 -6.890625 1.765625 -6.8125 1.515625 -6.796875 C 1.4375 -6.78125 1.328125 -6.78125 1.328125 -6.59375 C 1.328125 -6.484375 1.40625 -6.484375 1.5625 -6.484375 C 2.03125 -6.484375 2.0625 -6.40625 2.0625 -6.3125 L 2.03125 -6.109375 L 0.59375 -0.390625 C 0.546875 -0.25 0.546875 -0.234375 0.546875 -0.171875 C 0.546875 0.0625 0.75 0.109375 0.828125 0.109375 C 0.96875 0.109375 1.109375 0.015625 1.171875 -0.09375 C 1.21875 -0.1875 1.671875 -2.03125 1.734375 -2.28125 C 2.0625 -2.25 2.875 -2.09375 2.875 -1.4375 C 2.875 -1.359375 2.875 -1.328125 2.859375 -1.21875 C 2.828125 -1.109375 2.8125 -0.984375 2.8125 -0.875 C 2.8125 -0.28125 3.203125 0.109375 3.734375 0.109375 C 4.03125 0.109375 4.296875 -0.046875 4.515625 -0.421875 C 4.765625 -0.859375 4.875 -1.421875 4.875 -1.421875 Z M 4.875 -1.421875 "/>
</g>
<g id="glyph-0-3">
<path d="M 3.5625 0.65625 L 4.65625 -3.734375 C 4.671875 -3.78125 4.6875 -3.84375 4.6875 -3.90625 C 4.6875 -4.078125 4.5625 -4.171875 4.40625 -4.171875 C 4.296875 -4.171875 4.03125 -4.109375 4 -3.75 C 3.8125 -4.109375 3.46875 -4.375 3.078125 -4.375 C 1.953125 -4.375 0.71875 -2.984375 0.71875 -1.5625 C 0.71875 -0.578125 1.328125 0 2.03125 0 C 2.625 0 3.078125 -0.46875 3.1875 -0.578125 L 3.1875 -0.5625 L 2.875 0.734375 C 2.828125 0.828125 2.5 1.8125 1.4375 1.8125 C 1.25 1.8125 0.9375 1.796875 0.65625 1.71875 C 0.953125 1.625 1.0625 1.359375 1.0625 1.203125 C 1.0625 1.03125 0.953125 0.84375 0.6875 0.84375 C 0.46875 0.84375 0.140625 1.03125 0.140625 1.421875 C 0.140625 1.828125 0.515625 2.03125 1.46875 2.03125 C 2.703125 2.03125 3.40625 1.25 3.5625 0.65625 Z M 3.84375 -3.15625 L 3.375 -1.265625 C 3.3125 -1.015625 3.078125 -0.765625 2.875 -0.578125 C 2.65625 -0.390625 2.359375 -0.21875 2.0625 -0.21875 C 1.578125 -0.21875 1.421875 -0.734375 1.421875 -1.125 C 1.421875 -1.609375 1.71875 -2.765625 1.984375 -3.28125 C 2.25 -3.765625 2.671875 -4.15625 3.078125 -4.15625 C 3.734375 -4.15625 3.875 -3.359375 3.875 -3.296875 C 3.875 -3.25 3.859375 -3.1875 3.84375 -3.15625 Z M 3.84375 -3.15625 "/>
<path d="M 3.578125 0.671875 L 4.6875 -3.75 C 4.6875 -3.8125 4.703125 -3.859375 4.703125 -3.921875 C 4.703125 -4.09375 4.59375 -4.1875 4.421875 -4.1875 C 4.328125 -4.1875 4.046875 -4.125 4.015625 -3.765625 C 3.828125 -4.140625 3.484375 -4.390625 3.09375 -4.390625 C 1.953125 -4.390625 0.71875 -3 0.71875 -1.5625 C 0.71875 -0.59375 1.328125 0 2.046875 0 C 2.640625 0 3.09375 -0.46875 3.203125 -0.578125 L 3.203125 -0.5625 L 2.875 0.75 C 2.84375 0.828125 2.5 1.8125 1.453125 1.8125 C 1.265625 1.8125 0.9375 1.8125 0.65625 1.71875 C 0.953125 1.625 1.0625 1.375 1.0625 1.203125 C 1.0625 1.046875 0.953125 0.859375 0.6875 0.859375 C 0.46875 0.859375 0.15625 1.03125 0.15625 1.4375 C 0.15625 1.84375 0.515625 2.03125 1.46875 2.03125 C 2.71875 2.03125 3.421875 1.265625 3.578125 0.671875 Z M 3.859375 -3.171875 L 3.390625 -1.265625 C 3.328125 -1.015625 3.09375 -0.765625 2.875 -0.578125 C 2.671875 -0.390625 2.359375 -0.21875 2.078125 -0.21875 C 1.578125 -0.21875 1.4375 -0.734375 1.4375 -1.140625 C 1.4375 -1.609375 1.71875 -2.78125 1.984375 -3.296875 C 2.25 -3.78125 2.6875 -4.171875 3.09375 -4.171875 C 3.75 -4.171875 3.890625 -3.375 3.890625 -3.3125 C 3.890625 -3.265625 3.875 -3.203125 3.859375 -3.171875 Z M 3.859375 -3.171875 "/>
</g>
<g id="glyph-0-4">
<path d="M 4.390625 -7.21875 C 4.390625 -7.328125 4.296875 -7.421875 4.1875 -7.421875 C 4.125 -7.421875 4.0625 -7.390625 4.03125 -7.328125 L 0.59375 2.09375 C 0.546875 2.21875 0.546875 2.28125 0.546875 2.28125 C 0.546875 2.390625 0.640625 2.46875 0.734375 2.46875 C 0.875 2.46875 0.90625 2.40625 0.953125 2.234375 L 4.34375 -7.046875 C 4.390625 -7.171875 4.390625 -7.21875 4.390625 -7.21875 Z M 4.390625 -7.21875 "/>
<path d="M 4.40625 -7.25 C 4.40625 -7.359375 4.328125 -7.453125 4.21875 -7.453125 C 4.140625 -7.453125 4.078125 -7.421875 4.046875 -7.359375 L 0.59375 2.109375 C 0.546875 2.234375 0.546875 2.28125 0.546875 2.28125 C 0.546875 2.390625 0.640625 2.484375 0.75 2.484375 C 0.875 2.484375 0.90625 2.421875 0.96875 2.25 L 4.359375 -7.078125 C 4.40625 -7.203125 4.40625 -7.25 4.40625 -7.25 Z M 4.40625 -7.25 "/>
</g>
<g id="glyph-0-5">
<path d="M 3.921875 -1.53125 C 3.921875 -1.890625 3.734375 -2.140625 3.609375 -2.25 C 3.34375 -2.53125 3.0625 -2.578125 2.625 -2.671875 C 2.265625 -2.75 1.875 -2.8125 1.875 -3.265625 C 1.875 -3.546875 2.109375 -4.15625 2.984375 -4.15625 C 3.21875 -4.15625 3.71875 -4.078125 3.875 -3.703125 C 3.59375 -3.6875 3.390625 -3.46875 3.390625 -3.25 C 3.390625 -3.109375 3.484375 -2.96875 3.703125 -2.96875 C 3.921875 -2.96875 4.15625 -3.140625 4.15625 -3.515625 C 4.15625 -3.96875 3.734375 -4.375 2.984375 -4.375 C 1.671875 -4.375 1.3125 -3.359375 1.3125 -2.921875 C 1.3125 -2.15625 2.03125 -2 2.328125 -1.953125 C 2.84375 -1.84375 3.359375 -1.734375 3.359375 -1.203125 C 3.359375 -0.9375 3.125 -0.109375 1.9375 -0.109375 C 1.796875 -0.109375 1.03125 -0.109375 0.8125 -0.640625 C 1.1875 -0.578125 1.4375 -0.875 1.4375 -1.15625 C 1.4375 -1.390625 1.28125 -1.5 1.0625 -1.5 C 0.8125 -1.5 0.515625 -1.296875 0.515625 -0.84375 C 0.515625 -0.28125 1.078125 0.109375 1.921875 0.109375 C 3.53125 0.109375 3.921875 -1.09375 3.921875 -1.53125 Z M 3.921875 -1.53125 "/>
<path d="M 3.9375 -1.546875 C 3.9375 -1.890625 3.75 -2.140625 3.625 -2.265625 C 3.359375 -2.546875 3.078125 -2.59375 2.640625 -2.6875 C 2.28125 -2.765625 1.875 -2.828125 1.875 -3.28125 C 1.875 -3.5625 2.109375 -4.171875 2.984375 -4.171875 C 3.234375 -4.171875 3.734375 -4.109375 3.890625 -3.71875 C 3.609375 -3.703125 3.40625 -3.484375 3.40625 -3.265625 C 3.40625 -3.125 3.5 -2.984375 3.71875 -2.984375 C 3.9375 -2.984375 4.171875 -3.15625 4.171875 -3.53125 C 4.171875 -3.984375 3.75 -4.390625 2.984375 -4.390625 C 1.671875 -4.390625 1.3125 -3.375 1.3125 -2.9375 C 1.3125 -2.171875 2.046875 -2.015625 2.328125 -1.953125 C 2.859375 -1.859375 3.375 -1.75 3.375 -1.203125 C 3.375 -0.9375 3.140625 -0.109375 1.953125 -0.109375 C 1.8125 -0.109375 1.046875 -0.109375 0.8125 -0.640625 C 1.1875 -0.59375 1.4375 -0.890625 1.4375 -1.15625 C 1.4375 -1.390625 1.28125 -1.515625 1.078125 -1.515625 C 0.8125 -1.515625 0.515625 -1.296875 0.515625 -0.859375 C 0.515625 -0.28125 1.078125 0.109375 1.9375 0.109375 C 3.546875 0.109375 3.9375 -1.09375 3.9375 -1.546875 Z M 3.9375 -1.546875 "/>
</g>
<g id="glyph-1-0">
<path d="M 6.671875 -0.984375 C 6.671875 -1.078125 6.59375 -1.078125 6.5625 -1.078125 C 6.46875 -1.078125 6.46875 -1.03125 6.4375 -0.96875 C 6.28125 -0.40625 5.984375 -0.125 5.703125 -0.125 C 5.5625 -0.125 5.53125 -0.21875 5.53125 -0.359375 C 5.53125 -0.53125 5.5625 -0.609375 5.6875 -0.921875 C 5.765625 -1.140625 6.0625 -1.875 6.0625 -2.265625 C 6.0625 -2.375 6.0625 -2.671875 5.796875 -2.859375 C 5.6875 -2.953125 5.484375 -3.046875 5.15625 -3.046875 C 4.53125 -3.046875 4.15625 -2.640625 3.9375 -2.359375 C 3.875 -2.9375 3.390625 -3.046875 3.03125 -3.046875 C 2.453125 -3.046875 2.0625 -2.703125 1.859375 -2.421875 C 1.8125 -2.90625 1.40625 -3.046875 1.125 -3.046875 C 0.828125 -3.046875 0.671875 -2.84375 0.578125 -2.671875 C 0.421875 -2.421875 0.328125 -2.03125 0.328125 -2 C 0.328125 -1.90625 0.421875 -1.90625 0.4375 -1.90625 C 0.546875 -1.90625 0.546875 -1.921875 0.59375 -2.109375 C 0.703125 -2.515625 0.828125 -2.859375 1.09375 -2.859375 C 1.28125 -2.859375 1.328125 -2.703125 1.328125 -2.515625 C 1.328125 -2.390625 1.265625 -2.125 1.21875 -1.9375 L 1.0625 -1.328125 L 0.84375 -0.4375 C 0.8125 -0.34375 0.78125 -0.171875 0.78125 -0.15625 C 0.78125 0 0.90625 0.0625 1.015625 0.0625 C 1.140625 0.0625 1.25 -0.015625 1.28125 -0.078125 C 1.3125 -0.140625 1.375 -0.359375 1.40625 -0.515625 L 1.5625 -1.140625 C 1.59375 -1.28125 1.640625 -1.4375 1.671875 -1.59375 C 1.75 -1.875 1.765625 -1.9375 1.96875 -2.21875 C 2.15625 -2.5 2.484375 -2.859375 3 -2.859375 C 3.40625 -2.859375 3.40625 -2.5 3.40625 -2.375 C 3.40625 -2.203125 3.390625 -2.109375 3.296875 -1.71875 L 3 -0.5625 C 2.96875 -0.421875 2.90625 -0.1875 2.90625 -0.15625 C 2.90625 0 3.03125 0.0625 3.140625 0.0625 C 3.265625 0.0625 3.375 -0.015625 3.40625 -0.078125 C 3.453125 -0.140625 3.5 -0.359375 3.53125 -0.515625 L 3.6875 -1.140625 C 3.734375 -1.28125 3.765625 -1.4375 3.8125 -1.59375 C 3.890625 -1.890625 3.890625 -1.90625 4.015625 -2.125 C 4.25 -2.46875 4.59375 -2.859375 5.125 -2.859375 C 5.515625 -2.859375 5.53125 -2.546875 5.53125 -2.375 C 5.53125 -1.953125 5.234375 -1.1875 5.125 -0.90625 C 5.046875 -0.703125 5.03125 -0.640625 5.03125 -0.53125 C 5.03125 -0.15625 5.328125 0.0625 5.6875 0.0625 C 6.375 0.0625 6.671875 -0.890625 6.671875 -0.984375 Z M 6.671875 -0.984375 "/>
<path d="M 4.578125 -1 C 4.578125 -1.078125 4.484375 -1.078125 4.46875 -1.078125 C 4.359375 -1.078125 4.359375 -1.046875 4.328125 -0.96875 C 4.171875 -0.40625 3.875 -0.125 3.59375 -0.125 C 3.453125 -0.125 3.421875 -0.21875 3.421875 -0.375 C 3.421875 -0.53125 3.453125 -0.625 3.578125 -0.9375 C 3.671875 -1.140625 3.953125 -1.890625 3.953125 -2.28125 C 3.953125 -2.953125 3.40625 -3.0625 3.046875 -3.0625 C 2.46875 -3.0625 2.078125 -2.71875 1.875 -2.4375 C 1.828125 -2.90625 1.40625 -3.0625 1.125 -3.0625 C 0.828125 -3.0625 0.671875 -2.84375 0.578125 -2.6875 C 0.421875 -2.4375 0.328125 -2.03125 0.328125 -2 C 0.328125 -1.90625 0.421875 -1.90625 0.4375 -1.90625 C 0.546875 -1.90625 0.546875 -1.9375 0.59375 -2.125 C 0.703125 -2.53125 0.828125 -2.875 1.109375 -2.875 C 1.28125 -2.875 1.328125 -2.71875 1.328125 -2.53125 C 1.328125 -2.40625 1.265625 -2.140625 1.21875 -1.953125 L 1.078125 -1.328125 L 0.84375 -0.4375 C 0.828125 -0.34375 0.78125 -0.171875 0.78125 -0.15625 C 0.78125 0 0.90625 0.0625 1.015625 0.0625 C 1.140625 0.0625 1.25 -0.015625 1.28125 -0.078125 C 1.328125 -0.140625 1.375 -0.375 1.40625 -0.515625 L 1.5625 -1.140625 C 1.609375 -1.296875 1.640625 -1.453125 1.6875 -1.609375 C 1.765625 -1.890625 1.765625 -1.953125 1.96875 -2.234375 C 2.171875 -2.515625 2.5 -2.875 3.015625 -2.875 C 3.421875 -2.875 3.421875 -2.515625 3.421875 -2.390625 C 3.421875 -1.96875 3.125 -1.203125 3.015625 -0.90625 C 2.9375 -0.703125 2.90625 -0.640625 2.90625 -0.53125 C 2.90625 -0.15625 3.21875 0.0625 3.578125 0.0625 C 4.265625 0.0625 4.578125 -0.890625 4.578125 -1 Z M 4.578125 -1 "/>
</g>
</g>
<clipPath id="clip-0">
<path clip-rule="nonzero" d="M 16 105 L 45 105 L 45 153.800781 L 16 153.800781 Z M 16 105 "/>
<path clip-rule="nonzero" d="M 17 105 L 45 105 L 45 154.15625 L 17 154.15625 Z M 17 105 "/>
</clipPath>
<clipPath id="clip-1">
<path clip-rule="nonzero" d="M 0 130 L 94 130 L 94 153.800781 L 0 153.800781 Z M 0 130 "/>
<path clip-rule="nonzero" d="M 0.128906 131 L 95 131 L 95 154.15625 L 0.128906 154.15625 Z M 0.128906 131 "/>
</clipPath>
<clipPath id="clip-2">
<path clip-rule="nonzero" d="M 16 0.359375 L 45 0.359375 L 45 49 L 16 49 Z M 16 0.359375 "/>
<path clip-rule="nonzero" d="M 0.128906 149 L 16 149 L 16 152 L 0.128906 152 Z M 0.128906 149 "/>
</clipPath>
<clipPath id="clip-3">
<path clip-rule="nonzero" d="M 0 0.359375 L 94 0.359375 L 94 24 L 0 24 Z M 0 0.359375 "/>
<path clip-rule="nonzero" d="M 0.128906 0 L 95 0 L 95 23 L 0.128906 23 Z M 0.128906 0 "/>
</clipPath>
<clipPath id="clip-4">
<path clip-rule="nonzero" d="M 102 64 L 126.125 64 L 126.125 96 L 102 96 Z M 102 64 "/>
<path clip-rule="nonzero" d="M 0.128906 2 L 16 2 L 16 5 L 0.128906 5 Z M 0.128906 2 "/>
</clipPath>
<clipPath id="clip-5">
<path clip-rule="nonzero" d="M 94 62 L 124.703125 62 L 124.703125 81 L 94 81 Z M 94 62 "/>
</clipPath>
<clipPath id="clip-6">
<path clip-rule="nonzero" d="M 102 64 L 124.703125 64 L 124.703125 96 L 102 96 Z M 102 64 "/>
</clipPath>
</defs>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -31.179688 34.01646 L -31.179688 56.694722 L 31.180615 56.694722 L 31.180615 34.01646 Z M -31.179688 34.01646 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -31.18262 34.015277 L -31.18262 56.69421 L 31.182486 56.69421 L 31.182486 34.015277 Z M -31.18262 34.015277 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<g clip-path="url(#clip-0)">
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -15.588628 0.00103416 L -15.588628 5.667648 L -18.079578 7.163005 L -13.101614 10.153718 L -18.079578 13.140496 L -13.101614 16.131209 L -18.079578 19.117987 L -13.101614 22.1087 L -18.079578 25.095478 L -15.588628 26.590834 L -15.588628 34.01646 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -15.589385 0.000794712 L -15.589385 5.668569 L -18.080543 7.164831 L -13.098228 10.153436 L -18.080543 13.142042 L -13.098228 16.130647 L -18.080543 19.119253 L -13.098228 22.107858 L -18.080543 25.096463 L -15.589385 26.592725 L -15.589385 34.015277 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
</g>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 21.968431 20.695981 L 21.968431 15.115941 L 9.214614 15.115941 L 9.214614 20.695981 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 19.178411 18.901554 L 12.004635 18.901554 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 15.589555 0.00103416 L 15.589555 15.115941 M 15.589555 18.901554 L 15.589555 34.01646 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 21.965987 20.693852 L 21.965987 15.116166 L 9.212515 15.116166 L 9.212515 20.693852 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 19.177144 18.899905 L 12.005275 18.899905 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 15.589251 0.000794712 L 15.589251 15.116166 M 15.589251 18.899905 L 15.589251 34.015277 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<g clip-path="url(#clip-1)">
<path fill="none" stroke-width="1.19553" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-miterlimit="10" d="M -31.179688 0.00103416 L -29.688266 2.491983 L -26.697553 -2.489915 L -23.710775 2.491983 L -20.720062 -2.489915 L -17.733284 2.491983 L -14.742571 -2.489915 L -11.751858 2.491983 L -8.76508 -2.489915 L -5.774367 2.491983 L -2.787589 -2.489915 L 0.203124 2.491983 L 3.189901 -2.489915 L 6.180615 2.491983 L 9.167392 -2.489915 L 12.158105 2.491983 L 15.144883 -2.489915 L 18.135596 2.491983 L 21.122374 -2.489915 L 24.113087 2.491983 L 27.099865 -2.489915 L 28.595222 0.00103416 L 31.180615 0.00103416 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill="none" stroke-width="1.19553" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-miterlimit="10" d="M -31.18262 0.000794712 L -29.686359 2.491952 L -26.697754 -2.490363 L -23.709148 2.491952 L -20.720543 -2.490363 L -17.731937 2.491952 L -14.743332 -2.490363 L -11.754726 2.491952 L -8.766121 -2.490363 L -5.777515 2.491952 L -2.78891 -2.490363 L 0.199695 2.491952 L 3.192218 -2.490363 L 6.180823 2.491952 L 9.169429 -2.490363 L 12.158034 2.491952 L 15.14664 -2.490363 L 18.135245 2.491952 L 21.123851 -2.490363 L 24.112456 2.491952 L 27.101062 -2.490363 L 28.597323 0.000794712 L 31.182486 0.000794712 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
</g>
<path fill="none" stroke-width="1.19553" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-dasharray="2.98883 2.98883" stroke-miterlimit="10" d="M -31.179688 0.00103416 L -45.354093 0.00103416 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill="none" stroke-width="1.19553" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-dasharray="2.98883 2.98883" stroke-miterlimit="10" d="M 31.180615 0.00103416 L 45.35502 0.00103416 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -31.179688 90.710148 L -31.179688 113.38841 L 31.180615 113.38841 L 31.180615 90.710148 Z M -31.179688 90.710148 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="41.76899" y="51.06997"/>
</g>
<path fill-rule="nonzero" fill="rgb(79.998779%, 88.941956%, 94.822693%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 44.706726%, 74.116516%)" stroke-opacity="1" stroke-miterlimit="10" d="M -31.179688 85.039599 L 31.180615 85.039599 L 31.180615 90.710148 L -31.179688 90.710148 Z M -31.179688 85.039599 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 44.706726%, 74.116516%)" stroke-opacity="1" stroke-miterlimit="10" d="M -31.179688 90.710148 L 31.180615 85.039599 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 44.706726%, 74.116516%)" stroke-opacity="1" stroke-miterlimit="10" d="M 31.180615 90.710148 L -31.179688 85.039599 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<g fill="rgb(0%, 44.706726%, 74.116516%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="80.852844" y="65.482347"/>
</g>
<g fill="rgb(0%, 44.706726%, 74.116516%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="85.695021" y="66.966368"/>
</g>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -15.588628 56.694722 L -15.588628 62.361336 L -18.079578 63.856693 L -13.101614 66.847406 L -18.079578 69.834184 L -13.101614 72.824897 L -18.079578 75.811675 L -15.588628 77.307031 L -15.588628 85.039599 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-2" x="18.669879" y="83.327328"/>
</g>
<path fill-rule="nonzero" fill="rgb(89.99939%, 89.99939%, 89.99939%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 12.756248 76.535742 L 12.756248 65.198579 L 18.426797 65.198579 L 18.426797 76.535742 Z M 12.756248 76.535742 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 15.589555 61.326392 L 15.589555 64.698815 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.054304 -0.000824829 L 1.607586 1.683419 L 3.087202 -0.000824829 L 1.607586 -1.681133 Z M 6.054304 -0.000824829 " transform="matrix(0, 0.992656, 0.992656, 0, 61.586756, 86.544845)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 15.589555 80.407929 L 15.589555 77.035506 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.054615 0.000824829 L 1.607897 1.681133 L 3.087513 0.000824829 L 1.607897 -1.683419 Z M 6.054615 0.000824829 " transform="matrix(0, -0.992656, -0.992656, 0, 61.586756, 73.24062)"/>
<g clip-path="url(#clip-2)">
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -15.588628 113.38841 L -15.588628 119.055024 L -18.079578 120.550381 L -13.101614 123.541094 L -18.079578 126.527872 L -13.101614 129.518585 L -18.079578 132.505363 L -13.101614 135.496076 L -18.079578 138.482854 L -15.588628 139.97821 L -15.588628 147.403836 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill="none" stroke-width="1.19553" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-dasharray="2.98883 2.98883" stroke-miterlimit="10" d="M -31.18262 0.000794712 L -45.354016 0.000794712 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
</g>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 21.968431 134.083357 L 21.968431 128.503317 L 9.214614 128.503317 L 9.214614 134.083357 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 19.178411 132.28893 L 12.004635 132.28893 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 15.589555 113.38841 L 15.589555 128.503317 M 15.589555 132.28893 L 15.589555 147.403836 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill="none" stroke-width="1.19553" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-dasharray="2.98883 2.98883" stroke-miterlimit="10" d="M 31.182486 0.000794712 L 45.353881 0.000794712 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -31.18262 90.708692 L -31.18262 113.387625 L 31.182486 113.387625 L 31.182486 90.708692 Z M -31.18262 90.708692 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="42.091101" y="50.947912"/>
</g>
<path fill-rule="nonzero" fill="rgb(79.998779%, 88.941956%, 94.822693%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 44.706726%, 74.116516%)" stroke-opacity="1" stroke-miterlimit="10" d="M -31.18262 85.040917 L 31.182486 85.040917 L 31.182486 90.708692 L -31.18262 90.708692 Z M -31.18262 85.040917 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 44.706726%, 74.116516%)" stroke-opacity="1" stroke-miterlimit="10" d="M -31.18262 90.708692 L 31.182486 85.040917 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 44.706726%, 74.116516%)" stroke-opacity="1" stroke-miterlimit="10" d="M 31.182486 90.708692 L -31.18262 85.040917 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<g fill="rgb(0%, 44.706726%, 74.116516%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="81.356904" y="65.427382"/>
</g>
<g fill="rgb(0%, 44.706726%, 74.116516%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="86.221624" y="66.918312"/>
</g>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -15.589385 56.69421 L -15.589385 62.361984 L -18.080543 63.858246 L -13.098228 66.846851 L -18.080543 69.835456 L -13.098228 72.824062 L -18.080543 75.812667 L -15.589385 77.308929 L -15.589385 85.040917 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-2" x="18.884455" y="83.355439"/>
</g>
<path fill-rule="nonzero" fill="rgb(89.99939%, 89.99939%, 89.99939%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 12.757322 76.537297 L 12.757322 65.19783 L 18.425097 65.19783 L 18.425097 76.537297 Z M 12.757322 76.537297 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 15.589251 61.327919 L 15.589251 64.700382 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.053547 -0.00112898 L 1.60785 1.683144 L 3.088443 -0.00112898 L 1.60785 -1.681485 Z M 6.053547 -0.00112898 " transform="matrix(0, 0.997277, 0.997277, 0, 62.001126, 86.587934)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 15.589251 80.407208 L 15.589251 77.034745 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.054664 0.00112898 L 1.608967 1.681485 L 3.085643 0.00112898 L 1.608967 -1.683144 Z M 6.054664 0.00112898 " transform="matrix(0, -0.997277, -0.997277, 0, 62.001126, 73.221774)"/>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -15.589385 113.387625 L -15.589385 119.055399 L -18.080543 120.55166 L -13.098228 123.540266 L -18.080543 126.528871 L -13.098228 129.517477 L -18.080543 132.506082 L -13.098228 135.494688 L -18.080543 138.483293 L -15.589385 139.979554 L -15.589385 147.402107 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 21.965987 134.080682 L 21.965987 128.502996 L 9.212515 128.502996 L 9.212515 134.080682 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 19.177144 132.286735 L 12.005275 132.286735 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<path fill="none" stroke-width="0.79701" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 15.589251 113.387625 L 15.589251 128.502996 M 15.589251 132.286735 L 15.589251 147.402107 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<g clip-path="url(#clip-3)">
<path fill="none" stroke-width="1.19553" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-miterlimit="10" d="M -31.179688 147.403836 L -29.688266 149.894785 L -26.697553 144.912887 L -23.710775 149.894785 L -20.720062 144.912887 L -17.733284 149.894785 L -14.742571 144.912887 L -11.751858 149.894785 L -8.76508 144.912887 L -5.774367 149.894785 L -2.787589 144.912887 L 0.203124 149.894785 L 3.189901 144.912887 L 6.180615 149.894785 L 9.167392 144.912887 L 12.158105 149.894785 L 15.144883 144.912887 L 18.135596 149.894785 L 21.122374 144.912887 L 24.113087 149.894785 L 27.099865 144.912887 L 28.595222 147.403836 L 31.180615 147.403836 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill="none" stroke-width="1.19553" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-miterlimit="10" d="M -31.18262 147.402107 L -29.686359 149.893264 L -26.697754 144.910949 L -23.709148 149.893264 L -20.720543 144.910949 L -17.731937 149.893264 L -14.743332 144.910949 L -11.754726 149.893264 L -8.766121 144.910949 L -5.777515 149.893264 L -2.78891 144.910949 L 0.199695 149.893264 L 3.192218 144.910949 L 6.180823 149.893264 L 9.169429 144.910949 L 12.158034 149.893264 L 15.14664 144.910949 L 18.135245 149.893264 L 21.123851 144.910949 L 24.112456 149.893264 L 27.101062 144.910949 L 28.597323 147.402107 L 31.182486 147.402107 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
</g>
<path fill="none" stroke-width="1.19553" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-dasharray="2.98883 2.98883" stroke-miterlimit="10" d="M -31.179688 147.403836 L -45.354093 147.403836 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill="none" stroke-width="1.19553" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-dasharray="2.98883 2.98883" stroke-miterlimit="10" d="M 31.180615 147.403836 L 45.35502 147.403836 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill-rule="nonzero" fill="rgb(89.99939%, 94.468689%, 97.410583%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 44.706726%, 74.116516%)" stroke-opacity="1" stroke-miterlimit="10" d="M 47.271438 60.905331 L 68.670777 60.905331 L 68.670777 80.828989 L 47.271438 80.828989 Z M 47.271438 60.905331 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<g fill="rgb(0%, 44.706726%, 74.116516%)" fill-opacity="1">
<use xlink:href="#glyph-0-3" x="96.329348" y="82.365444"/>
</g>
<g fill="rgb(0%, 44.706726%, 74.116516%)" fill-opacity="1">
<use xlink:href="#glyph-0-4" x="101.402629" y="82.365444"/>
<use xlink:href="#glyph-0-5" x="106.347348" y="82.365444"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 44.706726%, 74.116516%)" stroke-opacity="1" stroke-miterlimit="10" d="M 51.265614 87.876841 L 79.61049 87.876841 L 79.61049 70.865193 L 73.802211 70.865193 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill-rule="nonzero" fill="rgb(0%, 44.706726%, 74.116516%)" fill-opacity="1" d="M 116.179688 79.894531 L 120.59375 81.5625 L 119.125 79.894531 L 120.59375 78.222656 Z M 116.179688 79.894531 "/>
<g clip-path="url(#clip-4)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 44.706726%, 74.116516%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.055156 0.00180718 L 1.608438 1.682116 L 3.088054 0.00180718 L 1.608438 -1.682436 Z M 6.055156 0.00180718 " transform="matrix(-0.992656, 0, 0, 0.992656, 122.190376, 79.892737)"/>
<path fill="none" stroke-width="1.19553" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-dasharray="2.98883 2.98883" stroke-miterlimit="10" d="M -31.18262 147.402107 L -45.354016 147.402107 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 44.706726%, 74.116516%)" stroke-opacity="1" stroke-miterlimit="10" d="M 46.771674 70.865193 L 23.058467 70.865193 " transform="matrix(0.992656, 0, 0, -0.992656, 46.110868, 150.239308)"/>
<path fill-rule="nonzero" fill="rgb(0%, 44.706726%, 74.116516%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 44.706726%, 74.116516%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.053859 0.00180718 L 1.607141 1.682116 L 3.086757 0.00180718 L 1.607141 -1.682436 Z M 6.053859 0.00180718 " transform="matrix(-0.992656, 0, 0, 0.992656, 71.817995, 79.892737)"/>
<path fill="none" stroke-width="1.19553" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(50%, 50%, 50%)" stroke-opacity="1" stroke-dasharray="2.98883 2.98883" stroke-miterlimit="10" d="M 31.182486 147.402107 L 45.353881 147.402107 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<path fill-rule="nonzero" fill="rgb(89.99939%, 94.468689%, 97.410583%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 44.706726%, 74.116516%)" stroke-opacity="1" stroke-miterlimit="10" d="M 47.269252 60.904892 L 68.671271 60.904892 L 68.671271 80.830234 L 47.269252 80.830234 Z M 47.269252 60.904892 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<g fill="rgb(0%, 44.706726%, 74.116516%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="68.190521" y="74.180001"/>
<use xlink:href="#glyph-0-3" x="96.905457" y="82.389077"/>
</g>
<g fill="rgb(0%, 44.706726%, 74.116516%)" fill-opacity="1">
<use xlink:href="#glyph-0-4" x="102.002356" y="82.389077"/>
<use xlink:href="#glyph-0-5" x="106.970094" y="82.389077"/>
</g>
<g clip-path="url(#clip-5)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 44.706726%, 74.116516%)" stroke-opacity="1" stroke-miterlimit="10" d="M 49.118036 87.876763 L 77.464743 87.876763 L 77.464743 70.865605 L 73.802429 70.865605 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
</g>
<path fill-rule="nonzero" fill="rgb(0%, 44.706726%, 74.116516%)" fill-opacity="1" d="M 116.851562 79.90625 L 121.28125 81.582031 L 119.808594 79.90625 L 121.28125 78.226562 Z M 116.851562 79.90625 "/>
<g clip-path="url(#clip-6)">
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 44.706726%, 74.116516%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.051791 0.00139513 L 1.61001 1.681751 L 3.086687 0.00139513 L 1.61001 -1.682878 Z M 6.051791 0.00139513 " transform="matrix(-0.997277, 0, 0, 0.997277, 122.886877, 79.904859)"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 44.706726%, 74.116516%)" stroke-opacity="1" stroke-miterlimit="10" d="M 46.771804 70.865605 L 23.058806 70.865605 " transform="matrix(0.997277, 0, 0, -0.997277, 46.453192, 150.578918)"/>
<path fill-rule="nonzero" fill="rgb(0%, 44.706726%, 74.116516%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 44.706726%, 74.116516%)" stroke-opacity="1" stroke-miterlimit="10" d="M 6.05429 0.00139513 L 1.608593 1.681751 L 3.089186 0.00139513 L 1.608593 -1.682878 Z M 6.05429 0.00139513 " transform="matrix(-0.997277, 0, 0, 0.997277, 72.279994, 79.904859)"/>
<g fill="rgb(0%, 44.706726%, 74.116516%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="68.635634" y="74.165527"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -16,53 +16,19 @@ mdl = 'nass_uniaxial_model';
%% Frequency Vector [Hz]
freqs = logspace(0, 3, 1000);
% #+name: fig:micro_station_uniaxial_model
% #+caption: Schematic of the Micro-Station measurement setup and uniaxial model.
% #+begin_figure
% #+attr_latex: :caption \subcaption{\label{fig:uniaxial_ustation_meas_dynamics_schematic}Measurement setup - Schematic}
% #+attr_latex: :options {0.69\textwidth}
% #+begin_subfigure
% #+attr_latex: :scale 1
% [[file:figs/uniaxial_ustation_meas_dynamics_schematic.png]]
% #+end_subfigure
% #+attr_latex: :caption \subcaption{\label{fig:uniaxial_model_micro_station}Uniaxial model of the micro-station}
% #+attr_latex: :options {0.29\textwidth}
% #+begin_subfigure
% #+attr_latex: :scale 1
% [[file:figs/uniaxial_model_micro_station.png]]
% #+end_subfigure
% #+end_figure
% Due to the bad coherence at low frequency, the frequency response functions will only be shown between 20 and 200Hz (solid lines in Figure ref:fig:uniaxial_comp_frf_meas_model).
%% Load measured FRF
load('meas_microstation_frf.mat');
% Masses are estimated from the CAD.
%% Parameters - Mass
mh = 15; % Micro Hexapod [kg]
mt = 1200; % Ty + Ry + Rz [kg]
mg = 2500; % Granite [kg]
% And stiffnesses from the data-sheet of stage manufacturers.
%% Parameters - Stiffnesses
kh = 6.11e+07; % [N/m]
kt = 5.19e+08; % [N/m]
kg = 9.50e+08; % [N/m]
% The damping coefficients are tuned to match the identified damping from the measurements.
%% Parameters - damping
ch = 2*0.05*sqrt(kh*mh); % [N/(m/s)]
ct = 2*0.05*sqrt(kt*mt); % [N/(m/s)]
@ -88,27 +54,18 @@ G_id = linearize(mdl, io, 0.0);
G_id.InputName = {'Fg', 'Fh'};
G_id.OutputName = {'Dg', 'Dh'};
% Comparison of the model and measurements
% The comparison between the measurements and the model is shown in Figure ref:fig:uniaxial_comp_frf_meas_model.
% Only three modes are modelled with frequencies at 70Hz, 140Hz and 320Hz.
% As the model is simplistic, the goal is not to match exactly the measurement but to have a first approximation.
% More accurate models will be used later on.
%% Comparison of the measured FRF and identified ones from the uni-axial model
%% Comparison of the measured FRF and identified ones from the uniaxial model
figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
plot(f(f>20), abs(frf_Fhz_to_Dhz(f>20)), '-', 'color', colors(1,:), 'DisplayName', '$D_{h,z}/F_{h,z}$');
plot(f(f>20), abs(frf_Fgz_to_Dhz(f>20)), '-', 'color', colors(2,:), 'DisplayName', '$D_{h,z}/F_{g,z}$');
plot(f(f>20), abs(frf_Fgz_to_Dgz(f>20)), '-', 'color', colors(3,:), 'DisplayName', '$D_{g,z}/F_{g,z}$');
plot(freqs, abs(squeeze(freqresp(G_id('Dh', 'Fh'), freqs, 'Hz'))), '--', 'color', colors(1,:), 'DisplayName', '$D_{h,z}/F_{h,z}$ (model)');
plot(freqs, abs(squeeze(freqresp(G_id('Dh', 'Fg'), freqs, 'Hz'))), '--', 'color', colors(2,:), 'DisplayName', '$D_{h,z}/F_{g,z}$ (model)');
plot(freqs, abs(squeeze(freqresp(G_id('Dg', 'Fg'), freqs, 'Hz'))), '--', 'color', colors(3,:), 'DisplayName', '$D_{g,z}/F_{g,z}$ (model)');
plot(f(f>20), abs(frf_Fhz_to_Dhz(f>20)), '-', 'color', colors(1,:), 'DisplayName', '$x_{h,z}/F_{h,z}$');
plot(f(f>20), abs(frf_Fgz_to_Dhz(f>20)), '-', 'color', colors(2,:), 'DisplayName', '$x_{h,z}/F_{g,z}$');
plot(f(f>20), abs(frf_Fgz_to_Dgz(f>20)), '-', 'color', colors(3,:), 'DisplayName', '$x_{g,z}/F_{g,z}$');
plot(freqs, abs(squeeze(freqresp(G_id('Dh', 'Fh'), freqs, 'Hz'))), '--', 'color', colors(1,:), 'DisplayName', '$x_{h,z}/F_{h,z}$ (model)');
plot(freqs, abs(squeeze(freqresp(G_id('Dh', 'Fg'), freqs, 'Hz'))), '--', 'color', colors(2,:), 'DisplayName', '$x_{h,z}/F_{g,z}$ (model)');
plot(freqs, abs(squeeze(freqresp(G_id('Dg', 'Fg'), freqs, 'Hz'))), '--', 'color', colors(3,:), 'DisplayName', '$x_{g,z}/F_{g,z}$ (model)');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);

View File

@ -19,15 +19,6 @@ freqs = logspace(0, 3, 1000);
%% Load the micro-station parameters
load('uniaxial_micro_station_parameters.mat')
% Nano-Hexapod Parameters
% The parameters for the nano-hexapod and sample are:
% - $m_s$ the sample mass that can vary from 1kg up to 50kg
% - $m_n$ the nano-hexapod mass which is set to 15kg
% - $k_n$ the nano-hexapod stiffness, which can vary depending on the chosen architecture/technology
% As a first example, let's choose a nano-hexapod stiffness of $10\,N/\mu m$ and a sample mass of 10kg.
%% Nano-Hexapod Parameters
mn = 15; % [kg]
kn = 1e7; % [N/m]
@ -36,15 +27,6 @@ cn = 2*0.01*sqrt(mn*kn); % [N/(m/s)]
%% Sample Mass
ms = 10; % [kg]
% Obtained Dynamic Response
% The sensitivity to disturbances (i.e. $x_f$, $f_t$ and $f_s$) are shown in Figure ref:fig:uniaxial_sensitivity_dist_first_params.
% The /plant/ (i.e. the transfer function from actuator force $f$ to measured displacement $d$) is shown in Figure ref:fig:uniaxial_plant_first_params.
% #+begin_important
% For further analysis, 9 configurations are considered: three nano-hexapod stiffnesses ($k_n = 0.01\,N/\mu m$, $k_n = 1\,N/\mu m$ and $k_n = 100\,N/\mu m$) combined with three sample's masses ($m_s = 1\,kg$, $m_s = 25\,kg$ and $m_s = 50\,kg$).
% #+end_important
%% Use 1DoF Nano-Hexpod model
model_config = struct();
model_config.nhexa = "1dof";
@ -63,44 +45,30 @@ G_ol = linearize(mdl, io, 0.0);
G_ol.InputName = {'f', 'fs', 'xf', 'ft'};
G_ol.OutputName = {'d'};
%% Sensitivity to disturbances
%% Sensitivity to disturbances - Fs
figure;
tiledlayout(1, 3, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile();
hold on;
plot(freqs, abs(squeeze(freqresp(G_ol('d', 'fs'), freqs, 'Hz'))));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d/f_{s}$ [m/N]'); xlabel('Frequency [Hz]');
xticks([1e0, 1e1, 1e2]);
xlim([1, 500]);
ax2 = nexttile();
hold on;
%% Sensitivity to disturbances - Ft
figure;
plot(freqs, abs(squeeze(freqresp(G_ol('d', 'ft'), freqs, 'Hz'))));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d/f_{t}$ [m/N]'); xlabel('Frequency [Hz]');
xticks([1e0, 1e1, 1e2]);
xlim([1, 500]);
ax3 = nexttile();
hold on;
%% Sensitivity to disturbances - xf
figure;
plot(freqs, abs(squeeze(freqresp(G_ol('d', 'xf'), freqs, 'Hz'))));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d/x_{f}$ [m/m]'); xlabel('Frequency [Hz]');
xticks([1e0, 1e1, 1e2]);
linkaxes([ax1,ax2,ax3],'x');
xlim([1, 500]);
% #+name: fig:uniaxial_sensitivity_dist_first_params
% #+caption: Sensitivity of the relative motion $d$ to disturbances: $f_s$ the direct forces applied on the sample, $f_t$ disturbances from the micro-station stages and $x_f$ the floor motion (from left to right)
% #+RESULTS:
% [[file:figs/uniaxial_sensitivity_dist_first_params.png]]
ylim([1e-2, 1e2]);
%% Bode Plot of the transfer function from actuator forces to measured displacement by the metrology
figure;
@ -126,8 +94,6 @@ ylim([-180, 0]);
linkaxes([ax1,ax2],'x');
xlim([1, 500]);
% Identification of all combination of stiffnesses / masses :noexport:
%% Use 1DoF Nano-Hexpod model
model_config = struct();
model_config.nhexa = "1dof";

View File

@ -19,100 +19,76 @@ freqs = logspace(0, 3, 1000);
%% Load the micro-station parameters
load('uniaxial_micro_station_parameters.mat');
% Ground Motion
% The geophone fixed to the floor to measure the floor motion.
%% Load floor motion data
%% Compute Floor Motion Spectral Density
% Load floor motion data
% t: time in [s]
% V: measured voltage genrated by the geophone and amplified by a 60dB gain voltage amplifier [V]
load('ground_motion_measurement.mat', 't', 'V');
% Geophone Transfer Function
Tg = 88; % Sensitivity [V/(m/s)]
w0 = 2*2*pi; % Cut-off frequency [rad/s]
xi = 0.7; % Damping ratio
G_geo = Tg*s*s^2/(s^2 + 2*xi*w0*s + w0^2); % Geophone's transfer function [V/m]
% The voltage generated by each geophone is amplified using a voltage amplifier (gain of 60dB) before going to the ADC.
% The sensitivity of the geophone as well as the gain of the voltage amplifier are then taken into account to reconstruct the floor displacement.
% Voltage amplifier transfer function
g0 = 10^(60/20); % [abs]
%% Sensitivity of the geophone
S0 = 88; % Sensitivity [V/(m/s)]
f0 = 2; % Cut-off frequency [Hz]
% Compute measured voltage PSD
Ts = (t(2)-t(1)); % Sampling Time [s]
Nfft = floor(2/Ts);
win = hanning(Nfft);
Noverlap = floor(Nfft/2);
S = S0*(s/2/pi/f0)/(1+s/2/pi/f0); % Geophone's transfer function [V/(m/s)]
%% Gain of the voltage amplifier
G0_db = 60; % [dB]
G0 = 10^(G0_db/20); % [abs]
%% Transfer function from measured voltage to displacement
G_geo = 1/S/G0/s; % [m/V]
% The PSD $S_{V_f}$ of the measured voltage $V_f$ is computed.
%% Compute measured voltage PSD
Fs = 1/(t(2)-t(1)); % Sampling Frequency [Hz]
win = hanning(ceil(2*Fs)); % Hanning window
[psd_V, f] = pwelch(V, win, [], [], Fs); % [V^2/Hz]
% The PSD of the corresponding displacement can be computed as follows:
% \begin{equation}
% S_{x_f}(\omega) = \frac{S_{V_f}(\omega)}{|S_{\text{geo}}(j\omega)| \cdot G_{\text{amp}} \cdot \omega}
% \end{equation}
% with:
% - $S_{\text{geo}}$ the sensitivity of the Geophone in $[Vs/m]$
% - $G_{\text{amp}}$ the gain of the voltage amplifier
% - $\omega$ is here to integrate and have the displacement instead of the velocity
%% Ground Motion ASD
psd_xf = psd_V.*abs(squeeze(freqresp(G_geo, f, 'Hz'))).^2; % [m^2/Hz]
% The amplitude spectral density $\Gamma_{x_f}$ of the measured displacement $x_f$ is shown in Figure ref:fig:uniaxial_asd_floor_motion_id31.
[psd_V, f] = pwelch(V, win, Noverlap, Nfft, 1/Ts); % [V^2/Hz]
% Ground Motion ASD
psd_xf = psd_V./abs(squeeze(freqresp(G_geo*g0, f, 'Hz'))).^2; % [m^2/Hz]
%% Amplitude Spectral Density of the measured Floor motion on ID31
figure;
hold on;
plot(f, sqrt(psd_xf), 'DisplayName', '$\Gamma_{x_{f}}$');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]'); ylabel('Ampl. Spectral Density $\left[\frac{m}{\sqrt{Hz}}\right]$')
xlim([1, 500]);
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
xlim([1, 500]);
xticks([1e0, 1e1, 1e2]);
% Stage Vibration
% During Spindle rotation (here at 6rpm), the granite velocity and micro-hexapod's top platform velocity are measured with the geophones.
%% Estimation of the Spectral density of the stage vibrations
%% Measured velocity of granite and hexapod during spindle rotation
% Measured velocity of granite and hexapod during spindle rotation
% t: time in [s]
% vg: measured granite velocity [m/s]
% vg: measured micro-hexapod's top platform velocity [m/s]
load('meas_spindle_on.mat', 't', 'vg', 'vh');
spindle_off = load('meas_spindle_off.mat', 't', 'vg', 'vh'); % No Rotation
% The Power Spectral Density of the relative velocity between the hexapod and the granite is computed.
%% Compute Power Spectral Density of the relative velocity between granite and hexapod during spindle rotation
% Compute Power Spectral Density of the relative velocity between granite and hexapod during spindle rotation
Fs = 1/(t(2)-t(1)); % Sampling Frequency [Hz]
win = hanning(ceil(2*Fs)); % Hanning window
[psd_vft, f] = pwelch(vh-vg, win, [], [], Fs); % [(m/s)^2/Hz]
[psd_off, ~] = pwelch(spindle_off.vh-spindle_off.vg, win, [], [], Fs); % [(m/s)^2/Hz]
% Disable the Nano-Hexpod for now
model_config = struct();
model_config.nhexa = "none";
model_config.controller = "open_loop";
% Identify the transfer function from u to taum
clear io; io_i = 1;
io(io_i) = linio([mdl, '/micro_station/ft'], 1, 'openinput'); io_i = io_i + 1; % Stage Disturbance Force
io(io_i) = linio([mdl, '/micro_station/xg'], 1, 'openoutput'); io_i = io_i + 1; % Absolute motion of Granite
io(io_i) = linio([mdl, '/micro_station/xh'], 1, 'openoutput'); io_i = io_i + 1; % Absolute motion of Hexapod
% It is then integrated to obtain the Amplitude Spectral Density of the relative motion which is compared with a non-rotating case (Figure ref:fig:uniaxial_asd_vibration_spindle_rotation).
% It is shown that the spindle rotation induces vibrations in a wide frequency spectrum.
% Perform the model extraction
G = linearize(mdl, io, 0.0);
G.InputName = {'ft'};
G.OutputName = {'Dg', 'Dh'};
% Power Spectral Density of the equivalent force ft [N/Hz^2]
psd_ft = (psd_vft./(2*pi*f).^2)./abs(squeeze(freqresp(G('Dh', 'ft') - G('Dg', 'ft'), f, 'Hz'))).^2;
%% Amplitude Spectral Density of the relative motion measured between the granite and the micro-hexapod's top platform during Spindle rotating
figure;
@ -125,49 +101,6 @@ xlabel('Frequency [Hz]'); ylabel('Ampl. Spectral Density $\left[\frac{m}{\sqrt{H
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
xlim([1, 500]); ylim([1e-12, 1e-7])
% #+name: fig:uniaxial_asd_vibration_spindle_rotation
% #+caption: Amplitude Spectral Density of the relative motion measured between the granite and the micro-hexapod's top platform during Spindle rotating
% #+RESULTS:
% [[file:figs/uniaxial_asd_vibration_spindle_rotation.png]]
% In order to compute the equivalent disturbance force $f_t$ that induces such motion, the transfer function from $f_t$ to the relative motion of the hexapod's top platform and the granite is extracted from the model.
%% Disable the Nano-Hexpod for now
model_config = struct();
model_config.nhexa = "none";
model_config.controller = "open_loop";
%% Identify the transfer function from u to taum
clear io; io_i = 1;
io(io_i) = linio([mdl, '/micro_station/ft'], 1, 'openinput'); io_i = io_i + 1; % Stage Disturbance Force
io(io_i) = linio([mdl, '/micro_station/xg'], 1, 'openoutput'); io_i = io_i + 1; % Absolute motion of Granite
io(io_i) = linio([mdl, '/micro_station/xh'], 1, 'openoutput'); io_i = io_i + 1; % Absolute motion of Hexapod
%% Perform the model extraction
G = linearize(mdl, io, 0.0);
G.InputName = {'ft'};
G.OutputName = {'Dg', 'Dh'};
% The power spectral density $\Gamma_{f_{t}}$ of the disturbance force can be computed as follows:
% \begin{equation}
% \Gamma_{f_{t}}(\omega) = \frac{\Gamma_{v_{t}}(\omega)}{|G_{\text{model}}(j\omega)|^2}
% \end{equation}
% with:
% - $\Gamma_{v_{t}}$ the measured power spectral density of the relative motion between the micro-hexapod's top platform and the granite during the spindle's rotation
% - $G_{\text{model}}$ the transfer function (extracted from the uniaxial model) from $f_t$ to the relative motion between the micro-hexapod's top platform and the granite
%% Power Spectral Density of the equivalent force ft
psd_ft = (psd_vft./(2*pi*f).^2)./abs(squeeze(freqresp(G('Dh', 'ft') - G('Dg', 'ft'), f, 'Hz'))).^2;
% The obtained amplitude spectral density of the disturbance force $f_t$ is shown in Figure ref:fig:uniaxial_asd_disturbance_force.
%% Estimated disturbance force ft from measurement and uniaxial model
figure;
hold on;

View File

@ -21,29 +21,8 @@ load('uniaxial_plants.mat', 'G_vc_light', 'G_md_light', 'G_pz_light', ...
'G_vc_mid', 'G_md_mid', 'G_pz_mid', ...
'G_vc_heavy', 'G_md_heavy', 'G_pz_heavy');
% Sensitivity to disturbances
% From the Uni-axial model, the transfer function from the disturbances ($f_s$, $x_f$ and $f_t$) to the displacement $d$ are computed.
% This is done for *two extreme sample masses* $m_s = 1\,\text{kg}$ and $m_s = 50\,\text{kg}$ and *three nano-hexapod stiffnesses*:
% - $k_n = 0.01\,N/\mu m$ that could represent a voice coil actuator with soft flexible guiding
% - $k_n = 1\,N/\mu m$ that could represent a voice coil actuator with a stiff flexible guiding or a mechanically amplified piezoelectric actuator
% - $k_n = 100\,N/\mu m$ that could represent a stiff piezoelectric stack actuator
% The obtained sensitivity to disturbances for the three nano-hexapod stiffnesses are shown in Figure ref:fig:uniaxial_sensitivity_disturbances_nano_hexapod_stiffnesses for the light sample (same conclusions can be drawn with the heavy one).
% #+begin_important
% From Figure ref:fig:uniaxial_sensitivity_disturbances_nano_hexapod_stiffnesses, the following can be concluded for the *soft nano-hexapod*:
% - It is more sensitive to forces applied on the sample (cable forces for instance), which is expected due to the lower stiffness
% - Between the suspension mode of the nano-hexapod (here at 5Hz) and the first mode of the micro-station (here at 70Hz), the disturbances induced by the stage vibrations are filtered out.
% - Above the suspension mode of the nano-hexapod, the sample's motion is unaffected by the floor motion, and therefore the sensitivity to floor motion is close to $1$.
% #+end_important
%% Sensitivity to disturbances for three different nano-hexpod stiffnesses
figure;
tiledlayout(1, 3, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile();
hold on;
plot(freqs, abs(squeeze(freqresp(G_vc_light('d', 'fs'), freqs, 'Hz'))));
plot(freqs, abs(squeeze(freqresp(G_md_light('d', 'fs'), freqs, 'Hz'))));
@ -52,8 +31,10 @@ hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d/f_{s}$ [m/N]'); xlabel('Frequency [Hz]');
xticks([1e0, 1e1, 1e2]);
xlim([1, 500]);
ax2 = nexttile();
%% Sensitivity to disturbances for three different nano-hexpod stiffnesses
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(G_vc_light('d', 'ft'), freqs, 'Hz'))));
plot(freqs, abs(squeeze(freqresp(G_md_light('d', 'ft'), freqs, 'Hz'))));
@ -62,8 +43,10 @@ hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d/f_{t}$ [m/N]'); xlabel('Frequency [Hz]');
xticks([1e0, 1e1, 1e2]);
xlim([1, 500]);
ax3 = nexttile();
%% Sensitivity to disturbances for three different nano-hexpod stiffnesses
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(G_vc_light('d', 'xf'), freqs, 'Hz'))), 'DisplayName', '$k_n = 0.01\,N/\mu m$');
plot(freqs, abs(squeeze(freqresp(G_md_light('d', 'xf'), freqs, 'Hz'))), 'DisplayName', '$k_n = 1 \,N/\mu m$');
@ -72,24 +55,12 @@ hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude $d/x_{f}$ [m/m]'); xlabel('Frequency [Hz]');
xticks([1e0, 1e1, 1e2]);
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
linkaxes([ax1,ax2,ax3],'x');
leg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
leg.ItemTokenSize(1) = 15
xlim([1, 500]);
% Open-Loop Dynamic Noise Budgeting
% Now, the power spectral density of the disturbances is taken into account to estimate the residual motion $d$ in each case.
% The Cumulative Amplitude Spectrum of the relative motion $d$ due to both the floor motion $x_f$ and the stage vibrations $f_t$ are shown in Figure ref:fig:uniaxial_cas_d_disturbances_stiffnesses for the three nano-hexapod stiffnesses.
% It is shown that the effect of the floor motion is much less than the stage vibrations, except for the soft nano-hexapod below 5Hz.
%% Cumulative Amplitude Spectrum of the relative motion d, due to both the floor motion and the stage vibrations
figure;
tiledlayout(1, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile();
hold on;
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_vc_light('d', 'ft'), f, 'Hz'))).^2)))), '-', 'color', colors(1,:), 'DisplayName', '$f_t$');
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_md_light('d', 'ft'), f, 'Hz'))).^2)))), '-', 'color', colors(2,:), 'DisplayName', '$f_t$');
@ -99,51 +70,41 @@ plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_xf.*abs(squeeze(freqresp(G_md_ligh
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_xf.*abs(squeeze(freqresp(G_pz_light('d', 'xf'), f, 'Hz'))).^2)))), '--', 'color', colors(3,:), 'DisplayName', '$x_f$ ($k_n = 100 \,N/\mu m$)');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Cumulative Ampl. Spectrum [m]'); xlabel('Frequency [Hz]');
legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2);
ylabel('CAS [m]'); xlabel('Frequency [Hz]');
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2);
leg.ItemTokenSize(1) = 15
xlim([1, 500]);
ylim([1e-12, 1e-6])
% #+name: fig:uniaxial_cas_d_disturbances_stiffnesses
% #+caption: Cumulative Amplitude Spectrum of the relative motion d, due to both the floor motion and the stage vibrations (light sample)
% #+RESULTS:
% [[file:figs/uniaxial_cas_d_disturbances_stiffnesses.png]]
% The total cumulative amplitude spectrum for the three nano-hexapod stiffnesses and for the two sample's masses are shown in Figure ref:fig:uniaxial_cas_d_disturbances_payload_masses.
% The conclusion is that the sample's mass has little effect on the cumulative amplitude spectrum of the relative motion $d$.
ylim([1e-12, 3e-6])
%% Cumulative Amplitude Spectrum of the relative motion d due to all disturbances, for two sample masses
figure;
tiledlayout(1, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile();
hold on;
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_vc_light('d', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_vc_light('d', 'xf'), f, 'Hz'))).^2)))), '-', ...
'color', colors(1,:), 'DisplayName', '$m_s = 1\,kg$');
'color', colors(1,:), 'DisplayName', '$m_s = 1\,kg$, $k_n = 0.01\,N/\mu m$');
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_md_light('d', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_md_light('d', 'xf'), f, 'Hz'))).^2)))), '-', ...
'color', colors(2,:), 'DisplayName', '$m_s = 1\,kg$');
'color', colors(2,:), 'DisplayName', '$m_s = 1\,kg$, $k_n = 1\,N/\mu m$');
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_pz_light('d', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_pz_light('d', 'xf'), f, 'Hz'))).^2)))), '-', ...
'color', colors(3,:), 'DisplayName', '$m_s = 1\,kg$');
'color', colors(3,:), 'DisplayName', '$m_s = 1\,kg$, $k_n = 100\,N/\mu m$');
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_vc_heavy('d', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_vc_heavy('d', 'xf'), f, 'Hz'))).^2)))), '--', ...
'color', colors(1,:), 'DisplayName', '$m_s = 50\,kg$ ($k_n = 0.01\,N/\mu m$)');
'color', colors(1,:), 'DisplayName', '$m_s = 50\,kg$, $k_n = 0.01\,N/\mu m$');
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_md_heavy('d', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_md_heavy('d', 'xf'), f, 'Hz'))).^2)))), '--', ...
'color', colors(2,:), 'DisplayName', '$m_s = 50\,kg$ ($k_n = 1\,N/\mu m$)');
'color', colors(2,:), 'DisplayName', '$m_s = 50\,kg$, $k_n = 1\,N/\mu m$');
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_pz_heavy('d', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_pz_heavy('d', 'xf'), f, 'Hz'))).^2)))), '--', ...
'color', colors(3,:), 'DisplayName', '$m_s = 50\,kg$ ($k_n = 100\,N/\mu m$)');
'color', colors(3,:), 'DisplayName', '$m_s = 50\,kg$, $k_n = 100\,N/\mu m$');
plot([1, 1e3], [20e-9, 20e-9], 'k--', 'HandleVisibility', 'off');
text(4, 1e-8, '20 nm RMS', 'horizontalalignment', 'center');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Cumulative Ampl. Spectrum [m]'); xlabel('Frequency [Hz]');
legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 2);
ylabel('CAS [m]'); xlabel('Frequency [Hz]');
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
leg.ItemTokenSize(1) = 15
xlim([1, 500]);
ylim([1e-11, 3e-6])
ylim([1e-12, 3e-6])

File diff suppressed because it is too large Load Diff

View File

@ -32,23 +32,9 @@ load('uniaxial_damped_plants.mat', 'G_iff_vc_light', 'G_iff_md_light', 'G_iff_pz
'G_rdc_vc_heavy', 'G_rdc_md_heavy', 'G_rdc_pz_heavy', ...
'G_dvf_vc_heavy', 'G_dvf_md_heavy', 'G_dvf_pz_heavy');
% Damped Plant Dynamics
% <<ssec:uniaxial_position_control_damped_dynamics>>
% As was shown in Section ref:sec:uniaxial_active_damping, all three proposed active damping techniques yield similar damping plants.
% Therefore, /Integral Force Feedback/ will be used in this section to study the HAC-LAC performance.
% The obtained damped plants for the three nano-hexapod stiffnesses are shown in Figure ref:fig:uniaxial_hac_iff_damped_plants_masses.
% For $k_n = 0.01\,N/\mu m$ and $k_n = 1\,N/\mu m$, except from the nano-hexapod mode, the dynamics is quite simple and can be well approximated by a second order plant.
% However, this is not the case for the stiff nano-hexapod ($k_n = 100\,N/\mu m$) where two modes can be seen (Figure ref:fig:uniaxial_hac_iff_damped_plants_masses, right).
% This is due to the interaction between the micro-station (modelled modes at 70Hz, 140Hz and 320Hz) and the nano-hexapod.
% Such effect will be explained in Section ref:sec:uniaxial_support_compliance.
%% Damped plant - Robustness to change of sample's mass
figure;
tiledlayout(3, 3, 'TileSpacing', 'Compact', 'Padding', 'None');
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
@ -62,41 +48,8 @@ text(20, 4e-8, sprintf('Small\nInteraction'), 'horizontalalignment', 'center');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
title('$k_n = 0.01\,N/\mu m$');
ylim([5e-10, 1e-3]);
ax2 = nexttile([2,1]);
hold on;
plot(freqs, abs(squeeze(freqresp(G_md_light('d', 'f'), freqs, 'Hz'))), 'color', [colors(1,:), 0.5]);
plot(freqs, abs(squeeze(freqresp(G_iff_md_light('d', 'f'), freqs, 'Hz'))), 'color', colors(1,:));
plot(freqs, abs(squeeze(freqresp(G_iff_md_mid( 'd', 'f'), freqs, 'Hz'))), 'color', colors(2,:));
plot(freqs, abs(squeeze(freqresp(G_iff_md_heavy('d', 'f'), freqs, 'Hz'))), 'color', colors(3,:));
loglog(10.^(0.4*cos([0:0.01:2*pi])+log10(200)), ...
10.^(0.8*sin([0:0.01:2*pi]-pi/4)+log10(2e-8)), 'k--');
text(40, 1e-8, sprintf('Small\nInteraction'), 'horizontalalignment', 'center');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
set(gca, 'XTickLabel',[]); set(gca, 'YTickLabel',[]);
title('$k_n = 1\,N/\mu m$');
ylim([5e-10, 1e-3]);
ax3 = nexttile([2,1]);
hold on;
plot(freqs, abs(squeeze(freqresp(G_pz_light('d', 'f'), freqs, 'Hz'))), 'color', [colors(1,:), 0.5], 'DisplayName', '$m_s = 1\,kg$, OL');
plot(freqs, abs(squeeze(freqresp(G_iff_pz_light('d', 'f'), freqs, 'Hz'))), 'color', colors(1,:), 'DisplayName', '$m_s = 1\,kg$, IFF');
plot(freqs, abs(squeeze(freqresp(G_iff_pz_mid( 'd', 'f'), freqs, 'Hz'))), 'color', colors(2,:), 'DisplayName', '$m_s = 25\,kg$, IFF');
plot(freqs, abs(squeeze(freqresp(G_iff_pz_heavy('d', 'f'), freqs, 'Hz'))), 'color', colors(3,:), 'DisplayName', '$m_s = 50\,kg$, IFF');
loglog(10.^(0.8*cos([0:0.01:2*pi])+log10(350)), ...
10.^(1.2*sin([0:0.01:2*pi])+log10(8e-9)), 'k--', 'HandleVisibility', 'off');
text(200, 5e-7, sprintf('$\\mu$ Station\nCoupling'), 'horizontalalignment', 'center');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
set(gca, 'XTickLabel',[]); set(gca, 'YTickLabel',[]);
title('$k_n = 100\,N/\mu m$');
ylim([5e-10, 1e-3]);
ldg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
ldg.ItemTokenSize = [20, 1];
ax1b = nexttile();
hold on;
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_vc_light('d', 'f'), freqs, 'Hz')))), 'color', [colors(1,:), 0.5]);
@ -110,6 +63,25 @@ xticks([1e0, 1e1, 1e2]);
yticks(-360:90:360);
ylim([-200, 20]);
linkaxes([ax1,ax1b],'x');
xlim([1, 1e3]);
figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax2 = nexttile([2,1]);
hold on;
plot(freqs, abs(squeeze(freqresp(G_md_light('d', 'f'), freqs, 'Hz'))), 'color', [colors(1,:), 0.5]);
plot(freqs, abs(squeeze(freqresp(G_iff_md_light('d', 'f'), freqs, 'Hz'))), 'color', colors(1,:));
plot(freqs, abs(squeeze(freqresp(G_iff_md_mid( 'd', 'f'), freqs, 'Hz'))), 'color', colors(2,:));
plot(freqs, abs(squeeze(freqresp(G_iff_md_heavy('d', 'f'), freqs, 'Hz'))), 'color', colors(3,:));
loglog(10.^(0.4*cos([0:0.01:2*pi])+log10(200)), ...
10.^(0.8*sin([0:0.01:2*pi]-pi/4)+log10(2e-8)), 'k--');
text(40, 1e-8, sprintf('Small\nInteraction'), 'horizontalalignment', 'center');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
set(gca, 'XTickLabel',[]); set(gca, 'YTickLabel',[]);
ylim([5e-10, 1e-3]);
ax2b = nexttile();
hold on;
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_md_light('d', 'f'), freqs, 'Hz')))), 'color', [colors(1,:), 0.5]);
@ -123,6 +95,27 @@ xticks([1e0, 1e1, 1e2]);
yticks(-360:90:360);
ylim([-200, 20]);
linkaxes([ax2,ax2b],'x');
xlim([1, 1e3]);
figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax3 = nexttile([2,1]);
hold on;
plot(freqs, abs(squeeze(freqresp(G_pz_light('d', 'f'), freqs, 'Hz'))), 'color', [colors(1,:), 0.5], 'DisplayName', '$m_s = 1\,kg$, OL');
plot(freqs, abs(squeeze(freqresp(G_iff_pz_light('d', 'f'), freqs, 'Hz'))), 'color', colors(1,:), 'DisplayName', '$m_s = 1\,kg$, IFF');
plot(freqs, abs(squeeze(freqresp(G_iff_pz_mid( 'd', 'f'), freqs, 'Hz'))), 'color', colors(2,:), 'DisplayName', '$m_s = 25\,kg$, IFF');
plot(freqs, abs(squeeze(freqresp(G_iff_pz_heavy('d', 'f'), freqs, 'Hz'))), 'color', colors(3,:), 'DisplayName', '$m_s = 50\,kg$, IFF');
loglog(10.^(0.8*cos([0:0.01:2*pi])+log10(350)), ...
10.^(1.2*sin([0:0.01:2*pi])+log10(8e-9)), 'k--', 'HandleVisibility', 'off');
text(200, 5e-7, sprintf('$\\mu$ Station\nCoupling'), 'horizontalalignment', 'center');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
set(gca, 'XTickLabel',[]); set(gca, 'YTickLabel',[]);
ylim([5e-10, 1e-3]);
ldg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
ldg.ItemTokenSize = [20, 1];
ax3b = nexttile();
hold on;
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_pz_light('d', 'f'), freqs, 'Hz')))), 'color', [colors(1,:), 0.5]);
@ -136,72 +129,9 @@ xticks([1e0, 1e1, 1e2]);
yticks(-360:90:360);
ylim([-200, 20]);
linkaxes([ax1,ax2,ax3,ax1b,ax2b,ax3b],'x');
linkaxes([ax3,ax3b],'x');
xlim([1, 1e3]);
% Position Feedback Controller
% <<ssec:uniaxial_position_control_design>>
% The objective now is to design a position feedback controller for each of the three nano-hexapods that are robust to the change of sample's mass.
% The required feedback bandwidth was approximately determined in Section ref:sec:uniaxial_noise_budgeting:
% - $\approx 10\,\text{Hz}$ for the soft nano-hexapod ($k_n = 0.01\,N/\mu m$).
% Near this frequency, the plants are equivalent to a mass line.
% The gain of the mass line can vary up to a fact $\approx 5$ (suspended mass from $16\,kg$ up to $65\,kg$).
% This means that the designed controller will need to have large gain margins to be robust to the change of sample's mass.
% - $\approx 50\,\text{Hz}$ for the relatively stiff nano-hexapod ($k_n = 1\,N/\mu m$).
% Similarly to the soft nano-hexapod, the plants near the crossover frequency are equivalent to a mass line.
% It will be probably easier to have a little bit more bandwidth in this configuration to be further away from the nano-hexapod suspension mode.
% - $\approx 100\,\text{Hz}$ for the stiff nano-hexapod ($k_n = 100\,N/\mu m$).
% Contrary to the two first nano-hexapod stiffnesses, here the plants have more complex dynamics near the wanted crossover frequency.
% The micro-station is not stiff enough to have a clear stiffness line at this frequency.
% Therefore, there are both a change of phase and gain depending on the sample's mass.
% This makes the robust design of the controller a little bit more complicated.
% Position feedback controllers are designed for each nano-hexapod such that it is stable for all considered sample masses with similar stability margins (see Nyquist plots in Figure ref:fig:uniaxial_nyquist_hac).
% These high authority controllers are generally composed of a lag at low frequency for disturbance rejection, a lead to increase the phase margin near the crossover frequency and a low pass filter to increase the robustness to high frequency dynamics.
% The controllers used for the three nano-hexapod are shown in Equation eqref:eq:uniaxial_hac_formulas, and the parameters are summarized in Table ref:tab:uniaxial_feedback_controller_parameters.
% \begin{subequations} \label{eq:uniaxial_hac_formulas}
% \begin{align}
% K_{\text{soft}}(s) &= g \cdot
% \underbrace{\frac{s + \omega_0}{s + \omega_i}}_{\text{lag}} \cdot
% \underbrace{\frac{1 + \frac{s}{\omega_c/\sqrt{a}}}{1 + \frac{s}{\omega_c \sqrt{a}}}}_{\text{lead}} \cdot
% \underbrace{\frac{1}{1 + \frac{s}{\omega_l}}}_{\text{LPF}} \\
% K_{\text{mid}}(s) &= g \cdot
% \underbrace{\left(\frac{s + \omega_0}{s + \omega_i}\right)^2}_{\text{2 lags}} \cdot
% \underbrace{\frac{1 + \frac{s}{\omega_c/\sqrt{a}}}{1 + \frac{s}{\omega_c \sqrt{a}}}}_{\text{lead}} \cdot
% \underbrace{\frac{1}{1 + \frac{s}{\omega_l}}}_{\text{LPF}} \\
% K_{\text{stiff}}(s) &= g \cdot
% \underbrace{\left(\frac{1}{s + \omega_i}\right)^2}_{\text{2 lags}} \cdot
% \underbrace{\left(\frac{1 + \frac{s}{\omega_c/\sqrt{a}}}{1 + \frac{s}{\omega_c \sqrt{a}}}\right)^2}_{\text{2 leads}} \cdot
% \underbrace{\frac{1}{1 + \frac{s}{\omega_l}}}_{\text{LPF}}
% \end{align}
% \end{subequations}
% #+name: tab:uniaxial_feedback_controller_parameters
% #+caption: Parameters used for the position feedback controllers
% #+attr_latex: :environment tabularx :width \linewidth :align lXXX
% #+attr_latex: :center t :booktabs t
% | | *Soft* | *Moderately stiff* | *Stiff* |
% |--------+-------------------------------------------+--------------------------------------------+------------------------------------------|
% | *Gain* | $g = 4 \cdot 10^5$ | $g = 3 \cdot 10^6$ | $g = 6 \cdot 10^12$ |
% | *Lead* | $a = 5$, $\omega_c = 20\,Hz$ | $a = 4$, $\omega_c = 70\,Hz$ | $a = 5$, $\omega_c = 100\,Hz$ |
% | *Lag* | $\omega_0 = 5\,Hz$, $\omega_i = 0.01\,Hz$ | $\omega_0 = 20\,Hz$, $\omega_i = 0.01\,Hz$ | $\omega_i = 0.01\,Hz$ |
% | *LPF* | $\omega_l = 200\,Hz$ | $\omega_l = 300\,Hz$ | $\omega_l = 500\,Hz$ |
% The loop gains for the three nano-hexapod are shown in Figure ref:fig:uniaxial_loop_gain_hac.
% We can see that:
% - for the soft and moderately stiff nano-hexapod, the crossover frequency varies a lot with the sample mass.
% This is due to the fact that the crossover frequency corresponds to the mass line of the plant.
% - for the stiff nano-hexapod, the obtained crossover frequency is not at high as what was estimated necessary.
% The crossover frequency in that case is close to the stiffness line of the plant, which makes the robust design of the controller easier.
% Note that these controllers were quickly tuned by hand and not designed using any optimization methods.
% The goal is just to have a first estimation of the attainable performance.
%% High Authority Controller - Soft Nano-Hexapod
% Lead to increase phase margin
a = 5; % Amount of phase lead / width of the phase lead / high frequency gain
@ -311,63 +241,163 @@ legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
xlim([-3.8, 0.2]); ylim([-2, 2]);
axis square;
%% Nyquist Plot - Hight Authority Controller - Soft Nano-Hexapod
figure;
hold on;
plot(real(L_vc_light), +imag(L_vc_light), '-', 'color', colors(1,:), 'DisplayName', '$m_s = 1\,$kg')
plot(real(L_vc_light), -imag(L_vc_light), '-', 'color', colors(1,:), 'HandleVisibility', 'off')
plot(real(L_vc_mid ), +imag(L_vc_mid ), '-', 'color', colors(2,:), 'DisplayName', '$m_s = 25\,$kg')
plot(real(L_vc_mid ), -imag(L_vc_mid ), '-', 'color', colors(2,:), 'HandleVisibility', 'off')
plot(real(L_vc_heavy), +imag(L_vc_heavy), '-', 'color', colors(3,:), 'DisplayName', '$m_s = 50\,$kg')
plot(real(L_vc_heavy), -imag(L_vc_heavy), '-', 'color', colors(3,:), 'HandleVisibility', 'off')
% Minimum modul margin
vc_mod_margin = min([min(abs(L_vc_light + 1)), min(abs(L_vc_mid + 1)), min(abs(L_vc_heavy + 1))]);
plot(-1 + vc_mod_margin*cos(linspace(0,2*pi,100)), vc_mod_margin*sin(linspace(0,2*pi,100)), 'k-', 'DisplayName', sprintf('$r = %.2f$', vc_mod_margin))
plot(-1, 0, 'kx', 'HandleVisibility', 'off');
hold off;
set(gca, 'XScale', 'lin'); set(gca, 'YScale', 'lin');
xlabel('Real'); ylabel('Imag');
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
leg.ItemTokenSize(1) = 15
xlim([-3.8, 0.2]); ylim([-2, 2]);
axis square;
%% Nyquist Plot - Hight Authority Controller - Soft Nano-Hexapod
figure;
hold on;
plot(real(L_md_light), +imag(L_md_light), '-', 'color', colors(1,:), 'DisplayName', '$m_s = 1\,$kg')
plot(real(L_md_light), -imag(L_md_light), '-', 'color', colors(1,:), 'HandleVisibility', 'off')
plot(real(L_md_mid ), +imag(L_md_mid ), '-', 'color', colors(2,:), 'DisplayName', '$m_s = 25\,$kg')
plot(real(L_md_mid ), -imag(L_md_mid ), '-', 'color', colors(2,:), 'HandleVisibility', 'off')
plot(real(L_md_heavy), +imag(L_md_heavy), '-', 'color', colors(3,:), 'DisplayName', '$m_s = 50\,$kg')
plot(real(L_md_heavy), -imag(L_md_heavy), '-', 'color', colors(3,:), 'HandleVisibility', 'off')
% Minimum modul margin
md_mod_margin = min([min(abs(L_md_light + 1)), min(abs(L_md_mid + 1)), min(abs(L_md_heavy + 1))]);
plot(-1 + md_mod_margin*cos(linspace(0,2*pi,100)), md_mod_margin*sin(linspace(0,2*pi,100)), 'k-', 'DisplayName', sprintf('$r = %.2f$', md_mod_margin))
plot(-1, 0, 'kx', 'HandleVisibility', 'off');
hold off;
set(gca, 'XScale', 'lin'); set(gca, 'YScale', 'lin');
xlabel('Real'); ylabel('Imag');
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
leg.ItemTokenSize(1) = 15
xlim([-3.8, 0.2]); ylim([-2, 2]);
axis square;
% #+name: fig:uniaxial_nyquist_hac
% #+caption: Nyquist Plot - Hight Authority Controller for all three nano-hexapod stiffnesses (soft one in blue, moderately stiff in red and very stiff in yellow) and all sample masses (corresponding to the three curves of each color)
% #+RESULTS:
% [[file:figs/uniaxial_nyquist_hac.png]]
%% Nyquist Plot - Hight Authority Controller - Soft Nano-Hexapod
figure;
hold on;
plot(real(L_pz_light), +imag(L_pz_light), '-', 'color', colors(1,:), 'DisplayName', '$m_s = 1\,$kg')
plot(real(L_pz_light), -imag(L_pz_light), '-', 'color', colors(1,:), 'HandleVisibility', 'off')
plot(real(L_pz_mid ), +imag(L_pz_mid ), '-', 'color', colors(2,:), 'DisplayName', '$m_s = 25\,$kg')
plot(real(L_pz_mid ), -imag(L_pz_mid ), '-', 'color', colors(2,:), 'HandleVisibility', 'off')
plot(real(L_pz_heavy), +imag(L_pz_heavy), '-', 'color', colors(3,:), 'DisplayName', '$m_s = 50\,$kg')
plot(real(L_pz_heavy), -imag(L_pz_heavy), '-', 'color', colors(3,:), 'HandleVisibility', 'off')
% Minimum modul margin
pz_mod_margin = min([min(abs(L_pz_light + 1)), min(abs(L_pz_mid + 1)), min(abs(L_pz_heavy + 1))]);
plot(-1 + pz_mod_margin*cos(linspace(0,2*pi,100)), pz_mod_margin*sin(linspace(0,2*pi,100)), 'k-', 'DisplayName', sprintf('$r = %.2f$', pz_mod_margin))
plot(-1, 0, 'kx', 'HandleVisibility', 'off');
hold off;
set(gca, 'XScale', 'lin'); set(gca, 'YScale', 'lin');
xlabel('Real'); ylabel('Imag');
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
leg.ItemTokenSize(1) = 15
xlim([-3.8, 0.2]); ylim([-2, 2]);
axis square;
%% Loop Gain - High Authority Controller for all three nano-hexapod stiffnesses and all sample masses
%% Loop Gain - High Authority Controller - Relatively soft nano-hexapod
figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
plot(freqs, abs(L_vc_light), 'color', [colors(1,:), 0.5], 'DisplayName', '$k_n = 0.01\,N/\mu m$');
plot(freqs, abs(L_vc_mid), 'color', [colors(1,:), 0.5], 'HandleVisibility', 'off');
plot(freqs, abs(L_vc_heavy), 'color', [colors(1,:), 0.5], 'HandleVisibility', 'off');
plot(freqs, abs(L_md_light), 'color', [colors(2,:), 0.5], 'DisplayName', '$k_n = 1\,N/\mu m$');
plot(freqs, abs(L_md_mid), 'color', [colors(2,:), 0.5], 'HandleVisibility', 'off');
plot(freqs, abs(L_md_heavy), 'color', [colors(2,:), 0.5], 'HandleVisibility', 'off');
plot(freqs, abs(L_pz_light), 'color', [colors(3,:), 0.5], 'DisplayName', '$k_n = 100\,N/\mu m$');
plot(freqs, abs(L_pz_mid), 'color', [colors(3,:), 0.5], 'HandleVisibility', 'off');
plot(freqs, abs(L_pz_heavy), 'color', [colors(3,:), 0.5], 'HandleVisibility', 'off');
plot(freqs, abs(L_vc_light), 'color', colors(1,:), 'DisplayName', '$m_s = 1\,$kg');
plot(freqs, abs(L_vc_mid), 'color', colors(2,:), 'DisplayName', '$m_s = 25\,$kg');
plot(freqs, abs(L_vc_heavy), 'color', colors(3,:), 'DisplayName', '$m_s = 50\,$kg');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Loop Gain'); set(gca, 'XTickLabel',[]);
ylim([1e-3, 1e3]);
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
yticks([1e-2, 1, 1e2])
leg = legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
leg.ItemTokenSize(1) = 15
ax2 = nexttile;
hold on;
plot(freqs, 180/pi*unwrap(angle(L_vc_light)), 'color', [colors(1,:), 0.5]);
plot(freqs, 180/pi*unwrap(angle(L_vc_mid )), 'color', [colors(1,:), 0.5]);
plot(freqs, 180/pi*unwrap(angle(L_vc_heavy)), 'color', [colors(1,:), 0.5]);
plot(freqs, 180/pi*unwrap(angle(L_md_light)), 'color', [colors(2,:), 0.5]);
plot(freqs, 180/pi*unwrap(angle(L_md_mid )), 'color', [colors(2,:), 0.5]);
plot(freqs, 180/pi*unwrap(angle(L_md_heavy)), 'color', [colors(2,:), 0.5]);
plot(freqs, 180/pi*unwrap(angle(L_pz_light)), 'color', [colors(3,:), 0.5]);
plot(freqs, 180/pi*unwrap(angle(L_pz_mid )), 'color', [colors(3,:), 0.5]);
plot(freqs, 180/pi*unwrap(angle(L_pz_heavy)), 'color', [colors(3,:), 0.5]);
plot(freqs, 180/pi*unwrap(angle(L_vc_light)), 'color', colors(1,:));
plot(freqs, 180/pi*unwrap(angle(L_vc_mid )), 'color', colors(2,:));
plot(freqs, 180/pi*unwrap(angle(L_vc_heavy)), 'color', colors(3,:));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off;
yticks(-360:90:360);
ylim([-270, 0]);
yticks(-360:45:360);
ylim([-225, -90]);
linkaxes([ax1,ax2],'x');
xlim([1, 500]);
xticks([1, 10, 100]);
% Closed-Loop Noise Budgeting
% <<ssec:uniaxial_position_control_cl_noise_budget>>
%% Loop Gain - High Authority Controller - Relatively stiff nano-hexapod
figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
% The high authority position feedback controllers are then implemented and the closed-loop sensitivity to disturbances are computed.
% These are compared with the open-loop and damped plants cases in Figure ref:fig:uniaxial_sensitivity_dist_hac_lac for just one configuration (moderately stiff nano-hexapod with 25kg sample's mass).
% As expected, the sensitivity to disturbances is decreased in the controller bandwidth and slightly increase outside this bandwidth.
ax1 = nexttile([2,1]);
hold on;
plot(freqs, abs(L_md_light), 'color', colors(1,:), 'DisplayName', '$m_s = 1\,$kg');
plot(freqs, abs(L_md_mid), 'color', colors(2,:), 'DisplayName', '$m_s = 25\,$kg');
plot(freqs, abs(L_md_heavy), 'color', colors(3,:), 'DisplayName', '$m_s = 50\,$kg');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Loop Gain'); set(gca, 'XTickLabel',[]);
ylim([1e-3, 1e3]);
yticks([1e-2, 1, 1e2])
ax2 = nexttile;
hold on;
plot(freqs, 180/pi*unwrap(angle(L_md_light)), 'color', colors(1,:));
plot(freqs, 180/pi*unwrap(angle(L_md_mid )), 'color', colors(2,:));
plot(freqs, 180/pi*unwrap(angle(L_md_heavy)), 'color', colors(3,:));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off;
yticks(-360:45:360);
ylim([-225, -90]);
linkaxes([ax1,ax2],'x');
xlim([1, 500]);
xticks([1, 10, 100]);
%% Loop Gain - High Authority Controller - Stiff nano-hexapod
figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
plot(freqs, abs(L_pz_light), 'color', colors(1,:), 'DisplayName', '$m_s = 1\,$kg');
plot(freqs, abs(L_pz_mid), 'color', colors(2,:), 'DisplayName', '$m_s = 25\,$kg');
plot(freqs, abs(L_pz_heavy), 'color', colors(3,:), 'DisplayName', '$m_s = 50\,$kg');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Loop Gain'); set(gca, 'XTickLabel',[]);
ylim([1e-3, 1e3]);
yticks([1e-2, 1, 1e2])
ax2 = nexttile;
hold on;
plot(freqs, 180/pi*unwrap(angle(L_pz_light)), 'color', colors(1,:));
plot(freqs, 180/pi*unwrap(angle(L_pz_mid )), 'color', colors(2,:));
plot(freqs, 180/pi*unwrap(angle(L_pz_heavy)), 'color', colors(3,:));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
hold off;
yticks(-360:45:360);
ylim([-225, -90]);
linkaxes([ax1,ax2],'x');
xlim([1, 500]);
xticks([1, 10, 100]);
%% Compute Closed Loop Systems
G_hac_iff_vc_light = feedback(G_iff_vc_light, K_hac_vc, 'name', -1);
@ -391,9 +421,6 @@ isstable(G_hac_iff_pz_light) && isstable(G_hac_iff_pz_mid) && isstable(G_hac_iff
%% Change of sensitivity to disturbances with LAC and with HAC-LAC
figure;
tiledlayout(1, 3, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile();
hold on;
plot(freqs, abs(squeeze(freqresp(G_md_mid( 'd', 'fs'), freqs, 'Hz'))), 'k-');
plot(freqs, abs(squeeze(freqresp(G_iff_md_mid('d', 'fs'), freqs, 'Hz'))), 'color', colors(1,:));
@ -402,8 +429,9 @@ hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xticks([1e0, 1e1, 1e2]);
ylabel('Amplitude $d/f_{s}$ [m/N]'); xlabel('Frequency [Hz]');
xlim([1, 500]);
ax2 = nexttile();
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(G_md_mid( 'd', 'ft'), freqs, 'Hz'))), 'k-');
plot(freqs, abs(squeeze(freqresp(G_iff_md_mid('d', 'ft'), freqs, 'Hz'))), 'color', colors(1,:));
@ -412,8 +440,9 @@ hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xticks([1e0, 1e1, 1e2]);
ylabel('Amplitude $d/f_{t}$ [m/N]'); xlabel('Frequency [Hz]');
xlim([1, 500]);
ax3 = nexttile();
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(G_md_mid( 'd', 'xf'), freqs, 'Hz'))), 'k-', 'DisplayName', 'OL');
plot(freqs, abs(squeeze(freqresp(G_iff_md_mid('d', 'xf'), freqs, 'Hz'))), 'color', colors(1,:), 'DisplayName', 'IFF');
@ -423,27 +452,10 @@ set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xticks([1e0, 1e1, 1e2]);
ylabel('Amplitude $d/x_{f}$ [m/m]'); xlabel('Frequency [Hz]');
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
linkaxes([ax1,ax2,ax3],'x');
xlim([1, 500]);
% #+name: fig:uniaxial_sensitivity_dist_hac_lac
% #+caption: Change of sensitivity to disturbances with LAC and with HAC-LAC. Nano-Hexapod with $k_n = 1\,N/\mu m$ and sample mass of $25\,kg$ are used.
% #+RESULTS:
% [[file:figs/uniaxial_sensitivity_dist_hac_lac.png]]
% The cumulative amplitude spectrum of the motion $d$ is computed for all nano-hexapod configurations, all sample masses and in the open-loop (OL), damped (IFF) and position controlled (HAC-IFF) cases.
% The results are shown in Figure ref:fig:uniaxial_cas_hac_lac.
% Obtained root mean square values of the distance $d$ are better for the soft nano-hexapod ($\approx 25\,nm$ to $\approx 35\,nm$ depending on the sample's mass) than for the stiffer nano-hexapod (from $\approx 30\,nm$ to $\approx 70\,nm$).
%% Cumulative Amplitude Spectrum for all three nano-hexapod stiffnesses - Comparison of OL, IFF and HAC-LAC cases
figure;
tiledlayout(1, 3, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile();
hold on;
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_vc_mid('d', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_vc_mid('d', 'xf'), f, 'Hz'))).^2)))), '-', ...
@ -477,9 +489,10 @@ set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xticks([1e0, 1e1, 1e2]);
ylabel('CAS of $d$ [m]'); xlabel('Frequency [Hz]');
legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
title('$k_n = 0.01\,N/\mu m$');
xlim([1, 500]);
ylim([2e-10, 3e-6])
ax2 = nexttile();
figure;
hold on;
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_md_mid('d', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_md_mid('d', 'xf'), f, 'Hz'))).^2)))), '-', ...
@ -512,9 +525,10 @@ hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xticks([1e0, 1e1, 1e2]);
xlabel('Frequency [Hz]'); set(gca, 'YTickLabel',[]);
title('$k_n = 1\,N/\mu m$');
xlim([1, 500]);
ylim([2e-10, 3e-6])
ax3 = nexttile();
figure;
hold on;
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_pz_mid('d', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_pz_mid('d', 'xf'), f, 'Hz'))).^2)))), '-', ...
@ -547,8 +561,5 @@ hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xticks([1e0, 1e1, 1e2]);
xlabel('Frequency [Hz]'); set(gca, 'YTickLabel',[]);
title('$k_n = 100\,N/\mu m$');
linkaxes([ax1,ax2,ax3],'xy');
xlim([1, 500]);
ylim([2e-10, 3e-6])

View File

@ -16,15 +16,6 @@ load('uniaxial_micro_station_parameters.mat')
%% Frequency Vector [Hz]
freqs = logspace(0, 3, 1000);
% Neglected support compliance
% Let's first neglect the limited compliance of the micro-station and use the uniaxial model show in Figure ref:fig:uniaxial_support_compliance_nano_hexapod_only.
% Let's choose a nano-hexapod mass (including the payload) of $20\,\text{kg}$ and three hexapod stiffnesses such that their resonance frequencies are at $\omega_{\nu} = 10\,\text{Hz}$, $\omega_{\nu} = 70\,\text{Hz}$ and $\omega_{\nu} = 400\,\text{Hz}$.
% The obtained transfer functions from $F$ to $L^\prime$ are shown in Figure ref:fig:uniaxial_effect_support_compliance_neglected.
% When neglecting the support compliance, large feedback bandwidth can be achieve for all three Nano-Hexapod.
%% Nano-Hexapod Parameters
m = 20; % Mass [kg]
@ -37,7 +28,7 @@ k_mid = m*(2*pi*70)^2; % Stiffness [N/m]
c_mid = 0.1*2*sqrt(m*k_mid); % Damping [N/(m/s)]
% "Stiff" Nano-Hexapod
k_stiff = m*(2*pi*400)^2; % Stiffness [N/m]
k_stiff = m*(2*pi*350)^2; % Stiffness [N/m]
c_stiff = 0.1*2*sqrt(m*k_stiff); % Damping [N/(m/s)]
%% Compute the transfer functions for considered nano-hexapods - From F to L'
@ -50,54 +41,46 @@ G_mid_a = 1/(m*s^2 + c_mid*s + k_mid); % Transfer function from F to L'
% "Stiff" Nano-Hexapod
G_stiff_a = 1/(m*s^2 + c_stiff*s + k_stiff); % Transfer function from F to L'
%% Obtained transfer functions from F to L when neglecing support compliance
%% Obtained transfer functions from F to L when neglecting support compliance
freqs = logspace(0, 3, 1000);
figure;
tiledlayout(1, 3, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile();
hold on;
plot(freqs, abs(squeeze(freqresp(G_soft_a, freqs, 'Hz'))), '-', 'color', colors(1,:));
text(50, 5e-5, '$\omega_\nu =$ 10Hz', 'horizontalalignment', 'center');
text(50, 5e-5, '$\omega_n =$ 10Hz', 'horizontalalignment', 'center');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Magnitude [m/N]');
xlabel('Frequency [Hz]'); ylabel('Magnitude [m/N]');
xlim([freqs(1), freqs(end)]);
xticks([1e0, 1e1, 1e2]);
title('"Soft" $\nu$-hexapod');
ylim([1e-9, 1e-4]);
yticks([1e-9, 1e-7, 1e-5]);
ax2 = nexttile();
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(G_mid_a, freqs, 'Hz'))), '-', 'color', colors(1,:));
text(70, 3e-6, '$\omega_\nu =$ 70Hz', 'horizontalalignment', 'center');
text(70, 3e-6, '$\omega_n =$ 70Hz', 'horizontalalignment', 'center');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]');
set(gca, 'YTickLabel',[]);
xlabel('Frequency [Hz]'); set(gca, 'YTickLabel',[]);
xlim([freqs(1), freqs(end)]);
xticks([1e0, 1e1, 1e2]);
title('"Mid" $\nu$-hexapod');
ylim([1e-9, 1e-4]);
yticks([1e-9, 1e-7, 1e-5]);
ax3 = nexttile();
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(G_stiff_a, freqs, 'Hz'))), '-', 'color', colors(1,:), ...
'DisplayName', '$L^\prime/F$');
text(200, 8e-8, '$\omega_\nu =$ 400Hz', 'horizontalalignment', 'center');
text(200, 8e-8, '$\omega_n =$ 400Hz', 'horizontalalignment', 'center');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
set(gca, 'YTickLabel',[]);
xlabel('Frequency [Hz]'); set(gca, 'YTickLabel',[]);
legend('location', 'northeast');
xticks([1e0, 1e1, 1e2]);
title('"Stiff" $\nu$-hexapod');
linkaxes([ax1,ax2,ax3],'xy');
xlim([freqs(1), freqs(end)]);
xticks([1e0, 1e1, 1e2]);
ylim([1e-9, 1e-4]);
% Effect of support compliance on $L/F$
% Let's now add some support compliance and use the model shown in Figure ref:fig:uniaxial_support_compliance_test_system.
% The parameters of the support (i.e. $m^{\prime}$, $c^{\prime}$ and $k^{\prime}$) are chosen in such a way that the main vertical mode at $\omega_\mu = 70\,\text{Hz}$ seen on the micro-station is matched (Figure ref:fig:uniaxial_comp_frf_meas_model, yellow curve).
yticks([1e-9, 1e-7, 1e-5]);
%% Parameters of the support compliance
w0h = 2*pi*70; % [rad/s]
@ -120,27 +103,10 @@ G_mid_r = (1 - m*s^2*G_mid)/(c_mid*s + k_mid); % L/F
G_stiff = (mh*s^2 + ch*s + kh)/(m*s^2*(c_stiff*s + k_stiff) + (m*s^2 + c_stiff*s + k_stiff)*(mh*s^2 + ch*s + kh)); % d/F
G_stiff_r = (1 - m*s^2*G_stiff)/(c_stiff*s + k_stiff); % L/F
% The transfer functions from $F$ to $L$ (i.e. control of the relative motion of the nano-hexapod) and from $L$ to $d$ (i.e. control of the position between the nano-hexapod and the fixed granite) can then be computed.
% When the relative displacement of the nano-hexapod $L$ is to be controlled (dynamics shown in Figure ref:fig:uniaxial_effect_support_compliance_dynamics), having a stiff nano-hexapod (i.e. with a suspension mode at higher frequency than the mode of the support) makes the dynamics less affected by the limited support compliance (Figure ref:fig:uniaxial_effect_support_compliance_dynamics, right).
% This is why it is very common to have stiff piezoelectric stages fixed at the very top of positioning stages.
% In such case, the control of the piezoelectric stage using its integrated metrology (typically capacitive sensors) is quite simple as the plant is not much affected by the dynamics of the support on which is it fixed.
% # Add references of such stations with piezo stages on top
% If a soft nano-hexapod is used, the support dynamics appears in the dynamics between $F$ and $L$ (see Figure ref:fig:uniaxial_effect_support_compliance_dynamics, left) which will impact the control robustness and performance.
%% Effect of the support compliance on the transfer functions from F to L and from F to d
figure;
freqs = logspace(0, 3, 1000);
figure;
tiledlayout(1, 3, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile();
hold on;
plot(freqs, abs(squeeze(freqresp(G_soft_a, freqs, 'Hz'))), '-', 'color', colors(1,:));
plot(freqs, abs(squeeze(freqresp(G_soft_r, freqs, 'Hz'))), '-', 'color', colors(2,:));
@ -149,23 +115,26 @@ loglog(10.^(0.3*cos(0:0.01:2*pi)+log10(60)), ...
text(8, 3e-7, sprintf('Support\nDynamics'), 'horizontalalignment', 'center');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude [m/N]');
xlim([freqs(1), freqs(end)]);
xticks([1e0, 1e1, 1e2]);
title('"Soft" $\nu$-hexapod');
ylabel('Magnitude [m/N]');
ylim([1e-9, 1e-4]);
yticks([1e-9, 1e-7, 1e-5]);
ax2 = nexttile();
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(G_mid_a, freqs, 'Hz'))), '-', 'color', colors(1,:));
plot(freqs, abs(squeeze(freqresp(G_mid_r, freqs, 'Hz'))), '-', 'color', colors(2,:));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]');
xticks([1e0, 1e1, 1e2]);
title('"Mid" $\nu$-hexapod');
set(gca, 'YTickLabel',[]);
xlim([freqs(1), freqs(end)]);
xticks([1e0, 1e1, 1e2]);
ylim([1e-9, 1e-4]);
yticks([1e-9, 1e-7, 1e-5]);
ax3 = nexttile();
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(G_stiff_a, freqs, 'Hz'))), '-', 'color', colors(1,:), ...
'DisplayName', '$L^\prime/F$');
@ -176,30 +145,17 @@ loglog(10.^(0.3*cos(0:0.01:2*pi)+log10(50)), ...
text(50, 3e-8, 'No effect', 'horizontalalignment', 'center');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
set(gca, 'YTickLabel',[]);
xticks([1e0, 1e1, 1e2]);
title('"Stiff" $\nu$-hexapod');
xlabel('Frequency [Hz]'); set(gca, 'YTickLabel',[]);
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
linkaxes([ax1,ax2,ax3],'xy');
xlim([freqs(1), freqs(end)]);
xticks([1e0, 1e1, 1e2]);
ylim([1e-9, 1e-4]);
% Effect of support compliance on $d/F$
% When the motion to be controlled is the relative displacement $d$ between the granite and the nano-hexapod's top platform, the effect of the support compliance on the plant dynamics is opposite than what was previously observed.
% Indeed, using a "soft" nano-hexapod (i.e. with a suspension mode at lower frequency than the mode of the support) makes the dynamics less affected by the support dynamics (Figure ref:fig:uniaxial_effect_support_compliance_dynamics_d, left).
% On the contrary, if a "stiff" nano-hexapod is used, the support dynamics appears in the plant dynamics (Figure ref:fig:uniaxial_effect_support_compliance_dynamics_d, right).
yticks([1e-9, 1e-7, 1e-5]);
%% Effect of the support compliance on the transfer functions from F to L and from F to d
figure;
freqs = logspace(0, 3, 1000);
figure;
tiledlayout(1, 3, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile();
hold on;
plot(freqs, abs(squeeze(freqresp(G_soft_a, freqs, 'Hz'))), '-', 'color', colors(1,:));
plot(freqs, abs(squeeze(freqresp(G_soft, freqs, 'Hz'))), '-', 'color', colors(3,:));
@ -208,23 +164,26 @@ loglog(10.^(0.3*cos(0:0.01:2*pi)+log10(60)), ...
text(8, 3e-7, 'No effect', 'horizontalalignment', 'center');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]'); ylabel('Magnitude [m/N]');
xlim([freqs(1), freqs(end)]);
xticks([1e0, 1e1, 1e2]);
title('"Soft" $\nu$-hexapod');
ylabel('Magnitude [m/N]');
ylim([1e-9, 1e-4]);
yticks([1e-9, 1e-7, 1e-5]);
ax2 = nexttile();
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(G_mid_a, freqs, 'Hz'))), '-', 'color', colors(1,:));
plot(freqs, abs(squeeze(freqresp(G_mid, freqs, 'Hz'))), '-', 'color', colors(3,:));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlabel('Frequency [Hz]');
xticks([1e0, 1e1, 1e2]);
title('"Mid" $\nu$-hexapod');
set(gca, 'YTickLabel',[]);
xlim([freqs(1), freqs(end)]);
xticks([1e0, 1e1, 1e2]);
ylim([1e-9, 1e-4]);
yticks([1e-9, 1e-7, 1e-5]);
ax3 = nexttile();
figure;
hold on;
plot(freqs, abs(squeeze(freqresp(G_stiff_a, freqs, 'Hz'))), '-', 'color', colors(1,:), ...
'DisplayName', '$L^\prime/F$');
@ -235,11 +194,9 @@ loglog(10.^(0.4*cos(0:0.01:2*pi)+log10(50)), ...
text(50, 2e-7, sprintf('Support\nDynamics'), 'horizontalalignment', 'center');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
set(gca, 'YTickLabel',[]);
xticks([1e0, 1e1, 1e2]);
title('"Stiff" $\nu$-hexapod');
xlabel('Frequency [Hz]'); set(gca, 'YTickLabel',[]);
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
linkaxes([ax1,ax2,ax3],'xy');
xlim([freqs(1), freqs(end)]);
xticks([1e0, 1e1, 1e2]);
ylim([1e-9, 1e-4]);
yticks([1e-9, 1e-7, 1e-5]);

View File

@ -30,21 +30,6 @@ load('uniaxial_high_authority_controllers.mat', 'K_hac_vc', 'K_hac_md', 'K_hac_p
%% Frequency Vector [Hz]
freqs = logspace(0, 3, 1000);
% Impact on the plant dynamics
% <<ssec:uniaxial_payload_dynamics_effect_dynamics>>
% To study the impact of sample dynamics, the following sample configurations are considered:
% - rigid sample, corresponding to Figure ref:fig:uniaxial_paylaod_dynamics_rigid_schematic
% - two flexible samples with a resonance at $\omega_s = 200\,\text{Hz}$ and at $\omega_s = 20\,\text{Hz}$ respectively, corresponding to Figure ref:fig:uniaxial_paylaod_dynamics_schematic
% - for all cases, two sample masses are considered: $m_s = 1\,\text{kg}$ and $m_s = 50\,\text{kg}$
% The transfer functions from the nano-hexapod force to the motion of the nano-hexapod top platform are computed for all the above configurations and are compared for a soft Nano-Hexapod $k_n = 0.01\,N/\mu m$ in Figure ref:fig:uniaxial_payload_dynamics_soft_nano_hexapod.
% It can be seen that the mode of the sample adds an anti-resonance followed by a resonance (zero/pole pattern).
% The frequency of the anti-resonance corresponds to the "free" resonance of the sample $\omega_s = \sqrt{k_s/m_s}$.
% The flexibility of the sample also changes the high frequency gain (the mass line is shifted from $\frac{1}{(m_n + m_s)s^2}$ to $\frac{1}{m_ns^2}$).
%% Soft Nano-Hexapod
% Light payload mass
mn = 15; % Nano-Hexapod mass [kg]
@ -90,7 +75,7 @@ G_vc_stiff_heavy = (ms*s^2 + cs*s + ks)/((mn*s^2 + cn*s + kn)*(ms*s^2 + cs*s + k
%% Effect of the payload dynamics on the soft Nano-Hexapod. Light sample on the right, and heavy sample on the left
figure;
tiledlayout(3, 2, 'TileSpacing', 'Compact', 'Padding', 'None');
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
@ -101,24 +86,6 @@ hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
ylim([1e-10, 1e-2])
title('$k_n = 0.01\,N/\mu m$, $m_s = 1\,kg$');
ax2 = nexttile([2,1]);
hold on;
plot(freqs, abs(squeeze(freqresp(G_vc_rigid_heavy, freqs, 'Hz'))), '-', 'color', colors(1,:), 'DisplayName', 'Rigid sample');
plot(freqs, abs(squeeze(freqresp(G_vc_stiff_heavy, freqs, 'Hz'))), '-', 'color', colors(2,:), 'DisplayName', '$\omega_s = 200\,Hz$');
plot(freqs, abs(squeeze(freqresp(G_vc_soft_heavy, freqs, 'Hz'))), '-', 'color', colors(3,:), 'DisplayName', '$\omega_s = 20\,Hz$');
plot(freqs, abs(squeeze(freqresp(1/(mn*s^2), freqs, 'Hz'))), '-', 'color', [0,0,0,0.5], 'DisplayName', '$\frac{1}{m_n s^2}$');
plot(freqs, abs(squeeze(freqresp(1/((mn + ms)*s^2), freqs, 'Hz'))), '--', 'color', [0,0,0,0.5], 'DisplayName', '$\frac{1}{(m_n + m_s) s^2}$');
text(2.2, 3e-3, '$\omega_n = \sqrt{\frac{k_n}{m_n + m_s}}$', 'horizontalalignment', 'left');
text(20, 1e-8, '$\omega_s = \sqrt{\frac{k_s}{m_s}}$', 'horizontalalignment', 'center');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
set(gca, 'XTickLabel',[]); set(gca, 'YTickLabel',[]);
title('$k_n = 0.01\,N/\mu m$, $m_s = 50\,kg$');
ldg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
ldg.ItemTokenSize = [20, 1];
ylim([1e-10, 1e-2])
ax1b = nexttile();
hold on;
@ -132,6 +99,28 @@ xticks([1e0, 1e1, 1e2]);
yticks(-360:90:360);
ylim([-200, 20]);
linkaxes([ax1,ax1b],'x');
xlim([1, 1000]);
figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax2 = nexttile([2,1]);
hold on;
plot(freqs, abs(squeeze(freqresp(G_vc_rigid_heavy, freqs, 'Hz'))), '-', 'color', colors(1,:), 'DisplayName', 'Rigid sample');
plot(freqs, abs(squeeze(freqresp(G_vc_stiff_heavy, freqs, 'Hz'))), '-', 'color', colors(2,:), 'DisplayName', '$\omega_s = 200\,Hz$');
plot(freqs, abs(squeeze(freqresp(G_vc_soft_heavy, freqs, 'Hz'))), '-', 'color', colors(3,:), 'DisplayName', '$\omega_s = 20\,Hz$');
plot(freqs, abs(squeeze(freqresp(1/(mn*s^2), freqs, 'Hz'))), '-', 'color', [0,0,0,0.5], 'DisplayName', '$\frac{1}{m_n s^2}$');
plot(freqs, abs(squeeze(freqresp(1/((mn + ms)*s^2), freqs, 'Hz'))), '--', 'color', [0,0,0,0.5], 'DisplayName', '$\frac{1}{(m_n + m_s) s^2}$');
text(2.2, 2e-3, '$\omega_n = \sqrt{\frac{k_n}{m_n + m_s}}$', 'horizontalalignment', 'left');
text(20, 1e-8, '$\omega_s = \sqrt{\frac{k_s}{m_s}}$', 'horizontalalignment', 'center');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
ldg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
ldg.ItemTokenSize = [20, 1];
ylim([1e-10, 1e-2])
ax2b = nexttile();
hold on;
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_vc_rigid_heavy, freqs, 'Hz')))), '-', 'color', colors(1,:));
@ -139,27 +128,14 @@ plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_vc_stiff_heavy, freqs, 'Hz'))
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_vc_soft_heavy, freqs, 'Hz')))), '-', 'color', colors(3,:));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); set(gca, 'YTickLabel',[]);
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
xticks([1e0, 1e1, 1e2]);
yticks(-360:90:360);
ylim([-200, 20]);
linkaxes([ax1,ax1b],'x');
linkaxes([ax2,ax2b],'x');
xlim([1, 1000]);
% #+name: fig:uniaxial_payload_dynamics_soft_nano_hexapod
% #+caption: Effect of the payload dynamics on the soft Nano-Hexapod. Light sample on the right, and heavy sample on the left
% #+RESULTS:
% [[file:figs/uniaxial_payload_dynamics_soft_nano_hexapod.png]]
% The same transfer functions are now compared when using a stiff nano-hexapod ($k_n = 100\,N/\mu m$) in Figure ref:fig:uniaxial_payload_dynamics_stiff_nano_hexapod.
% In that case, the sample's resonance $\omega_n$ is smaller than the nano-hexapod resonance $\omega_n$.
% This changes the zero/pole pattern to a pole/zero pattern (the frequency of the zero still being equal to $\omega_s$).
% Even tough the added sample's flexibility still changes the high frequency mass line from $\frac{1}{(m_n + m_s)s^2}$ to $\frac{1}{m_ns^2}$, the overall dynamics is much less impacted, even if the sample mass is high (see yellow curve in Figure ref:fig:uniaxial_payload_dynamics_stiff_nano_hexapod, right).
%% Stiff Nano-Hexapod
% Light payload mass
mn = 15; % Nano-Hexapod mass [kg]
@ -205,7 +181,7 @@ G_pz_stiff_heavy = (ms*s^2 + cs*s + ks)/((mn*s^2 + cn*s + kn)*(ms*s^2 + cs*s + k
%% Effect of the payload dynamics on the stiff Nano-Hexapod. Light sample on the right, and heavy sample on the left
figure;
tiledlayout(3, 2, 'TileSpacing', 'Compact', 'Padding', 'None');
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([2,1]);
hold on;
@ -215,21 +191,7 @@ plot(freqs, abs(squeeze(freqresp(G_pz_soft_light, freqs, 'Hz'))), '-', 'color',
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
ylim([1e-10, 1e-2])
title('$k_n = 100\,N/\mu m$, $m_s = 1\,kg$');
ax2 = nexttile([2,1]);
hold on;
plot(freqs, abs(squeeze(freqresp(G_pz_rigid_heavy, freqs, 'Hz'))), '-', 'color', colors(1,:), 'DisplayName', 'Rigid sample');
plot(freqs, abs(squeeze(freqresp(G_pz_stiff_heavy, freqs, 'Hz'))), '-', 'color', colors(2,:), 'DisplayName', 'Stiff sample: $\omega_s = 200\,Hz$');
plot(freqs, abs(squeeze(freqresp(G_pz_soft_heavy, freqs, 'Hz'))), '-', 'color', colors(3,:), 'DisplayName', 'Soft sample: $\omega_s = 20\,Hz$');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
set(gca, 'XTickLabel',[]); set(gca, 'YTickLabel',[]);
title('$k_n = 100\,N/\mu m$, $m_s = 50\,kg$');
ylim([1e-10, 1e-2])
ldg = legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
ldg.ItemTokenSize = [20, 1];
ylim([1e-10, 1e-6])
ax1b = nexttile();
hold on;
@ -243,6 +205,24 @@ xticks([1e0, 1e1, 1e2]);
yticks(-360:90:360);
ylim([-200, 20]);
linkaxes([ax1,ax1b],'x');
xlim([1, 1000]);
figure;
tiledlayout(3, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
ax2 = nexttile([2,1]);
hold on;
plot(freqs, abs(squeeze(freqresp(G_pz_rigid_heavy, freqs, 'Hz'))), '-', 'color', colors(1,:), 'DisplayName', 'Rigid sample');
plot(freqs, abs(squeeze(freqresp(G_pz_stiff_heavy, freqs, 'Hz'))), '-', 'color', colors(2,:), 'DisplayName', 'Stiff sample: $\omega_s = 200\,Hz$');
plot(freqs, abs(squeeze(freqresp(G_pz_soft_heavy, freqs, 'Hz'))), '-', 'color', colors(3,:), 'DisplayName', 'Soft sample: $\omega_s = 20\,Hz$');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Amplitude [m/N]'); set(gca, 'XTickLabel',[]);
ylim([1e-10, 1e-6])
ldg = legend('location', 'northwest', 'FontSize', 8, 'NumColumns', 1);
ldg.ItemTokenSize = [20, 1];
ax2b = nexttile();
hold on;
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_pz_rigid_heavy, freqs, 'Hz')))), '-', 'color', colors(1,:));
@ -250,34 +230,14 @@ plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_pz_stiff_heavy, freqs, 'Hz'))
plot(freqs, 180/pi*unwrap(angle(squeeze(freqresp(G_pz_soft_heavy, freqs, 'Hz')))), '-', 'color', colors(3,:));
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); set(gca, 'YTickLabel',[]);
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
xticks([1e0, 1e1, 1e2]);
yticks(-360:90:360);
ylim([-200, 20]);
linkaxes([ax1,ax1b],'x');
linkaxes([ax2,ax2b],'x');
xlim([1, 1000]);
% #+name: fig:uniaxial_sample_flexibility_control
% #+caption: Uniaxial model considering a flexibility between the nano-hexapod top platform and the sample. In that case the measured and controlled distance $d$ is different from the distance $y$ that is wish to be controlled
% #+RESULTS:
% [[file:figs/uniaxial_sample_flexibility_control.png]]
% After the system dynamics extracted from the model, IFF is applied using the same gains as the ones used in Section ref:sec:uniaxial_active_damping.
% Thanks to the collocation between the nano-hexapod and the force sensor used for IFF, the damped plants are still stable and similar damping values are obtained than when considering a rigid sample.
% The High Authority Controllers used in Section ref:sec:uniaxial_position_control are then implemented on the damped plants.
% The obtained closed-loop systems are stable, indicating good robustness.
% Finally, closed-loop noise budgeting is computed for the obtained the closed-loop system and the cumulative amplitude spectrum of $d$ and $y$ are shown in Figure ref:fig:uniaxial_sample_flexibility_noise_budget_y.
% The cumulative amplitude spectrum of the measured distance $d$ (Figure ref:fig:uniaxial_sample_flexibility_noise_budget_d) shows that the added flexibility at the sample location have very little effect on the control performance.
% However, the cumulative amplitude spectrum of the distance $y$ (Figure ref:fig:uniaxial_sample_flexibility_noise_budget_y) shows that the stability of $y$ is degraded when the sample flexibility is considered and is degraded as $\omega_s$ is lowered.
% What happens is that above $\omega_s$, even though the motion $d$ can be controlled perfectly, the sample's mass is "isolated" from the motion of the nano-hexapod and the control on $y$ is not effective.
%% Nano-Hexpod model
model_config = struct();
model_config.controller = "open_loop";
@ -398,82 +358,40 @@ isstable(G_hac_iff_pz_light_stiff)
%% Cumulative Amplitude Spectrum of d - Effect of Sample's flexibility
figure;
tiledlayout(1, 2, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile();
hold on;
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_hac_iff_vc_light_rigid('d', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_hac_iff_vc_light_rigid('d', 'xf'), f, 'Hz'))).^2)))), '-', ...
'DisplayName', 'Rigid sample');
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_hac_iff_vc_light_stiff('d', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_hac_iff_vc_light_stiff('d', 'xf'), f, 'Hz'))).^2)))), '-', ...
'DisplayName', 'Stiff $\omega_s = 200\,$Hz');
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_hac_iff_vc_light_soft('d', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_hac_iff_vc_light_soft('d', 'xf'), f, 'Hz'))).^2)))), '-', ...
'DisplayName', 'Soft $\omega_s = 20\,$Hz');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xticks([1e0, 1e1, 1e2]);
ylabel('CAS of $d$ [m]'); xlabel('Frequency [Hz]');
legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
title('$k_n = 0.01\,N/\mu m$');
ax2 = nexttile();
hold on;
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_hac_iff_pz_light_rigid('d', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_hac_iff_pz_light_rigid('d', 'xf'), f, 'Hz'))).^2)))), '-');
psd_xf.*abs(squeeze(freqresp(G_hac_iff_pz_light_rigid('d', 'xf'), f, 'Hz'))).^2)))), '-', ...
'DisplayName', 'Rigid sample');
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_hac_iff_pz_light_stiff('d', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_hac_iff_pz_light_stiff('d', 'xf'), f, 'Hz'))).^2)))), '-');
psd_xf.*abs(squeeze(freqresp(G_hac_iff_pz_light_stiff('d', 'xf'), f, 'Hz'))).^2)))), '-', ...
'DisplayName', '$\omega_s = 200\,$Hz');
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_hac_iff_pz_light_soft('d', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_hac_iff_pz_light_soft('d', 'xf'), f, 'Hz'))).^2)))), '-');
psd_xf.*abs(squeeze(freqresp(G_hac_iff_pz_light_soft('d', 'xf'), f, 'Hz'))).^2)))), '-', ...
'DisplayName', '$\omega_s = 20\,$Hz');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('CAS of $d$ [m]'); xlabel('Frequency [Hz]');
legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
xlim([1, 500]);
xticks([1e0, 1e1, 1e2]);
xlabel('Frequency [Hz]'); set(gca, 'YTickLabel',[]);
title('$k_n = 100\,N/\mu m$');
xlim([1, 500]);
linkaxes([ax1,ax2],'xy');
xlim([1, 500]);
ylim([2e-10, 2e-7])
%% Cumulative Amplitude Spectrum - Effect of Sample's flexibility
figure;
tiledlayout(1, 2, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile();
hold on;
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_hac_iff_vc_light_rigid('y', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_hac_iff_vc_light_rigid('y', 'xf'), f, 'Hz'))).^2)))), '-', ...
'DisplayName', 'Rigid sample');
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_hac_iff_vc_light_stiff('y', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_hac_iff_vc_light_stiff('y', 'xf'), f, 'Hz'))).^2)))), '-', ...
'DisplayName', 'Stiff $\omega_s = 200\,$Hz');
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_hac_iff_vc_light_soft('y', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_hac_iff_vc_light_soft('y', 'xf'), f, 'Hz'))).^2)))), '-', ...
'DisplayName', 'Soft $\omega_s = 20\,$Hz');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xticks([1e0, 1e1, 1e2]);
ylabel('CAS of $y$ [m]'); xlabel('Frequency [Hz]');
legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
title('$k_n = 0.01\,N/\mu m$');
ax2 = nexttile();
hold on;
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_hac_iff_pz_light_rigid('y', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_hac_iff_pz_light_rigid('y', 'xf'), f, 'Hz'))).^2)))), '-');
psd_xf.*abs(squeeze(freqresp(G_hac_iff_pz_light_rigid('y', 'xf'), f, 'Hz'))).^2)))), '-', ...
'DisplayName', 'Rigid sample');
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_hac_iff_pz_light_stiff('y', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_hac_iff_pz_light_stiff('y', 'xf'), f, 'Hz'))).^2)))), '-');
psd_xf.*abs(squeeze(freqresp(G_hac_iff_pz_light_stiff('y', 'xf'), f, 'Hz'))).^2)))), '-', ...
'DisplayName', '$\omega_s = 200\,$Hz');
plot(f, sqrt(flip(-cumtrapz(flip(f), flip(psd_ft.*abs(squeeze(freqresp(G_hac_iff_pz_light_soft('y', 'ft'), f, 'Hz'))).^2 + ...
psd_xf.*abs(squeeze(freqresp(G_hac_iff_pz_light_soft('y', 'xf'), f, 'Hz'))).^2)))), '-');
psd_xf.*abs(squeeze(freqresp(G_hac_iff_pz_light_soft('y', 'xf'), f, 'Hz'))).^2)))), '-', ...
'DisplayName', '$\omega_s = 20\,$Hz');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('CAS of $y$ [m]'); xlabel('Frequency [Hz]');
legend('location', 'southwest', 'FontSize', 8, 'NumColumns', 1);
xlim([1, 500]);
xticks([1e0, 1e1, 1e2]);
xlabel('Frequency [Hz]'); set(gca, 'YTickLabel',[]);
title('$k_n = 100\,N/\mu m$');
xlim([1, 500]);
linkaxes([ax1,ax2],'xy');
xlim([1, 500]);
ylim([2e-10, 2e-7])

View File

@ -22,7 +22,7 @@
#+BIND: org-latex-bib-compiler "biber"
#+PROPERTY: header-args:matlab :session *MATLAB*
#+PROPERTY: header-args:matlab+ :comments org
#+PROPERTY: header-args:matlab+ :comments no
#+PROPERTY: header-args:matlab+ :exports none
#+PROPERTY: header-args:matlab+ :results none
#+PROPERTY: header-args:matlab+ :eval no-export
@ -65,7 +65,6 @@
("\\paragraph{%s}" . "\\paragraph*{%s}")
))
;; Remove automatic org heading labels
(defun my-latex-filter-removeOrgAutoLabels (text backend info)
"Org-mode automatically generates labels for headings despite explicit use of `#+LABEL`. This filter forcibly removes all automatically generated org-labels in headings."
@ -85,15 +84,6 @@
(setq org-export-before-parsing-hook '(org-ref-glossary-before-parsing
org-ref-acronyms-before-parsing))
#+END_SRC
#+begin_src emacs-lisp
(org-export-define-derived-backend 'my-org 'org
:translate-alist '((link . nil)(latex-fragment . nil)(latex-environment . nil)(special-block . nil)
(table . nil)
(property-drawer . nil)))
#+end_src
#+begin_src emacs-lisp
(org-export-to-file 'my-org "text.org")
#+end_src
* Notes :noexport:
Prefix is =uniaxial=
@ -139,9 +129,9 @@ In this report, a uniaxial model of the acrfull:nass is developed and used to ob
Note that in this study, only the vertical direction is considered (which is the most stiff), but other directions were considered as well, yielding to similar conclusions.
The model is schematically shown in Figure ref:fig:uniaxial_overview_model_sections where the colors represent the parts studied in different sections.
To have a relevant model, the micro-station dynamics is first identified and its model is tuned to match the measurements (Section ref:sec:micro_station_model).
To have a relevant model, the micro-station dynamics is first identified and its model is tuned to match the measurements (Section ref:sec:uniaxial_micro_station_model).
Then, a model of the nano-hexapod is added on top of the micro-station.
With the added sample and sensors, this gives a uniaxial dynamical model of the acrshort:nass that will be used for further analysis (Section ref:sec:nano_station_model).
With the added sample and sensors, this gives a uniaxial dynamical model of the acrshort:nass that will be used for further analysis (Section ref:sec:uniaxial_nano_station_model).
The disturbances affecting position stability are identified experimentally (Section ref:sec:uniaxial_disturbances) and included in the model for dynamical noise budgeting (Section ref:sec:uniaxial_noise_budgeting).
In all the following analysis, three nano-hexapod stiffnesses are considered to better understand the trade-offs and to find the most adequate nano-hexapod design.
@ -301,7 +291,7 @@ Two key effects that may limit that positioning performances are then considered
#+end_src
#+name: fig:uniaxial_overview_model_sections
#+caption: Uniaxial Micro-Station model in blue (Section ref:sec:micro_station_model), Nano-Hexapod models in red (Section ref:sec:nano_station_model), Disturbances in yellow (Section ref:sec:uniaxial_disturbances), Active Damping in green (Section ref:sec:uniaxial_active_damping), Position control in purple (Section ref:sec:uniaxial_position_control) and Sample dynamics in cyan (Section ref:sec:uniaxial_payload_dynamics)
#+caption: Uniaxial Micro-Station model in blue (Section ref:sec:uniaxial_micro_station_model), Nano-Hexapod models in red (Section ref:sec:uniaxial_nano_station_model), Disturbances in yellow (Section ref:sec:uniaxial_disturbances), Active Damping in green (Section ref:sec:uniaxial_active_damping), Position control in purple (Section ref:sec:uniaxial_position_control) and Sample dynamics in cyan (Section ref:sec:uniaxial_payload_dynamics)
#+RESULTS:
[[file:figs/uniaxial_overview_model_sections.png]]
@ -309,11 +299,11 @@ Two key effects that may limit that positioning performances are then considered
:PROPERTIES:
:HEADER-ARGS:matlab+: :tangle matlab/uniaxial_1_micro_station_model.m
:END:
<<sec:micro_station_model>>
<<sec:uniaxial_micro_station_model>>
** Introduction :ignore:
In this section, a uniaxial model of the micro-station is tuned to match measurements made on the micro-station.
The measurement setup is shown in Figure ref:fig:uniaxial_ustation_first_meas_dynamics where several geophones[fn:1] are fixed to the micro-station and an instrumented hammer is used to inject forces on different stages of the micro-station.
The measurement setup is shown in Figure ref:fig:uniaxial_ustation_first_meas_dynamics where several geophones[fn:uniaxial_1] are fixed to the micro-station and an instrumented hammer is used to inject forces on different stages of the micro-station.
From the measured frequency response functions (FRF), the model can be tuned to approximate the uniaxial dynamics of the micro-station.
@ -756,7 +746,7 @@ exportFig('figs/uniaxial_comp_frf_meas_model.pdf', 'width', 'wide', 'height', 't
:PROPERTIES:
:HEADER-ARGS:matlab+: :tangle matlab/uniaxial_2_nano_hexapod_model.m
:END:
<<sec:nano_station_model>>
<<sec:uniaxial_nano_station_model>>
** Introduction :ignore:
A model of the nano-hexapod and sample is now added on top of the uniaxial model of the micro-station (Figure ref:fig:uniaxial_model_micro_station_nass).
@ -1193,7 +1183,7 @@ save('./mat/uniaxial_plants.mat', 'G_vc_light', 'G_md_light', 'G_pz_light', ...
:END:
<<sec:uniaxial_disturbances>>
** Introduction :ignore:
To quantify disturbances (red signals in Figure ref:fig:uniaxial_model_micro_station_nass), three geophones[fn:2] are used.
To quantify disturbances (red signals in Figure ref:fig:uniaxial_model_micro_station_nass), three geophones[fn:uniaxial_2] are used.
One is located on the floor, another one on the granite, and the last one on the micro-hexapod's top platform (see Figure ref:fig:uniaxial_ustation_meas_disturbances).
The geophone located on the floor was used to measure the floor motion $x_f$ while the other two geophones were used to measure vibrations introduced by scanning of the $T_y$ stage and $R_z$ stage (see Figure ref:fig:uniaxial_ustation_dynamical_id_setup).
@ -1389,7 +1379,7 @@ load('uniaxial_micro_station_parameters.mat');
** Ground Motion
To acquire the geophone signals, the measurement setup shown in Figure ref:fig:uniaxial_geophone_meas_chain is used.
The voltage generated by the geophone is amplified using a low noise voltage amplifier[fn:3] with a gain of 60dB before going to the ADC.
The voltage generated by the geophone is amplified using a low noise voltage amplifier[fn:uniaxial_3] with a gain of 60dB before going to the ADC.
This is done to improve the signal-to-noise ratio.
To reconstruct the displacement $x_f$ from the measured voltage $\hat{V}_{x_f}$, the transfer function of the measurement chain from $x_f$ to $\hat{V}_{x_f}$ needs to be estimated.
@ -1601,7 +1591,7 @@ save('./mat/uniaxial_disturbance_psd.mat', 'f', 'psd_ft', 'psd_xf');
:END:
<<sec:uniaxial_noise_budgeting>>
** Introduction :ignore:
Now that a model of the acrshort:nass has been obtained (see section ref:sec:nano_station_model) and that the disturbances have been estimated (see section ref:sec:uniaxial_disturbances), it is possible to perform an /open-loop dynamic noise budgeting/.
Now that a model of the acrshort:nass has been obtained (see section ref:sec:uniaxial_nano_station_model) and that the disturbances have been estimated (see section ref:sec:uniaxial_disturbances), it is possible to perform an /open-loop dynamic noise budgeting/.
To perform such noise budgeting, the disturbances need to be modeled by their spectral densities (done in section ref:sec:uniaxial_disturbances).
Then, the transfer functions from disturbances to the performance metric (here the distance $d$) are computed (Section ref:ssec:uniaxial_noise_budget_sensitivity).
@ -6147,7 +6137,7 @@ Therefore, it is important to take special care when designing sampling environm
# TODO - Make a table summarizing the findings
In this study, a uniaxial model of the nano-active-stabilization-system was tuned from both dynamical measurements (Section ref:sec:micro_station_model) and from disturbances measurements (Section ref:sec:uniaxial_disturbances).
In this study, a uniaxial model of the nano-active-stabilization-system was tuned from both dynamical measurements (Section ref:sec:uniaxial_micro_station_model) and from disturbances measurements (Section ref:sec:uniaxial_disturbances).
Three active damping techniques can be used to critically damp the nano-hexapod resonances (Section ref:sec:uniaxial_active_damping).
However, this model does not allow the determination of which one is most suited to this application (a comparison of the three active damping techniques is done in Table ref:tab:comp_active_damping).
@ -6192,6 +6182,6 @@ colors = colororder;
* Footnotes
[fn:3]DLPVA-100-B from Femto with a voltage input noise is $2.4\,nV/\sqrt{\text{Hz}}$
[fn:2]Mark Product L-22D geophones are used with a sensitivity of $88\,\frac{V}{m/s}$ and a natural frequency of $\approx 2\,\text{Hz}$
[fn:1]Mark Product L4-C geophones are used with a sensitivity of $171\,\frac{V}{m/s}$ and a natural frequency of $\approx 1\,\text{Hz}$
[fn:uniaxial_3]DLPVA-100-B from Femto with a voltage input noise is $2.4\,nV/\sqrt{\text{Hz}}$
[fn:uniaxial_2]Mark Product L-22D geophones are used with a sensitivity of $88\,\frac{V}{m/s}$ and a natural frequency of $\approx 2\,\text{Hz}$
[fn:uniaxial_1]Mark Product L4-C geophones are used with a sensitivity of $171\,\frac{V}{m/s}$ and a natural frequency of $\approx 1\,\text{Hz}$

Binary file not shown.