Rework just before grammar check

This commit is contained in:
Thomas Dehaeze 2024-10-24 18:53:51 +02:00
parent 09e101fb75
commit 12f4934efc
22 changed files with 1715 additions and 714 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -1,199 +1,187 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="225.576" height="174.643" viewBox="0 0 225.576 174.643">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="174.219" height="173.715" viewBox="0 0 174.219 173.715">
<defs>
<g>
<g id="glyph-0-0">
<path d="M 4.390625 -2.484375 C 4.390625 -3.546875 3.515625 -4.40625 2.484375 -4.40625 C 1.40625 -4.40625 0.5625 -3.515625 0.5625 -2.484375 C 0.5625 -1.421875 1.421875 -0.5625 2.46875 -0.5625 C 3.546875 -0.5625 4.390625 -1.4375 4.390625 -2.484375 Z M 4.390625 -2.484375 "/>
</g>
<g id="glyph-0-1">
<path d="M 4.40625 -2.484375 C 4.40625 -3.546875 3.53125 -4.40625 2.484375 -4.40625 C 1.40625 -4.40625 0.5625 -3.53125 0.5625 -2.484375 C 0.5625 -1.421875 1.4375 -0.5625 2.46875 -0.5625 C 3.5625 -0.5625 4.40625 -1.4375 4.40625 -2.484375 Z M 4.40625 -2.484375 "/>
<path d="M 4.234375 2.375 C 4.234375 2.265625 4.171875 2.265625 4.078125 2.265625 C 3.296875 2.21875 2.921875 1.765625 2.84375 1.40625 C 2.8125 1.296875 2.8125 1.28125 2.8125 0.9375 L 2.8125 -0.5625 C 2.8125 -0.859375 2.8125 -1.359375 2.78125 -1.453125 C 2.65625 -2.109375 2.03125 -2.375 1.640625 -2.484375 C 2.8125 -2.8125 2.8125 -3.515625 2.8125 -3.796875 L 2.8125 -5.59375 C 2.8125 -6.296875 2.8125 -6.515625 3.046875 -6.765625 C 3.21875 -6.9375 3.453125 -7.1875 4.140625 -7.21875 C 4.203125 -7.234375 4.234375 -7.265625 4.234375 -7.328125 C 4.234375 -7.4375 4.15625 -7.4375 4.03125 -7.4375 C 3.046875 -7.4375 2.15625 -6.9375 2.140625 -6.21875 L 2.140625 -4.40625 C 2.140625 -3.46875 2.140625 -3.3125 1.890625 -3.03125 C 1.75 -2.890625 1.484375 -2.625 0.859375 -2.59375 C 0.78125 -2.59375 0.71875 -2.578125 0.71875 -2.484375 C 0.71875 -2.375 0.78125 -2.375 0.875 -2.375 C 1.296875 -2.34375 2.140625 -2.140625 2.140625 -1.140625 L 2.140625 0.828125 C 2.140625 1.40625 2.140625 1.734375 2.65625 2.109375 C 3.078125 2.40625 3.734375 2.484375 4.03125 2.484375 C 4.15625 2.484375 4.234375 2.484375 4.234375 2.375 Z M 4.234375 2.375 "/>
</g>
<g id="glyph-0-2">
<path d="M 4.25 2.375 C 4.25 2.28125 4.1875 2.28125 4.078125 2.265625 C 3.296875 2.21875 2.9375 1.765625 2.84375 1.40625 C 2.8125 1.296875 2.8125 1.28125 2.8125 0.9375 L 2.8125 -0.5625 C 2.8125 -0.859375 2.8125 -1.359375 2.796875 -1.453125 C 2.65625 -2.109375 2.03125 -2.375 1.640625 -2.484375 C 2.8125 -2.828125 2.8125 -3.53125 2.8125 -3.8125 L 2.8125 -5.59375 C 2.8125 -6.3125 2.8125 -6.53125 3.046875 -6.78125 C 3.234375 -6.953125 3.453125 -7.1875 4.15625 -7.234375 C 4.203125 -7.25 4.25 -7.28125 4.25 -7.34375 C 4.25 -7.453125 4.15625 -7.453125 4.046875 -7.453125 C 3.046875 -7.453125 2.171875 -6.953125 2.140625 -6.234375 L 2.140625 -4.40625 C 2.140625 -3.484375 2.140625 -3.3125 1.890625 -3.046875 C 1.75 -2.90625 1.484375 -2.640625 0.859375 -2.59375 C 0.78125 -2.59375 0.71875 -2.578125 0.71875 -2.484375 C 0.71875 -2.390625 0.78125 -2.390625 0.875 -2.375 C 1.296875 -2.34375 2.140625 -2.140625 2.140625 -1.140625 L 2.140625 0.828125 C 2.140625 1.40625 2.140625 1.734375 2.65625 2.109375 C 3.09375 2.40625 3.734375 2.484375 4.046875 2.484375 C 4.15625 2.484375 4.25 2.484375 4.25 2.375 Z M 4.25 2.375 "/>
</g>
<g id="glyph-0-3">
<path d="M 4.25 -2.484375 C 4.25 -2.578125 4.1875 -2.578125 4.078125 -2.59375 C 3.65625 -2.625 2.8125 -2.828125 2.8125 -3.828125 L 2.8125 -5.796875 C 2.8125 -6.375 2.8125 -6.703125 2.296875 -7.078125 C 1.875 -7.359375 1.234375 -7.453125 0.921875 -7.453125 C 0.8125 -7.453125 0.71875 -7.453125 0.71875 -7.34375 C 0.71875 -7.25 0.78125 -7.25 0.875 -7.234375 C 1.65625 -7.1875 2.03125 -6.734375 2.109375 -6.375 C 2.140625 -6.265625 2.140625 -6.25 2.140625 -5.90625 L 2.140625 -4.40625 C 2.140625 -4.109375 2.140625 -3.609375 2.171875 -3.515625 C 2.296875 -2.859375 2.9375 -2.59375 3.3125 -2.484375 C 2.140625 -2.140625 2.140625 -1.4375 2.140625 -1.15625 L 2.140625 0.625 C 2.140625 1.34375 2.140625 1.5625 1.90625 1.8125 C 1.734375 1.984375 1.5 2.21875 0.8125 2.265625 C 0.75 2.28125 0.71875 2.3125 0.71875 2.375 C 0.71875 2.484375 0.8125 2.484375 0.921875 2.484375 C 1.90625 2.484375 2.796875 1.984375 2.8125 1.265625 L 2.8125 -0.5625 C 2.8125 -1.484375 2.8125 -1.65625 3.078125 -1.921875 C 3.203125 -2.0625 3.484375 -2.328125 4.109375 -2.375 C 4.171875 -2.375 4.25 -2.390625 4.25 -2.484375 Z M 4.25 -2.484375 "/>
<path d="M 4.234375 -2.484375 C 4.234375 -2.578125 4.171875 -2.578125 4.078125 -2.59375 C 3.65625 -2.625 2.8125 -2.828125 2.8125 -3.8125 L 2.8125 -5.78125 C 2.8125 -6.359375 2.8125 -6.703125 2.296875 -7.0625 C 1.859375 -7.359375 1.234375 -7.4375 0.90625 -7.4375 C 0.8125 -7.4375 0.71875 -7.4375 0.71875 -7.328125 C 0.71875 -7.234375 0.78125 -7.234375 0.875 -7.21875 C 1.65625 -7.171875 2.03125 -6.734375 2.109375 -6.375 C 2.140625 -6.265625 2.140625 -6.234375 2.140625 -5.890625 L 2.140625 -4.40625 C 2.140625 -4.109375 2.140625 -3.609375 2.15625 -3.5 C 2.296875 -2.84375 2.921875 -2.59375 3.3125 -2.484375 C 2.140625 -2.140625 2.140625 -1.4375 2.140625 -1.15625 L 2.140625 0.625 C 2.140625 1.34375 2.140625 1.5625 1.90625 1.8125 C 1.71875 1.984375 1.5 2.21875 0.796875 2.265625 C 0.75 2.265625 0.71875 2.3125 0.71875 2.375 C 0.71875 2.484375 0.8125 2.484375 0.90625 2.484375 C 1.90625 2.484375 2.78125 1.96875 2.8125 1.265625 L 2.8125 -0.5625 C 2.8125 -1.484375 2.8125 -1.640625 3.0625 -1.921875 C 3.203125 -2.0625 3.46875 -2.328125 4.09375 -2.375 C 4.171875 -2.375 4.234375 -2.375 4.234375 -2.484375 Z M 4.234375 -2.484375 "/>
</g>
<g id="glyph-1-0">
<path d="M 4.921875 -1.421875 C 4.921875 -1.515625 4.828125 -1.515625 4.796875 -1.515625 C 4.71875 -1.515625 4.6875 -1.484375 4.671875 -1.40625 C 4.34375 -0.34375 3.671875 -0.109375 3.359375 -0.109375 C 2.96875 -0.109375 2.8125 -0.421875 2.8125 -0.765625 C 2.8125 -0.984375 2.875 -1.203125 2.96875 -1.640625 L 3.3125 -3 C 3.375 -3.25 3.609375 -4.171875 4.296875 -4.171875 C 4.34375 -4.171875 4.578125 -4.171875 4.796875 -4.03125 C 4.515625 -3.984375 4.3125 -3.734375 4.3125 -3.5 C 4.3125 -3.34375 4.421875 -3.15625 4.6875 -3.15625 C 4.90625 -3.15625 5.234375 -3.328125 5.234375 -3.734375 C 5.234375 -4.25 4.640625 -4.390625 4.3125 -4.390625 C 3.734375 -4.390625 3.390625 -3.859375 3.265625 -3.625 C 3.015625 -4.28125 2.484375 -4.390625 2.1875 -4.390625 C 1.15625 -4.390625 0.59375 -3.109375 0.59375 -2.859375 C 0.59375 -2.765625 0.71875 -2.765625 0.71875 -2.765625 C 0.796875 -2.765625 0.828125 -2.78125 0.84375 -2.875 C 1.1875 -3.921875 1.828125 -4.171875 2.171875 -4.171875 C 2.359375 -4.171875 2.703125 -4.078125 2.703125 -3.5 C 2.703125 -3.1875 2.546875 -2.53125 2.171875 -1.140625 C 2.015625 -0.53125 1.671875 -0.109375 1.234375 -0.109375 C 1.171875 -0.109375 0.9375 -0.109375 0.734375 -0.234375 C 0.984375 -0.28125 1.203125 -0.5 1.203125 -0.78125 C 1.203125 -1.046875 0.984375 -1.125 0.828125 -1.125 C 0.53125 -1.125 0.28125 -0.859375 0.28125 -0.546875 C 0.28125 -0.09375 0.78125 0.109375 1.21875 0.109375 C 1.875 0.109375 2.234375 -0.578125 2.265625 -0.640625 C 2.375 -0.28125 2.734375 0.109375 3.328125 0.109375 C 4.359375 0.109375 4.921875 -1.171875 4.921875 -1.421875 Z M 4.921875 -1.421875 "/>
</g>
<g id="glyph-1-1">
<path d="M 4.921875 -1.421875 C 4.921875 -1.515625 4.84375 -1.515625 4.8125 -1.515625 C 4.71875 -1.515625 4.703125 -1.484375 4.6875 -1.40625 C 4.359375 -0.34375 3.671875 -0.109375 3.359375 -0.109375 C 2.96875 -0.109375 2.8125 -0.421875 2.8125 -0.765625 C 2.8125 -0.984375 2.875 -1.203125 2.984375 -1.640625 L 3.3125 -3 C 3.375 -3.265625 3.609375 -4.171875 4.296875 -4.171875 C 4.359375 -4.171875 4.59375 -4.171875 4.796875 -4.046875 C 4.515625 -4 4.328125 -3.75 4.328125 -3.515625 C 4.328125 -3.34375 4.4375 -3.15625 4.703125 -3.15625 C 4.921875 -3.15625 5.234375 -3.34375 5.234375 -3.734375 C 5.234375 -4.25 4.65625 -4.390625 4.3125 -4.390625 C 3.734375 -4.390625 3.390625 -3.859375 3.265625 -3.640625 C 3.015625 -4.296875 2.484375 -4.390625 2.203125 -4.390625 C 1.15625 -4.390625 0.59375 -3.109375 0.59375 -2.859375 C 0.59375 -2.765625 0.71875 -2.765625 0.71875 -2.765625 C 0.796875 -2.765625 0.828125 -2.78125 0.84375 -2.875 C 1.1875 -3.921875 1.84375 -4.171875 2.171875 -4.171875 C 2.359375 -4.171875 2.71875 -4.078125 2.71875 -3.515625 C 2.71875 -3.203125 2.546875 -2.53125 2.171875 -1.140625 C 2.015625 -0.53125 1.671875 -0.109375 1.234375 -0.109375 C 1.171875 -0.109375 0.9375 -0.109375 0.734375 -0.234375 C 0.984375 -0.28125 1.203125 -0.5 1.203125 -0.78125 C 1.203125 -1.046875 0.984375 -1.125 0.828125 -1.125 C 0.53125 -1.125 0.28125 -0.859375 0.28125 -0.546875 C 0.28125 -0.09375 0.78125 0.109375 1.21875 0.109375 C 1.875 0.109375 2.234375 -0.59375 2.265625 -0.640625 C 2.390625 -0.28125 2.75 0.109375 3.34375 0.109375 C 4.359375 0.109375 4.921875 -1.171875 4.921875 -1.421875 Z M 4.921875 -1.421875 "/>
<path d="M 4.828125 -3.78125 C 4.859375 -3.921875 4.859375 -3.9375 4.859375 -4.015625 C 4.859375 -4.1875 4.71875 -4.28125 4.578125 -4.28125 C 4.46875 -4.28125 4.3125 -4.21875 4.234375 -4.0625 C 4.203125 -4.015625 4.125 -3.703125 4.09375 -3.53125 L 3.890625 -2.734375 L 3.4375 -0.953125 C 3.40625 -0.796875 2.96875 -0.109375 2.328125 -0.109375 C 1.8125 -0.109375 1.703125 -0.546875 1.703125 -0.90625 C 1.703125 -1.375 1.875 -1.984375 2.21875 -2.859375 C 2.375 -3.265625 2.40625 -3.375 2.40625 -3.578125 C 2.40625 -4.015625 2.09375 -4.390625 1.59375 -4.390625 C 0.65625 -4.390625 0.28125 -2.953125 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.78125 0.5625 -2.9375 C 0.828125 -3.875 1.234375 -4.171875 1.5625 -4.171875 C 1.640625 -4.171875 1.8125 -4.171875 1.8125 -3.84375 C 1.8125 -3.609375 1.71875 -3.34375 1.640625 -3.15625 C 1.25 -2.109375 1.078125 -1.53125 1.078125 -1.078125 C 1.078125 -0.1875 1.703125 0.109375 2.28125 0.109375 C 2.671875 0.109375 3 -0.0625 3.28125 -0.34375 C 3.15625 0.171875 3.03125 0.671875 2.640625 1.1875 C 2.375 1.53125 2 1.8125 1.546875 1.8125 C 1.40625 1.8125 0.96875 1.78125 0.796875 1.40625 C 0.953125 1.40625 1.078125 1.40625 1.21875 1.28125 C 1.3125 1.1875 1.421875 1.0625 1.421875 0.875 C 1.421875 0.5625 1.15625 0.53125 1.046875 0.53125 C 0.828125 0.53125 0.5 0.6875 0.5 1.171875 C 0.5 1.671875 0.9375 2.03125 1.546875 2.03125 C 2.5625 2.03125 3.59375 1.125 3.875 0.015625 Z M 4.828125 -3.78125 "/>
</g>
<g id="glyph-1-2">
<path d="M 4.828125 -3.78125 C 4.875 -3.921875 4.875 -3.9375 4.875 -4.015625 C 4.875 -4.1875 4.734375 -4.28125 4.578125 -4.28125 C 4.484375 -4.28125 4.328125 -4.21875 4.234375 -4.078125 C 4.21875 -4.03125 4.140625 -3.71875 4.09375 -3.53125 L 3.890625 -2.75 L 3.453125 -0.953125 C 3.40625 -0.8125 2.984375 -0.109375 2.328125 -0.109375 C 1.8125 -0.109375 1.703125 -0.546875 1.703125 -0.921875 C 1.703125 -1.375 1.875 -1.984375 2.21875 -2.859375 C 2.375 -3.265625 2.421875 -3.375 2.421875 -3.578125 C 2.421875 -4.03125 2.09375 -4.390625 1.59375 -4.390625 C 0.65625 -4.390625 0.28125 -2.953125 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.78125 0.5625 -2.9375 C 0.828125 -3.875 1.234375 -4.171875 1.5625 -4.171875 C 1.65625 -4.171875 1.8125 -4.171875 1.8125 -3.859375 C 1.8125 -3.609375 1.71875 -3.34375 1.65625 -3.15625 C 1.25 -2.109375 1.078125 -1.546875 1.078125 -1.078125 C 1.078125 -0.1875 1.703125 0.109375 2.28125 0.109375 C 2.671875 0.109375 3.015625 -0.0625 3.296875 -0.34375 C 3.15625 0.171875 3.046875 0.671875 2.640625 1.1875 C 2.390625 1.53125 2 1.8125 1.546875 1.8125 C 1.40625 1.8125 0.96875 1.78125 0.796875 1.40625 C 0.953125 1.40625 1.078125 1.40625 1.21875 1.28125 C 1.328125 1.1875 1.421875 1.0625 1.421875 0.875 C 1.421875 0.5625 1.15625 0.53125 1.046875 0.53125 C 0.828125 0.53125 0.5 0.6875 0.5 1.171875 C 0.5 1.671875 0.9375 2.03125 1.546875 2.03125 C 2.578125 2.03125 3.59375 1.140625 3.875 0.015625 Z M 4.828125 -3.78125 "/>
<path d="M 4.3125 -1.421875 C 4.3125 -1.46875 4.28125 -1.515625 4.203125 -1.515625 C 4.109375 -1.515625 4.09375 -1.453125 4.0625 -1.390625 C 3.828125 -0.75 3.1875 -0.5625 2.875 -0.5625 C 2.671875 -0.5625 2.484375 -0.609375 2.28125 -0.6875 C 1.9375 -0.8125 1.796875 -0.859375 1.59375 -0.859375 C 1.59375 -0.859375 1.40625 -0.859375 1.3125 -0.828125 C 1.859375 -1.40625 2.140625 -1.640625 2.5 -1.953125 C 2.5 -1.953125 3.109375 -2.484375 3.46875 -2.84375 C 4.421875 -3.765625 4.640625 -4.25 4.640625 -4.28125 C 4.640625 -4.390625 4.53125 -4.390625 4.53125 -4.390625 C 4.453125 -4.390625 4.421875 -4.359375 4.375 -4.28125 C 4.078125 -3.796875 3.875 -3.640625 3.625 -3.640625 C 3.390625 -3.640625 3.28125 -3.796875 3.125 -3.953125 C 2.9375 -4.1875 2.765625 -4.390625 2.4375 -4.390625 C 1.703125 -4.390625 1.234375 -3.46875 1.234375 -3.25 C 1.234375 -3.203125 1.265625 -3.140625 1.359375 -3.140625 C 1.453125 -3.140625 1.46875 -3.1875 1.484375 -3.25 C 1.671875 -3.703125 2.25 -3.71875 2.328125 -3.71875 C 2.546875 -3.71875 2.734375 -3.65625 2.953125 -3.578125 C 3.359375 -3.421875 3.46875 -3.421875 3.71875 -3.421875 C 3.359375 -3 2.53125 -2.28125 2.34375 -2.125 L 1.453125 -1.296875 C 0.78125 -0.625 0.421875 -0.0625 0.421875 0.015625 C 0.421875 0.109375 0.546875 0.109375 0.546875 0.109375 C 0.625 0.109375 0.640625 0.09375 0.703125 -0.015625 C 0.9375 -0.359375 1.234375 -0.640625 1.546875 -0.640625 C 1.78125 -0.640625 1.875 -0.546875 2.125 -0.265625 C 2.296875 -0.046875 2.46875 0.109375 2.765625 0.109375 C 3.734375 0.109375 4.3125 -1.15625 4.3125 -1.421875 Z M 4.3125 -1.421875 "/>
</g>
<g id="glyph-1-3">
<path d="M 4.328125 -1.421875 C 4.328125 -1.46875 4.28125 -1.515625 4.203125 -1.515625 C 4.109375 -1.515625 4.09375 -1.453125 4.0625 -1.390625 C 3.828125 -0.75 3.203125 -0.5625 2.875 -0.5625 C 2.671875 -0.5625 2.5 -0.609375 2.28125 -0.6875 C 1.953125 -0.8125 1.796875 -0.859375 1.59375 -0.859375 C 1.59375 -0.859375 1.40625 -0.859375 1.328125 -0.828125 C 1.859375 -1.40625 2.140625 -1.65625 2.5 -1.953125 C 2.5 -1.953125 3.125 -2.5 3.484375 -2.859375 C 4.421875 -3.78125 4.640625 -4.25 4.640625 -4.296875 C 4.640625 -4.390625 4.53125 -4.390625 4.53125 -4.390625 C 4.46875 -4.390625 4.4375 -4.375 4.375 -4.28125 C 4.078125 -3.8125 3.875 -3.640625 3.640625 -3.640625 C 3.40625 -3.640625 3.28125 -3.796875 3.125 -3.96875 C 2.9375 -4.1875 2.765625 -4.390625 2.4375 -4.390625 C 1.703125 -4.390625 1.25 -3.46875 1.25 -3.265625 C 1.25 -3.203125 1.265625 -3.15625 1.359375 -3.15625 C 1.453125 -3.15625 1.46875 -3.203125 1.484375 -3.265625 C 1.671875 -3.71875 2.25 -3.734375 2.328125 -3.734375 C 2.546875 -3.734375 2.734375 -3.65625 2.96875 -3.578125 C 3.359375 -3.421875 3.46875 -3.421875 3.734375 -3.421875 C 3.375 -3 2.53125 -2.28125 2.34375 -2.125 L 1.453125 -1.296875 C 0.78125 -0.625 0.421875 -0.0625 0.421875 0.015625 C 0.421875 0.109375 0.546875 0.109375 0.546875 0.109375 C 0.625 0.109375 0.640625 0.09375 0.703125 -0.015625 C 0.9375 -0.375 1.234375 -0.640625 1.546875 -0.640625 C 1.78125 -0.640625 1.875 -0.546875 2.125 -0.265625 C 2.296875 -0.046875 2.46875 0.109375 2.765625 0.109375 C 3.75 0.109375 4.328125 -1.15625 4.328125 -1.421875 Z M 4.328125 -1.421875 "/>
<path d="M 7.34375 -4.328125 C 7.34375 -5.921875 6.296875 -7 4.8125 -7 C 2.671875 -7 0.484375 -4.75 0.484375 -2.4375 C 0.484375 -0.78125 1.59375 0.21875 3.03125 0.21875 C 5.125 0.21875 7.34375 -1.953125 7.34375 -4.328125 Z M 6.453125 -4.71875 C 6.453125 -4 6.1875 -2.453125 5.203125 -1.234375 C 4.734375 -0.625 3.921875 -0.046875 3.078125 -0.046875 C 2.109375 -0.046875 1.40625 -0.84375 1.40625 -2.15625 C 1.40625 -2.59375 1.546875 -4.03125 2.3125 -5.203125 C 3 -6.234375 3.96875 -6.75 4.75 -6.75 C 5.5625 -6.75 6.453125 -6.1875 6.453125 -4.71875 Z M 6.453125 -4.71875 "/>
</g>
<g id="glyph-1-4">
<path d="M 7.359375 -4.328125 C 7.359375 -5.9375 6.296875 -7 4.8125 -7 C 2.671875 -7 0.484375 -4.75 0.484375 -2.4375 C 0.484375 -0.78125 1.59375 0.21875 3.03125 0.21875 C 5.140625 0.21875 7.359375 -1.953125 7.359375 -4.328125 Z M 6.46875 -4.71875 C 6.46875 -4 6.203125 -2.453125 5.21875 -1.234375 C 4.734375 -0.625 3.921875 -0.046875 3.09375 -0.046875 C 2.109375 -0.046875 1.40625 -0.84375 1.40625 -2.15625 C 1.40625 -2.59375 1.546875 -4.046875 2.3125 -5.203125 C 3 -6.234375 3.96875 -6.75 4.765625 -6.75 C 5.578125 -6.75 6.46875 -6.203125 6.46875 -4.71875 Z M 6.46875 -4.71875 "/>
<path d="M 6.203125 -6.109375 C 6.203125 -6.203125 6.125 -6.25 6.0625 -6.296875 C 5.84375 -6.453125 5.734375 -6.625 5.65625 -6.859375 C 5.640625 -6.953125 5.59375 -7.078125 5.453125 -7.078125 C 5.3125 -7.078125 5.265625 -6.953125 5.265625 -6.875 C 5.265625 -6.828125 5.34375 -6.515625 5.5 -6.296875 L 2.15625 -6.296875 C 1.984375 -6.296875 1.8125 -6.296875 1.8125 -6.109375 C 1.8125 -5.90625 1.984375 -5.90625 2.15625 -5.90625 L 5.328125 -5.90625 C 5.1875 -5.78125 4.859375 -5.5 4.859375 -5.3125 C 4.859375 -5.21875 4.953125 -5.125 5.0625 -5.125 C 5.15625 -5.125 5.203125 -5.1875 5.25 -5.25 C 5.375 -5.390625 5.59375 -5.671875 6.03125 -5.890625 C 6.109375 -5.9375 6.203125 -5.984375 6.203125 -6.109375 Z M 6.203125 -6.109375 "/>
</g>
<g id="glyph-1-5">
<path d="M 6.21875 -6.109375 C 6.21875 -6.21875 6.140625 -6.265625 6.078125 -6.3125 C 5.859375 -6.453125 5.75 -6.640625 5.671875 -6.875 C 5.640625 -6.96875 5.609375 -7.09375 5.46875 -7.09375 C 5.328125 -7.09375 5.265625 -6.96875 5.265625 -6.890625 C 5.265625 -6.84375 5.34375 -6.515625 5.5 -6.3125 L 2.15625 -6.3125 C 1.984375 -6.3125 1.8125 -6.3125 1.8125 -6.109375 C 1.8125 -5.90625 1.984375 -5.90625 2.15625 -5.90625 L 5.34375 -5.90625 C 5.203125 -5.78125 4.875 -5.5 4.875 -5.328125 C 4.875 -5.234375 4.96875 -5.125 5.0625 -5.125 C 5.15625 -5.125 5.203125 -5.203125 5.25 -5.25 C 5.375 -5.40625 5.609375 -5.6875 6.046875 -5.90625 C 6.109375 -5.9375 6.21875 -6 6.21875 -6.109375 Z M 6.21875 -6.109375 "/>
<path d="M 4.859375 -2.796875 C 4.859375 -3.734375 4.296875 -4.390625 3.546875 -4.390625 C 3.046875 -4.390625 2.5625 -4.03125 2.25 -3.640625 C 2.140625 -4.171875 1.71875 -4.390625 1.34375 -4.390625 C 0.890625 -4.390625 0.703125 -4 0.609375 -3.8125 C 0.4375 -3.484375 0.3125 -2.890625 0.3125 -2.859375 C 0.3125 -2.765625 0.421875 -2.765625 0.421875 -2.765625 C 0.53125 -2.765625 0.53125 -2.765625 0.59375 -2.984375 C 0.765625 -3.6875 0.96875 -4.171875 1.3125 -4.171875 C 1.484375 -4.171875 1.625 -4.09375 1.625 -3.703125 C 1.625 -3.484375 1.59375 -3.375 1.5625 -3.203125 L 0.453125 1.203125 C 0.359375 1.546875 0.34375 1.625 -0.09375 1.625 C -0.203125 1.625 -0.3125 1.625 -0.3125 1.8125 C -0.3125 1.890625 -0.265625 1.921875 -0.1875 1.921875 C 0.078125 1.921875 0.359375 1.890625 0.640625 1.890625 C 0.96875 1.890625 1.3125 1.921875 1.625 1.921875 C 1.671875 1.921875 1.8125 1.921875 1.8125 1.71875 C 1.8125 1.625 1.703125 1.625 1.5625 1.625 C 1.078125 1.625 1.078125 1.546875 1.078125 1.453125 C 1.078125 1.34375 1.484375 -0.28125 1.5625 -0.53125 C 1.6875 -0.234375 1.96875 0.109375 2.46875 0.109375 C 3.625 0.109375 4.859375 -1.34375 4.859375 -2.796875 Z M 3.640625 -1.125 C 3.296875 -0.4375 2.828125 -0.109375 2.453125 -0.109375 C 1.8125 -0.109375 1.671875 -0.9375 1.671875 -0.984375 C 1.671875 -0.984375 1.671875 -1.03125 1.703125 -1.15625 L 2.1875 -3.09375 C 2.265625 -3.359375 2.53125 -3.640625 2.703125 -3.796875 C 3.0625 -4.09375 3.34375 -4.171875 3.515625 -4.171875 C 3.90625 -4.171875 4.140625 -3.8125 4.140625 -3.234375 C 4.140625 -2.65625 3.8125 -1.515625 3.640625 -1.125 Z M 3.640625 -1.125 "/>
</g>
<g id="glyph-1-6">
<path d="M 4.875 -2.796875 C 4.875 -3.734375 4.296875 -4.390625 3.546875 -4.390625 C 3.046875 -4.390625 2.578125 -4.03125 2.25 -3.640625 C 2.140625 -4.1875 1.71875 -4.390625 1.34375 -4.390625 C 0.890625 -4.390625 0.703125 -4 0.609375 -3.828125 C 0.4375 -3.484375 0.3125 -2.890625 0.3125 -2.859375 C 0.3125 -2.765625 0.421875 -2.765625 0.421875 -2.765625 C 0.53125 -2.765625 0.53125 -2.765625 0.59375 -2.984375 C 0.765625 -3.703125 0.96875 -4.171875 1.328125 -4.171875 C 1.484375 -4.171875 1.625 -4.09375 1.625 -3.71875 C 1.625 -3.484375 1.59375 -3.375 1.5625 -3.203125 L 0.453125 1.21875 C 0.375 1.546875 0.34375 1.625 -0.09375 1.625 C -0.203125 1.625 -0.3125 1.625 -0.3125 1.8125 C -0.3125 1.890625 -0.265625 1.921875 -0.1875 1.921875 C 0.078125 1.921875 0.375 1.890625 0.640625 1.890625 C 0.96875 1.890625 1.3125 1.921875 1.625 1.921875 C 1.671875 1.921875 1.8125 1.921875 1.8125 1.734375 C 1.8125 1.625 1.703125 1.625 1.5625 1.625 C 1.078125 1.625 1.078125 1.546875 1.078125 1.453125 C 1.078125 1.34375 1.484375 -0.28125 1.5625 -0.53125 C 1.6875 -0.234375 1.96875 0.109375 2.46875 0.109375 C 3.625 0.109375 4.875 -1.34375 4.875 -2.796875 Z M 3.640625 -1.140625 C 3.3125 -0.4375 2.828125 -0.109375 2.46875 -0.109375 C 1.8125 -0.109375 1.671875 -0.9375 1.671875 -1 C 1.671875 -1 1.671875 -1.03125 1.703125 -1.15625 L 2.203125 -3.09375 C 2.265625 -3.375 2.53125 -3.640625 2.71875 -3.796875 C 3.0625 -4.109375 3.34375 -4.171875 3.515625 -4.171875 C 3.921875 -4.171875 4.15625 -3.828125 4.15625 -3.234375 C 4.15625 -2.65625 3.828125 -1.515625 3.640625 -1.140625 Z M 3.640625 -1.140625 "/>
</g>
<g id="glyph-1-7">
<path d="M 3.828125 -1.8125 C 3.921875 -2.140625 3.96875 -2.5 3.96875 -2.828125 C 3.96875 -2.984375 3.953125 -3.125 3.9375 -3.28125 C 3.84375 -3.75 3.640625 -4.140625 3.359375 -4.484375 C 2.921875 -5.0625 2.296875 -5.84375 2.296875 -6.296875 C 2.296875 -6.34375 2.3125 -6.40625 2.328125 -6.453125 C 2.390625 -6.546875 2.46875 -6.640625 2.546875 -6.6875 C 2.65625 -6.734375 2.765625 -6.75 2.875 -6.75 C 3.3125 -6.734375 3.59375 -6.40625 3.96875 -6.25 C 4.015625 -6.234375 4.046875 -6.234375 4.078125 -6.234375 C 4.21875 -6.234375 4.375 -6.3125 4.4375 -6.453125 C 4.46875 -6.515625 4.484375 -6.5625 4.484375 -6.625 C 4.484375 -6.75 4.40625 -6.859375 4.28125 -6.890625 C 3.921875 -6.96875 3.5 -7.078125 3.140625 -7.078125 C 3.046875 -7.078125 2.96875 -7.0625 2.875 -7.0625 C 2.75 -7.03125 2.59375 -6.984375 2.453125 -6.890625 C 2.328125 -6.8125 2.21875 -6.703125 2.140625 -6.5625 C 2.0625 -6.40625 2.03125 -6.234375 2.03125 -6.046875 C 2.03125 -5.53125 2.328125 -4.890625 2.640625 -4.328125 C 2.21875 -4.25 1.828125 -4.03125 1.484375 -3.734375 C 0.984375 -3.3125 0.640625 -2.75 0.5 -2.171875 C 0.453125 -1.953125 0.421875 -1.765625 0.421875 -1.5625 C 0.421875 -1.1875 0.515625 -0.859375 0.703125 -0.5625 C 0.96875 -0.15625 1.4375 0.109375 2 0.109375 C 2.875 0.109375 3.59375 -0.828125 3.828125 -1.8125 Z M 3.1875 -1.625 C 2.984375 -0.890625 2.640625 -0.109375 2 -0.109375 C 1.59375 -0.109375 1.296875 -0.34375 1.15625 -0.671875 C 1.078125 -0.859375 1.03125 -1.0625 1.03125 -1.28125 C 1.03125 -1.546875 1.09375 -1.84375 1.15625 -2.109375 C 1.296875 -2.640625 1.484375 -3.15625 1.890625 -3.578125 C 2.125 -3.828125 2.4375 -4.03125 2.75 -4.125 L 2.765625 -4.078125 C 2.96875 -3.71875 3.15625 -3.34375 3.234375 -2.921875 C 3.265625 -2.765625 3.28125 -2.59375 3.28125 -2.421875 C 3.28125 -2.171875 3.25 -1.890625 3.1875 -1.625 Z M 3.1875 -1.625 "/>
<path d="M 3.8125 -1.8125 C 3.90625 -2.140625 3.953125 -2.484375 3.953125 -2.8125 C 3.953125 -2.96875 3.953125 -3.125 3.921875 -3.28125 C 3.84375 -3.734375 3.625 -4.140625 3.359375 -4.484375 C 2.921875 -5.046875 2.296875 -5.828125 2.296875 -6.28125 C 2.296875 -6.34375 2.296875 -6.40625 2.328125 -6.453125 C 2.375 -6.53125 2.453125 -6.625 2.546875 -6.671875 C 2.65625 -6.734375 2.765625 -6.734375 2.875 -6.734375 C 3.3125 -6.71875 3.59375 -6.40625 3.96875 -6.234375 C 4.015625 -6.234375 4.046875 -6.21875 4.078125 -6.21875 C 4.21875 -6.21875 4.359375 -6.3125 4.4375 -6.4375 C 4.46875 -6.5 4.484375 -6.5625 4.484375 -6.625 C 4.484375 -6.75 4.40625 -6.84375 4.28125 -6.875 C 3.90625 -6.96875 3.5 -7.0625 3.140625 -7.0625 C 3.046875 -7.0625 2.953125 -7.046875 2.875 -7.046875 C 2.734375 -7.015625 2.59375 -6.96875 2.453125 -6.890625 C 2.328125 -6.8125 2.21875 -6.6875 2.140625 -6.546875 C 2.046875 -6.40625 2.03125 -6.234375 2.03125 -6.046875 C 2.03125 -5.515625 2.328125 -4.875 2.625 -4.328125 C 2.21875 -4.234375 1.828125 -4.03125 1.484375 -3.734375 C 0.984375 -3.296875 0.640625 -2.734375 0.5 -2.15625 C 0.453125 -1.953125 0.421875 -1.75 0.421875 -1.5625 C 0.421875 -1.1875 0.515625 -0.859375 0.703125 -0.5625 C 0.96875 -0.15625 1.4375 0.109375 2 0.109375 C 2.875 0.109375 3.578125 -0.828125 3.8125 -1.8125 Z M 3.171875 -1.625 C 2.984375 -0.890625 2.625 -0.109375 2 -0.109375 C 1.59375 -0.109375 1.296875 -0.34375 1.15625 -0.671875 C 1.078125 -0.859375 1.03125 -1.0625 1.03125 -1.28125 C 1.03125 -1.546875 1.09375 -1.828125 1.15625 -2.109375 C 1.296875 -2.625 1.484375 -3.15625 1.890625 -3.578125 C 2.125 -3.828125 2.4375 -4.03125 2.734375 -4.125 L 2.765625 -4.0625 C 2.96875 -3.703125 3.140625 -3.328125 3.21875 -2.921875 C 3.265625 -2.765625 3.28125 -2.59375 3.28125 -2.421875 C 3.28125 -2.15625 3.25 -1.890625 3.171875 -1.625 Z M 3.171875 -1.625 "/>
</g>
<g id="glyph-2-0">
<path d="M 3.28125 0 L 3.28125 -0.25 L 3.015625 -0.25 C 2.328125 -0.25 2.328125 -0.34375 2.328125 -0.5625 L 2.328125 -4.40625 C 2.328125 -4.59375 2.3125 -4.609375 2.109375 -4.609375 C 1.671875 -4.171875 1.046875 -4.15625 0.75 -4.15625 L 0.75 -3.90625 C 0.921875 -3.90625 1.375 -3.90625 1.765625 -4.109375 L 1.765625 -0.5625 C 1.765625 -0.34375 1.765625 -0.25 1.0625 -0.25 L 0.8125 -0.25 L 0.8125 0 L 2.046875 -0.03125 Z M 3.28125 0 "/>
</g>
<g id="glyph-2-1">
<path d="M 3.28125 0 L 3.28125 -0.25 L 3.03125 -0.25 C 2.328125 -0.25 2.328125 -0.34375 2.328125 -0.5625 L 2.328125 -4.421875 C 2.328125 -4.609375 2.3125 -4.609375 2.125 -4.609375 C 1.671875 -4.171875 1.046875 -4.171875 0.765625 -4.171875 L 0.765625 -3.921875 C 0.921875 -3.921875 1.390625 -3.921875 1.765625 -4.109375 L 1.765625 -0.5625 C 1.765625 -0.34375 1.765625 -0.25 1.078125 -0.25 L 0.8125 -0.25 L 0.8125 0 L 2.046875 -0.03125 Z M 3.28125 0 "/>
<path d="M 3.5 -1.265625 L 3.265625 -1.265625 C 3.25 -1.109375 3.171875 -0.703125 3.09375 -0.625 C 3.03125 -0.59375 2.5 -0.59375 2.40625 -0.59375 L 1.125 -0.59375 C 1.859375 -1.234375 2.09375 -1.421875 2.515625 -1.75 C 3.03125 -2.171875 3.5 -2.59375 3.5 -3.25 C 3.5 -4.09375 2.765625 -4.609375 1.875 -4.609375 C 1.015625 -4.609375 0.4375 -4 0.4375 -3.359375 C 0.4375 -3.015625 0.734375 -2.96875 0.8125 -2.96875 C 0.96875 -2.96875 1.171875 -3.09375 1.171875 -3.34375 C 1.171875 -3.46875 1.125 -3.71875 0.765625 -3.71875 C 0.984375 -4.203125 1.453125 -4.359375 1.78125 -4.359375 C 2.46875 -4.359375 2.828125 -3.8125 2.828125 -3.25 C 2.828125 -2.65625 2.40625 -2.171875 2.171875 -1.921875 L 0.5 -0.265625 C 0.4375 -0.203125 0.4375 -0.1875 0.4375 0 L 3.296875 0 Z M 3.5 -1.265625 "/>
</g>
<g id="glyph-2-2">
<path d="M 3.515625 -1.265625 L 3.28125 -1.265625 C 3.25 -1.109375 3.1875 -0.703125 3.09375 -0.625 C 3.03125 -0.59375 2.5 -0.59375 2.40625 -0.59375 L 1.125 -0.59375 C 1.859375 -1.234375 2.09375 -1.4375 2.515625 -1.765625 C 3.03125 -2.171875 3.515625 -2.59375 3.515625 -3.265625 C 3.515625 -4.109375 2.78125 -4.609375 1.890625 -4.609375 C 1.015625 -4.609375 0.4375 -4.015625 0.4375 -3.375 C 0.4375 -3.015625 0.734375 -2.984375 0.8125 -2.984375 C 0.96875 -2.984375 1.171875 -3.09375 1.171875 -3.34375 C 1.171875 -3.484375 1.125 -3.71875 0.765625 -3.71875 C 0.984375 -4.21875 1.453125 -4.359375 1.78125 -4.359375 C 2.46875 -4.359375 2.84375 -3.828125 2.84375 -3.265625 C 2.84375 -2.65625 2.40625 -2.171875 2.1875 -1.921875 L 0.5 -0.265625 C 0.4375 -0.203125 0.4375 -0.1875 0.4375 0 L 3.296875 0 Z M 3.515625 -1.265625 "/>
<path d="M 3.5625 -1.203125 C 3.5625 -1.734375 3.125 -2.28125 2.359375 -2.4375 C 3.09375 -2.703125 3.34375 -3.21875 3.34375 -3.65625 C 3.34375 -4.203125 2.71875 -4.609375 1.953125 -4.609375 C 1.171875 -4.609375 0.59375 -4.234375 0.59375 -3.671875 C 0.59375 -3.4375 0.75 -3.3125 0.953125 -3.3125 C 1.171875 -3.3125 1.296875 -3.46875 1.296875 -3.65625 C 1.296875 -3.859375 1.171875 -4.015625 0.953125 -4.03125 C 1.1875 -4.328125 1.671875 -4.40625 1.921875 -4.40625 C 2.234375 -4.40625 2.671875 -4.25 2.671875 -3.65625 C 2.671875 -3.359375 2.578125 -3.03125 2.40625 -2.828125 C 2.171875 -2.5625 1.984375 -2.546875 1.625 -2.53125 C 1.453125 -2.515625 1.4375 -2.515625 1.40625 -2.5 C 1.40625 -2.5 1.34375 -2.484375 1.34375 -2.421875 C 1.34375 -2.3125 1.40625 -2.3125 1.515625 -2.3125 L 1.890625 -2.3125 C 2.4375 -2.3125 2.828125 -1.9375 2.828125 -1.203125 C 2.828125 -0.34375 2.328125 -0.078125 1.921875 -0.078125 C 1.640625 -0.078125 1.03125 -0.15625 0.75 -0.5625 C 1.0625 -0.578125 1.140625 -0.8125 1.140625 -0.953125 C 1.140625 -1.171875 0.984375 -1.34375 0.765625 -1.34375 C 0.5625 -1.34375 0.375 -1.21875 0.375 -0.9375 C 0.375 -0.28125 1.09375 0.140625 1.9375 0.140625 C 2.90625 0.140625 3.5625 -0.5 3.5625 -1.203125 Z M 3.5625 -1.203125 "/>
</g>
<g id="glyph-2-3">
<path d="M 3.578125 -1.203125 C 3.578125 -1.75 3.125 -2.28125 2.359375 -2.453125 C 3.09375 -2.71875 3.359375 -3.234375 3.359375 -3.65625 C 3.359375 -4.203125 2.71875 -4.609375 1.953125 -4.609375 C 1.1875 -4.609375 0.59375 -4.234375 0.59375 -3.6875 C 0.59375 -3.453125 0.75 -3.3125 0.953125 -3.3125 C 1.171875 -3.3125 1.3125 -3.484375 1.3125 -3.671875 C 1.3125 -3.875 1.171875 -4.015625 0.953125 -4.03125 C 1.203125 -4.34375 1.671875 -4.421875 1.9375 -4.421875 C 2.25 -4.421875 2.6875 -4.265625 2.6875 -3.65625 C 2.6875 -3.359375 2.59375 -3.046875 2.40625 -2.828125 C 2.171875 -2.5625 1.984375 -2.546875 1.640625 -2.53125 C 1.453125 -2.515625 1.453125 -2.515625 1.40625 -2.515625 C 1.40625 -2.515625 1.34375 -2.5 1.34375 -2.421875 C 1.34375 -2.328125 1.40625 -2.328125 1.515625 -2.328125 L 1.890625 -2.328125 C 2.4375 -2.328125 2.828125 -1.953125 2.828125 -1.203125 C 2.828125 -0.34375 2.328125 -0.078125 1.921875 -0.078125 C 1.640625 -0.078125 1.03125 -0.15625 0.75 -0.5625 C 1.078125 -0.578125 1.140625 -0.8125 1.140625 -0.953125 C 1.140625 -1.1875 0.984375 -1.34375 0.765625 -1.34375 C 0.5625 -1.34375 0.375 -1.21875 0.375 -0.9375 C 0.375 -0.28125 1.09375 0.140625 1.9375 0.140625 C 2.90625 0.140625 3.578125 -0.5 3.578125 -1.203125 Z M 3.578125 -1.203125 "/>
</g>
<g id="glyph-2-4">
<path d="M 3.671875 -1.140625 L 3.671875 -1.390625 L 2.90625 -1.390625 L 2.90625 -4.484375 C 2.90625 -4.640625 2.90625 -4.6875 2.75 -4.6875 C 2.671875 -4.6875 2.640625 -4.6875 2.578125 -4.59375 L 0.265625 -1.390625 L 0.265625 -1.140625 L 2.3125 -1.140625 L 2.3125 -0.5625 C 2.3125 -0.328125 2.3125 -0.25 1.75 -0.25 L 1.5625 -0.25 L 1.5625 0 L 2.609375 -0.03125 L 3.65625 0 L 3.65625 -0.25 L 3.46875 -0.25 C 2.90625 -0.25 2.90625 -0.328125 2.90625 -0.5625 L 2.90625 -1.140625 Z M 2.359375 -1.390625 L 0.53125 -1.390625 L 2.359375 -3.9375 Z M 2.359375 -1.390625 "/>
<path d="M 3.671875 -1.140625 L 3.671875 -1.390625 L 2.90625 -1.390625 L 2.90625 -4.484375 C 2.90625 -4.625 2.90625 -4.671875 2.75 -4.671875 C 2.65625 -4.671875 2.640625 -4.671875 2.5625 -4.578125 L 0.265625 -1.390625 L 0.265625 -1.140625 L 2.3125 -1.140625 L 2.3125 -0.5625 C 2.3125 -0.328125 2.3125 -0.25 1.75 -0.25 L 1.5625 -0.25 L 1.5625 0 L 2.609375 -0.03125 L 3.65625 0 L 3.65625 -0.25 L 3.46875 -0.25 C 2.90625 -0.25 2.90625 -0.328125 2.90625 -0.5625 L 2.90625 -1.140625 Z M 2.359375 -1.390625 L 0.53125 -1.390625 L 2.359375 -3.921875 Z M 2.359375 -1.390625 "/>
</g>
</g>
<clipPath id="clip-0">
<path clip-rule="nonzero" d="M 0.0195312 0 L 187 0 L 187 174.285156 L 0.0195312 174.285156 Z M 0.0195312 0 "/>
</clipPath>
<clipPath id="clip-1">
<path clip-rule="nonzero" d="M 202 98 L 225.132812 98 L 225.132812 130 L 202 130 Z M 202 98 "/>
<path clip-rule="nonzero" d="M 0 0.246094 L 173.441406 0.246094 L 173.441406 173.183594 L 0 173.183594 Z M 0 0.246094 "/>
</clipPath>
</defs>
<path fill-rule="nonzero" fill="rgb(69.999695%, 69.999695%, 100%)" fill-opacity="1" d="M 169.675781 83.097656 L 169.609375 74.113281 C 169.597656 72.550781 169.449219 70.027344 169.277344 68.472656 L 168.246094 59.117188 C 168.074219 57.5625 167.359375 55.175781 166.644531 53.789062 L 162.355469 45.425781 C 161.640625 44.035156 160.324219 41.878906 159.417969 40.605469 L 153.992188 33.015625 C 153.085938 31.746094 151.261719 30.066406 149.921875 29.261719 L 141.820312 24.40625 C 140.480469 23.605469 138.414062 22.148438 137.207031 21.160156 L 130.394531 15.570312 C 129.1875 14.578125 127.210938 12.996094 125.976562 12.035156 L 118.449219 6.167969 C 117.214844 5.207031 114.984375 4.140625 113.460938 3.785156 L 104.28125 1.640625 C 102.761719 1.285156 100.285156 1.234375 98.75 1.53125 L 89.332031 3.339844 C 87.796875 3.632812 85.300781 3.691406 83.753906 3.46875 L 74.503906 2.125 C 72.960938 1.902344 70.464844 1.96875 68.933594 2.277344 L 59.753906 4.117188 C 58.222656 4.425781 56.015625 5.492188 54.824219 6.503906 L 47.507812 12.730469 C 46.316406 13.742188 44.136719 14.921875 42.640625 15.367188 L 33.101562 18.191406 C 31.605469 18.632812 29.601562 19.984375 28.628906 21.207031 L 22.707031 28.660156 C 21.734375 29.882812 20.3125 31.96875 19.527344 33.320312 L 14.90625 41.292969 C 14.125 42.644531 12.820312 44.816406 11.992188 46.140625 L 7.058594 54.046875 C 6.230469 55.371094 5.363281 57.695312 5.121094 59.242188 L 3.679688 68.441406 C 3.4375 69.984375 3.121094 72.496094 2.976562 74.050781 L 2.128906 83.109375 C 1.984375 84.664062 1.792969 87.191406 1.707031 88.75 L 1.171875 98.183594 C 1.085938 99.742188 1.511719 102.171875 2.128906 103.605469 L 5.859375 112.289062 C 6.476562 113.726562 7.605469 115.988281 8.378906 117.34375 L 12.867188 125.199219 C 13.644531 126.558594 14.75 128.832031 15.335938 130.277344 L 18.933594 139.152344 C 19.519531 140.601562 20.945312 142.613281 22.113281 143.652344 L 29.164062 149.917969 C 30.332031 150.957031 32.40625 152.375 33.796875 153.089844 L 42.066406 157.332031 C 43.457031 158.042969 45.632812 159.328125 46.929688 160.199219 L 54.699219 165.421875 C 55.992188 166.292969 58.265625 167.339844 59.769531 167.757812 L 68.820312 170.277344 C 70.328125 170.699219 72.800781 171.226562 74.34375 171.457031 L 83.757812 172.871094 C 85.300781 173.105469 87.8125 173.148438 89.363281 172.972656 L 98.847656 171.898438 C 100.398438 171.722656 102.859375 171.191406 104.347656 170.707031 L 113.339844 167.785156 C 114.824219 167.300781 117.089844 166.21875 118.398438 165.363281 L 126.214844 160.269531 C 127.523438 159.417969 129.6875 158.101562 131.046875 157.332031 L 139.046875 152.808594 C 140.40625 152.039062 142.191406 150.351562 143.035156 149.035156 L 148.066406 141.203125 C 148.910156 139.890625 150.558594 138.003906 151.75 136.992188 L 158.992188 130.824219 C 160.179688 129.8125 161.515625 127.78125 161.976562 126.285156 L 164.710938 117.378906 C 165.167969 115.886719 166.121094 113.550781 166.84375 112.164062 L 171.277344 103.605469 C 171.996094 102.21875 172.34375 99.847656 172.050781 98.316406 L 170.226562 88.703125 C 169.933594 87.167969 169.6875 84.660156 169.675781 83.097656 Z M 169.675781 83.097656 "/>
<path fill-rule="nonzero" fill="rgb(69.999695%, 69.999695%, 100%)" fill-opacity="1" d="M 171 84.011719 L 169.988281 75.003906 C 169.816406 73.453125 169.535156 70.941406 169.363281 69.394531 L 168.320312 60.050781 C 168.148438 58.503906 167.417969 56.128906 166.6875 54.753906 L 162.289062 46.46875 C 161.558594 45.09375 160.101562 43.054688 159.039062 41.914062 L 152.726562 35.144531 C 151.664062 34.007812 150.160156 31.992188 149.371094 30.648438 L 144.425781 22.238281 C 143.636719 20.894531 141.800781 19.398438 140.324219 18.894531 L 131.015625 15.710938 C 129.539062 15.207031 127.292969 14.097656 125.992188 13.238281 L 118.316406 8.15625 C 117.015625 7.292969 114.78125 6.148438 113.324219 5.59375 L 104.492188 2.238281 C 103.035156 1.6875 100.609375 1.457031 99.074219 1.726562 L 89.542969 3.394531 C 88.007812 3.664062 85.507812 3.753906 83.957031 3.597656 L 74.683594 2.660156 C 73.132812 2.503906 70.722656 2.890625 69.296875 3.527344 L 60.824219 7.316406 C 59.398438 7.949219 57.042969 8.847656 55.558594 9.320312 L 46.808594 12.097656 C 45.324219 12.570312 43.125 13.734375 41.902344 14.699219 L 34.695312 20.378906 C 33.472656 21.339844 31.621094 23.054688 30.566406 24.199219 L 24.449219 30.847656 C 23.394531 31.996094 21.90625 34.019531 21.128906 35.371094 L 16.675781 43.09375 C 15.898438 44.445312 14.566406 46.589844 13.703125 47.886719 L 8.644531 55.46875 C 7.78125 56.761719 6.902344 59.066406 6.679688 60.609375 L 5.390625 69.605469 C 5.171875 71.148438 4.652344 73.617188 4.238281 75.117188 L 1.746094 84.097656 C 1.332031 85.601562 1.117188 88.074219 1.265625 89.625 L 2.171875 98.875 C 2.320312 100.425781 2.707031 102.921875 3.027344 104.445312 L 4.960938 113.617188 C 5.285156 115.144531 6.164062 117.480469 6.929688 118.839844 L 11.527344 126.996094 C 12.292969 128.355469 13.574219 130.53125 14.390625 131.859375 L 19.28125 139.800781 C 20.097656 141.125 21.75 142.988281 22.972656 143.957031 L 30.273438 149.75 C 31.496094 150.71875 33.519531 152.226562 34.800781 153.117188 L 42.246094 158.304688 C 43.523438 159.195312 45.710938 160.433594 47.132812 161.074219 L 55.386719 164.792969 C 56.808594 165.433594 59.195312 166.226562 60.714844 166.566406 L 69.496094 168.519531 C 71.015625 168.859375 73.496094 169.339844 75.035156 169.59375 L 83.980469 171.074219 C 85.519531 171.332031 88.027344 171.59375 89.582031 171.660156 L 99 172.070312 C 100.554688 172.136719 103 171.75 104.460938 171.207031 L 113.277344 167.917969 C 114.738281 167.371094 116.953125 166.199219 118.226562 165.300781 L 125.753906 159.972656 C 127.027344 159.070312 129.230469 157.867188 130.675781 157.285156 L 139.421875 153.746094 C 140.867188 153.160156 142.738281 151.636719 143.601562 150.339844 L 148.804688 142.539062 C 149.667969 141.242188 151.019531 139.105469 151.820312 137.769531 L 156.328125 130.238281 C 157.128906 128.902344 158.578125 126.839844 159.566406 125.636719 L 165.558594 118.332031 C 166.546875 117.125 167.777344 114.960938 168.300781 113.492188 L 171.496094 104.582031 C 172.023438 103.113281 172.355469 100.667969 172.238281 99.113281 L 171.527344 89.632812 C 171.410156 88.078125 171.175781 85.5625 171 84.011719 Z M 171 84.011719 "/>
<g clip-path="url(#clip-0)">
<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 83.29207 2.833478 L 83.225528 11.836219 C 83.213785 13.401913 83.065044 15.930508 82.892818 17.488374 L 81.85946 26.862967 C 81.687233 28.420832 80.970928 30.81243 80.254623 32.201984 L 75.956793 40.582361 C 75.240488 41.975828 73.921391 44.136486 73.013288 45.412527 L 67.576416 53.017885 C 66.668313 54.290012 64.840366 55.973133 63.497783 56.779465 L 55.379659 61.644859 C 54.037077 62.447278 51.966447 63.907287 50.756948 64.897589 L 43.930522 70.498859 C 42.721023 71.493075 40.74042 73.07834 39.503522 74.041242 L 31.960791 79.920423 C 30.723893 80.883325 28.488865 81.951911 26.962313 82.308106 L 17.763861 84.457021 C 16.241223 84.813217 13.759598 84.864102 12.221304 84.56662 L 2.784083 82.754329 C 1.245789 82.460761 -1.255407 82.402048 -2.805444 82.625159 L -12.074353 83.971656 C -13.620476 84.194768 -16.121672 84.128226 -17.656052 83.819001 L -26.854504 81.975396 C -28.388885 81.666172 -30.600427 80.597586 -31.794269 79.583799 L -39.125631 73.344508 C -40.319473 72.330721 -42.503616 71.148622 -44.002768 70.702399 L -53.56133 67.872407 C -55.060482 67.430099 -57.068485 66.075774 -58.043129 64.850618 L -63.97711 57.382258 C -64.951754 56.157102 -66.376536 54.0669 -67.163297 52.712575 L -71.793837 44.723621 C -72.576684 43.369296 -73.884038 41.192981 -74.713856 39.866056 L -79.657535 31.943644 C -80.487353 30.616718 -81.356313 28.287748 -81.598996 26.737711 L -83.043348 17.519688 C -83.286031 15.973565 -83.603084 13.456712 -83.747911 11.898846 L -84.5973 2.821735 C -84.742126 1.26387 -84.933924 -1.26864 -85.020037 -2.83042 L -85.556287 -12.283298 C -85.642401 -13.845077 -85.215749 -16.279732 -84.5973 -17.716256 L -80.859205 -26.4176 C -80.240756 -27.858039 -79.109542 -30.124381 -78.334524 -31.482621 L -73.837068 -39.354147 C -73.058135 -40.716301 -71.950406 -42.994386 -71.363271 -44.442653 L -67.758261 -53.335795 C -67.171125 -54.787976 -65.74243 -56.803807 -64.572073 -57.844994 L -57.506879 -64.123427 C -56.336523 -65.164613 -54.258064 -66.58548 -52.864596 -67.301785 L -44.578161 -71.552645 C -43.184693 -72.265035 -41.004464 -73.552819 -39.704938 -74.425693 L -31.919525 -79.659025 C -30.623913 -80.5319 -28.345828 -81.580915 -26.838848 -81.999738 L -17.769565 -84.52442 C -16.25867 -84.947157 -13.780959 -85.475579 -12.234837 -85.706519 L -2.80153 -87.123472 C -1.255407 -87.358326 1.261446 -87.401382 2.815397 -87.225242 L 12.31916 -86.148827 C 13.873111 -85.972687 16.339079 -85.440351 17.830403 -84.954985 L 26.840972 -82.027138 C 28.328381 -81.541773 30.598637 -80.457529 31.909906 -79.600312 L 39.742291 -74.496149 C 41.053559 -73.642846 43.222045 -72.323749 44.584199 -71.552645 L 52.600553 -67.019961 C 53.962706 -66.248856 55.751512 -64.557907 56.596987 -63.238809 L 61.638521 -55.390768 C 62.483996 -54.075585 64.135803 -52.18501 65.329645 -51.171223 L 72.586637 -44.990646 C 73.776564 -43.976859 75.115233 -41.941457 75.577112 -40.442305 L 78.317077 -31.517849 C 78.775042 -30.022611 79.730116 -27.681898 80.454249 -26.292345 L 84.896906 -17.716256 C 85.617125 -16.326703 85.965492 -13.950762 85.671924 -12.416382 L 83.843977 -2.783449 C 83.550409 -1.245155 83.303812 1.267784 83.29207 2.833478 Z M 83.29207 2.833478 " transform="matrix(0.99796, 0, 0, -0.99796, 86.553628, 85.925354)"/>
<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 84.61357 2.818538 L 83.597316 11.866732 C 83.42467 13.424465 83.142159 15.947443 82.969514 17.501253 L 81.921869 26.88689 C 81.749224 28.440699 81.015481 30.826346 80.281737 32.20751 L 75.863582 40.529807 C 75.129839 41.910971 73.666276 43.959175 72.599013 45.104913 L 66.258215 51.904791 C 65.190952 53.046605 63.680304 55.071266 62.887704 56.42104 L 57.920222 64.868898 C 57.127623 66.218672 55.283455 67.721472 53.800273 68.227637 L 44.44995 71.425503 C 42.966768 71.931668 40.710606 73.046016 39.403993 73.909244 L 31.693803 79.014057 C 30.38719 79.881208 28.142799 81.03087 26.679236 81.588044 L 17.807612 84.958555 C 16.344049 85.511805 13.907393 85.743307 12.365355 85.472568 L 2.791378 83.797122 C 1.24934 83.526382 -1.261868 83.436136 -2.819601 83.593086 L -12.13461 84.534789 C -13.692343 84.691739 -16.113304 84.303287 -17.545477 83.663714 L -26.056115 79.857666 C -27.488287 79.222016 -29.854315 78.319551 -31.345345 77.844776 L -40.13457 75.054982 C -41.625599 74.580207 -43.834677 73.410926 -45.062814 72.441757 L -52.302153 66.736608 C -53.53029 65.771363 -55.390153 64.048832 -56.449569 62.89917 L -62.594179 56.220928 C -63.653594 55.067342 -65.148547 53.034834 -65.929376 51.677213 L -70.402463 43.919937 C -71.183292 42.562316 -72.521295 40.408171 -73.388446 39.105482 L -78.469716 31.489461 C -79.336868 30.190697 -80.219714 27.875677 -80.443368 26.325792 L -81.73821 17.28937 C -81.95794 15.739484 -82.4798 13.259667 -82.895719 11.752943 L -85.399079 2.732216 C -85.814997 1.221568 -86.030804 -1.262173 -85.881701 -2.819906 L -84.971389 -12.111373 C -84.822286 -13.669106 -84.433833 -16.176389 -84.112085 -17.706656 L -82.169823 -26.919648 C -81.844151 -28.453838 -80.961305 -30.800247 -80.192248 -32.165716 L -75.573981 -40.35853 C -74.804924 -41.723998 -73.51793 -43.909533 -72.697864 -45.243612 L -67.785315 -53.220619 C -66.965249 -54.550774 -65.305498 -56.422408 -64.07736 -57.395501 L -56.743851 -63.214438 C -55.515714 -64.187531 -53.483205 -65.702103 -52.196212 -66.596721 L -44.717523 -71.807475 C -43.434453 -72.702093 -41.237147 -73.945925 -39.808898 -74.589422 L -31.51799 -78.324843 C -30.089741 -78.96834 -27.692323 -79.764863 -26.16598 -80.10623 L -17.345365 -82.068111 C -15.819022 -82.409478 -13.327433 -82.892101 -11.781471 -83.147145 L -2.796058 -84.634251 C -1.250096 -84.893219 1.268958 -85.156111 2.830615 -85.222815 L 12.290803 -85.63481 C 13.85246 -85.701514 16.308735 -85.313061 17.776222 -84.767659 L 26.632151 -81.463852 C 28.099637 -80.914525 30.32441 -79.737397 31.603556 -78.834932 L 39.164644 -73.482922 C 40.44379 -72.576533 42.656791 -71.368014 44.108583 -70.783374 L 52.893884 -67.228446 C 54.345676 -66.639882 56.225157 -65.109615 57.092309 -63.806926 L 62.318759 -55.971175 C 63.18591 -54.668487 64.543531 -52.522189 65.347902 -51.180263 L 69.875923 -43.615251 C 70.680294 -42.273325 72.136009 -40.201579 73.128721 -38.993061 L 79.14777 -31.655627 C 80.140482 -30.443185 81.376467 -28.269421 81.902251 -26.794087 L 85.111887 -17.843988 C 85.641595 -16.368654 85.975115 -13.912379 85.857402 -12.350722 L 85.143277 -2.827754 C 85.025565 -1.266097 84.790139 1.260805 84.61357 2.818538 Z M 84.61357 2.818538 " transform="matrix(0.995537, 0, 0, -0.995537, 86.764049, 86.817679)"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="197.222402" y="116.423012"/>
<use xlink:href="#glyph-0-0" x="84.284166" y="89.021798"/>
</g>
<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 113.388623 -28.347318 L 131.429332 -28.347318 " transform="matrix(0.99796, 0, 0, -0.99796, 86.553628, 85.925354)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 220.925781 114.214844 L 216.488281 112.535156 L 217.964844 114.214844 L 216.488281 115.894531 Z M 220.925781 114.214844 "/>
<g clip-path="url(#clip-1)">
<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 6.054133 -0.000518319 L 1.607562 1.682603 L 3.087143 -0.000518319 L 1.607562 -1.683639 Z M 6.054133 -0.000518319 " transform="matrix(0.99796, 0, 0, -0.99796, 214.883998, 114.214326)"/>
<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 0.00158346 0.00127797 L 18.043037 0.00127797 " transform="matrix(0.995537, 0, 0, -0.995537, 86.764049, 86.817679)"/>
<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.055062 0.00127797 L 1.60944 1.684572 L 3.088698 0.00127797 L 1.60944 -1.682016 Z M 6.055062 0.00127797 " transform="matrix(0.995537, 0, 0, -0.995537, 101.901649, 86.817679)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-0" x="99.8693" y="83.015722"/>
</g>
<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 0.00158346 0.00127797 L 0.00158346 18.042732 " transform="matrix(0.995537, 0, 0, -0.995537, 86.764049, 86.817679)"/>
<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.054756 -0.00158346 L 1.609135 1.68171 L 3.088393 -0.00158346 L 1.609135 -1.684877 Z M 6.054756 -0.00158346 " transform="matrix(0, -0.995537, -0.995537, 0, 86.764049, 71.680078)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="90.565009" y="72.313698"/>
</g>
<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 1.13555 0.00127797 C 1.13555 0.625156 0.625461 1.135245 0.00158346 1.135245 C -0.626218 1.135245 -1.132384 0.625156 -1.132384 0.00127797 C -1.132384 -0.626524 -0.626218 -1.132689 0.00158346 -1.132689 C 0.625461 -1.132689 1.13555 -0.626524 1.13555 0.00127797 Z M 1.13555 0.00127797 " transform="matrix(0.995537, 0, 0, -0.995537, 86.764049, 86.817679)"/>
<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 4.533528 0.00127797 C 4.533528 2.504638 2.504943 4.537146 0.00158346 4.537146 C -2.5057 4.537146 -4.534284 2.504638 -4.534284 0.00127797 C -4.534284 -2.506005 -2.5057 -4.53459 0.00158346 -4.53459 C 2.504943 -4.53459 4.533528 -2.506005 4.533528 0.00127797 Z M 4.533528 0.00127797 " transform="matrix(0.995537, 0, 0, -0.995537, 86.764049, 86.817679)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-2" x="72.902189" y="88.953106"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="212.846463" y="110.402319"/>
</g>
<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 113.388623 -28.347318 L 113.388623 -10.302695 " transform="matrix(0.99796, 0, 0, -0.99796, 86.553628, 85.925354)"/>
<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.052232 -0.00138277 L 1.609575 1.681738 L 3.089156 -0.00138277 L 1.609575 -1.684504 Z M 6.052232 -0.00138277 " transform="matrix(0, -0.99796, -0.99796, 0, 199.709558, 99.039886)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-2" x="203.519529" y="99.674249"/>
</g>
<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 114.519837 -28.347318 C 114.519837 -27.721041 114.0149 -27.21219 113.388623 -27.21219 C 112.762345 -27.21219 112.253495 -27.721041 112.253495 -28.347318 C 112.253495 -28.973596 112.762345 -29.482446 113.388623 -29.482446 C 114.0149 -29.482446 114.519837 -28.973596 114.519837 -28.347318 Z M 114.519837 -28.347318 " transform="matrix(0.99796, 0, 0, -0.99796, 86.553628, 85.925354)"/>
<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 117.921307 -28.347318 C 117.921307 -25.842208 115.893733 -23.81072 113.388623 -23.81072 C 110.883512 -23.81072 108.852024 -25.842208 108.852024 -28.347318 C 108.852024 -30.852429 110.883512 -32.883917 113.388623 -32.883917 C 115.893733 -32.883917 117.921307 -30.852429 117.921307 -28.347318 Z M 117.921307 -28.347318 " transform="matrix(0.99796, 0, 0, -0.99796, 86.553628, 85.925354)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-3" x="185.813723" y="116.354152"/>
<use xlink:href="#glyph-0-1" x="90.565009" y="98.058288"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-2" x="203.519529" y="125.481494"/>
<use xlink:href="#glyph-1-3" x="95.524775" y="98.058288"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-4" x="208.490368" y="125.481494"/>
<use xlink:href="#glyph-0-2" x="103.365626" y="98.058288"/>
</g>
<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 -42.520217 -42.520522 L -18.785385 -40.146646 " transform="matrix(0.995537, 0, 0, -0.995537, 86.764049, 86.817679)"/>
<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.054883 0.00143888 L 1.609188 1.68425 L 3.089012 -0.00170835 L 1.607653 -1.683395 Z M 6.054883 0.00143888 " transform="matrix(0.99054, -0.099046, -0.099046, -0.99054, 65.252542, 127.065981)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="41.953926" y="131.352037"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-3" x="216.350301" y="125.481494"/>
</g>
<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 -42.519273 -42.520763 L -18.317558 -30.417949 " transform="matrix(0.99796, 0, 0, -0.99796, 86.553628, 85.925354)"/>
<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.054767 -0.000899633 L 1.609945 1.683105 L 3.087488 -0.000952717 L 1.608255 -1.681562 Z M 6.054767 -0.000899633 " transform="matrix(0.892555, -0.446258, -0.446258, -0.892555, 65.739914, 117.54884)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="41.635448" y="130.567099"/>
<use xlink:href="#glyph-1-4" x="39.793611" y="123.417606"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-5" x="39.468877" y="122.613357"/>
<use xlink:href="#glyph-1-5" x="39.714266" y="123.417606"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-6" x="39.389339" y="122.613357"/>
<use xlink:href="#glyph-2-0" x="44.704595" y="124.904939"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-1" x="44.391813" y="124.105308"/>
<use xlink:href="#glyph-1-6" x="76.455261" y="128.904011"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-7" x="76.22075" y="116.798245"/>
<use xlink:href="#glyph-1-4" x="81.319117" y="128.904011"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-5" x="81.096442" y="116.798245"/>
<use xlink:href="#glyph-1-5" x="81.239771" y="128.904011"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-6" x="81.016904" y="116.798245"/>
<use xlink:href="#glyph-2-0" x="86.229445" y="130.392339"/>
</g>
<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 -42.520217 42.519154 L -53.075134 34.07522 " transform="matrix(0.995537, 0, 0, -0.995537, 86.764049, 86.817679)"/>
<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.054812 0.000956149 L 1.607544 1.684401 L 3.087512 -0.00209871 L 1.607534 -1.682461 Z M 6.054812 0.000956149 " transform="matrix(-0.777335, 0.621872, 0.621872, 0.777335, 36.131806, 51.128468)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="41.953926" y="46.691558"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-1" x="86.017723" y="118.290195"/>
</g>
<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 -42.519273 42.519907 L -54.622088 66.721622 " transform="matrix(0.99796, 0, 0, -0.99796, 86.553628, 85.925354)"/>
<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.053509 -0.000688195 L 1.608687 1.683316 L 3.08623 -0.000741279 L 1.610498 -1.683101 Z M 6.053509 -0.000688195 " transform="matrix(-0.446258, -0.892555, -0.892555, 0.446258, 33.310186, 21.87215)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="41.635448" y="45.701578"/>
<use xlink:href="#glyph-1-4" x="39.793611" y="38.758123"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-5" x="39.468877" y="37.747837"/>
<use xlink:href="#glyph-1-5" x="39.714266" y="38.758123"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-6" x="39.389339" y="37.747837"/>
<use xlink:href="#glyph-2-1" x="44.704595" y="40.245455"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-2" x="44.391813" y="39.238789"/>
<use xlink:href="#glyph-1-6" x="23.21294" y="66.663029"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-7" x="33.78749" y="17.788637"/>
<use xlink:href="#glyph-1-4" x="28.076795" y="66.663029"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-5" x="38.663183" y="17.788637"/>
<use xlink:href="#glyph-1-5" x="27.997449" y="66.663029"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-6" x="38.583645" y="17.788637"/>
<use xlink:href="#glyph-2-1" x="32.986128" y="68.151357"/>
</g>
<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 42.51946 42.519154 L 24.438768 40.259068 " transform="matrix(0.995537, 0, 0, -0.995537, 86.764049, 86.817679)"/>
<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.05485 -0.00164313 L 1.607436 1.685177 L 3.089435 0.00124024 L 1.609425 -1.684193 Z M 6.05485 -0.00164313 " transform="matrix(-0.987832, 0.123467, 0.123467, 0.987832, 113.899345, 46.386864)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="126.614405" y="46.691558"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-2" x="43.584464" y="19.279589"/>
</g>
<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 42.521397 42.519907 L 66.723113 54.622722 " transform="matrix(0.99796, 0, 0, -0.99796, 86.553628, 85.925354)"/>
<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.055126 -0.000787607 L 1.610304 1.683217 L 3.087846 -0.000840691 L 1.608613 -1.68145 Z M 6.055126 -0.000787607 " transform="matrix(0.892555, -0.446258, -0.446258, -0.892555, 150.606832, 32.681913)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="126.500968" y="45.701578"/>
<use xlink:href="#glyph-1-4" x="124.453094" y="38.758123"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-5" x="124.335395" y="37.747837"/>
<use xlink:href="#glyph-1-5" x="124.373749" y="38.758123"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-6" x="124.255857" y="37.747837"/>
<use xlink:href="#glyph-2-2" x="129.364078" y="40.245455"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-3" x="129.257334" y="39.238789"/>
<use xlink:href="#glyph-1-6" x="99.406375" y="58.197977"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-7" x="161.08627" y="31.932724"/>
<use xlink:href="#glyph-1-4" x="104.27023" y="58.197977"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-5" x="165.961962" y="31.932724"/>
<use xlink:href="#glyph-1-5" x="104.190885" y="58.197977"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-6" x="165.882424" y="31.932724"/>
<use xlink:href="#glyph-2-2" x="109.179563" y="59.685309"/>
</g>
<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 42.51946 -42.520522 L 52.391643 -38.573218 " transform="matrix(0.995537, 0, 0, -0.995537, 86.764049, 86.817679)"/>
<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.054946 0.000779225 L 1.609415 1.681761 L 3.087865 0.0000340403 L 1.607977 -1.681709 Z M 6.054946 0.000779225 " transform="matrix(0.924297, -0.369713, -0.369713, -0.924297, 136.298254, 126.266654)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-0" x="126.614405" y="131.352037"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-3" x="170.883243" y="33.423676"/>
</g>
<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 42.521397 -42.520763 L 54.620298 -18.319048 " transform="matrix(0.99796, 0, 0, -0.99796, 86.553628, 85.925354)"/>
<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.054217 -0.00133293 L 1.609456 1.684581 L 3.086938 -0.00127984 L 1.607645 -1.681836 Z M 6.054217 -0.00133293 " transform="matrix(0.446258, -0.892555, -0.892555, -0.446258, 139.797069, 106.739067)"/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="126.500968" y="130.567099"/>
<use xlink:href="#glyph-1-4" x="124.453094" y="123.417606"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-5" x="124.335395" y="122.613357"/>
<use xlink:href="#glyph-1-5" x="124.373749" y="123.417606"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-6" x="124.255857" y="122.613357"/>
<use xlink:href="#glyph-2-3" x="129.364078" y="124.904939"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-4" x="129.257334" y="124.105308"/>
<use xlink:href="#glyph-1-6" x="136.091919" y="134.391412"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-7" x="146.942183" y="102.654157"/>
<use xlink:href="#glyph-1-4" x="140.955774" y="134.391412"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-5" x="151.817875" y="102.654157"/>
<use xlink:href="#glyph-1-5" x="140.876428" y="134.391412"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-6" x="151.738337" y="102.654157"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-4" x="156.739156" y="104.14511"/>
<use xlink:href="#glyph-2-3" x="145.866102" y="135.878744"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

23
matlab/mat/acc_pos.txt Normal file
View File

@ -0,0 +1,23 @@
23 1.5500e-001 -9.0000e-002 -5.9400e-001
22 0.0000e+000 1.8000e-001 -5.9400e-001
21 -1.5500e-001 -9.0000e-002 -5.9400e-001
20 8.6490e-001 -5.0600e-001 -9.5060e-001
19 8.7500e-001 7.9900e-001 -9.5060e-001
18 -7.3500e-001 8.1400e-001 -9.5060e-001
17 -7.3000e-001 -5.2600e-001 -9.5060e-001
16 2.9500e-001 -4.8100e-001 -7.8560e-001
15 4.5000e-001 5.3400e-001 -7.8560e-001
14 -4.8000e-001 5.3400e-001 -7.8560e-001
13 -3.2000e-001 -4.4600e-001 -7.8560e-001
12 4.7500e-001 -4.1900e-001 -4.2730e-001
11 4.7500e-001 4.2400e-001 -4.2730e-001
10 -4.6500e-001 4.0700e-001 -4.2730e-001
9 -4.7500e-001 -4.1400e-001 -4.2730e-001
8 3.8000e-001 -3.0000e-001 -4.1680e-001
7 4.2000e-001 2.8000e-001 -4.1680e-001
6 -4.2000e-001 2.8000e-001 -4.1680e-001
5 -3.8500e-001 -3.0000e-001 -4.1680e-001
4 6.4000e-002 -6.4000e-002 -2.7000e-001
3 6.4000e-002 6.4000e-002 -2.7000e-001
2 -6.4000e-002 6.4000e-002 -2.7000e-001
1 -6.4000e-002 -6.4000e-002 -2.7000e-001

BIN
matlab/mat/frf_com.mat Normal file

Binary file not shown.

BIN
matlab/mat/frf_matrix.mat Normal file

Binary file not shown.

BIN
matlab/mat/geometry.mat Normal file

Binary file not shown.

Binary file not shown.

BIN
matlab/mat/meas_raw_1.mat Normal file

Binary file not shown.

Binary file not shown.

16
matlab/mat/mode_damps.txt Normal file
View File

@ -0,0 +1,16 @@
12.20318
11.66888
6.19561
2.79104
2.76253
4.34928
1.25546
3.65470
2.94088
3.19084
1.55526
3.13166
2.76141
1.34304
2.43201
1.38400

16
matlab/mat/mode_freqs.txt Normal file
View File

@ -0,0 +1,16 @@
11.86509
18.55747
37.82163
39.07850
56.31944
69.78452
72.49325
84.83446
91.26350
105.47266
106.57165
112.67669
124.20538
145.30034
150.52113
165.42632

View File

@ -0,0 +1,16 @@
4.13559e+003 +6.22828e+003
2.76278e+002 +1.74197e+004
-1.32270e+004 +2.17346e+004
-2.48397e+005 -1.60998e+005
-4.23967e+004 +7.06852e+004
-7.36964e+003 +4.57024e+004
1.37806e+005 +3.00336e+005
-1.31109e+004 +2.81759e+004
5.59259e+003 -4.27543e+004
-5.28869e+004 +6.38436e+003
3.71578e+004 +1.57745e+004
-4.24659e+004 +7.90956e+003
-3.57355e+004 +1.13161e+005
5.24764e+004 -1.45211e+005
1.97228e+005 +2.51758e+005
-3.00273e+005 +3.27201e+005

View File

@ -0,0 +1,16 @@
4.98475e+005 -2.49344e+005
2.02102e+006 +2.05017e+005
4.96035e+006 +3.45724e+006
-4.12180e+007 +5.98638e+007
2.45891e+007 +1.56880e+007
1.98796e+007 +4.09986e+006
1.37577e+008 -6.10466e+007
1.47532e+007 +7.53272e+006
-2.44115e+007 -3.92655e+006
3.11045e+006 +3.51656e+007
1.09485e+007 -2.47140e+007
4.65546e+006 +3.02251e+007
8.75076e+007 +3.03162e+007
-1.31915e+008 -4.96844e+007
2.42567e+008 -1.80683e+008
3.35742e+008 +3.16782e+008

1104
matlab/mat/mode_shapes.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,18 @@
0.045
0.144
-1.251
0.052
0.258
-0.778
0.000
0.014
-0.600
0.000
-0.005
-0.628
0.000
0.000
-0.580
-0.004
0.006
-0.319

View File

@ -12,48 +12,77 @@ colors = colororder;
% Location of the Accelerometers
% <<ssec:modal_accelerometers>>
% 4 tri-axis accelerometers are used for each solid body.
% Only 2 could have been used as only 6DOF have to be measured, however, we have chosen to have some *redundancy*.
% The location of the accelerometers fixed to the micro-station is essential as it defines where the dynamics is measured.
% A total of 23 accelerometers are fixed to the six key stages of the micro station: the lower and upper granites, the translation stage, the tilt stage, the spindle and the micro hexapod.
% The position of the accelerometers are visually shown on a CAD model in Figure ref:fig:modal_location_accelerometers and their precise locations with respect to a frame located at the point of interest are summarized in Table ref:tab:modal_position_accelerometers.
% Pictures of the accelerometers fixed to the translation stage and to the micro-hexapod are shown in Figure ref:fig:modal_accelerometer_pictures.
% This could also help us identify measurement problems or flexible modes is present.
% As all key stages of the micro-station are foreseen to behave as solid bodies, only 6 acrshort:dof can be considered per solid body.
% However, it was chosen to use four 3-axis accelerometers (i.e. 12 measured acrshort:dof) for each considered solid body to have some redundancy and to be able to verify the solid body assumption (see Section ref:ssec:modal_solid_body_assumption).
% The position of the accelerometers are:
% - 4 on the first granite
% - 4 on the second granite
% - 4 on top of the translation stage (figure ref:fig:accelerometers_ty)
% - 4 on top of the tilt stage
% - 3 on top of the spindle
% - 4 on top of the hexapod (figure ref:fig:accelerometers_hexapod)
% #+attr_latex: :options [t]{0.60\linewidth}
% #+begin_minipage
% #+name: fig:modal_location_accelerometers
% #+caption: Position of the accelerometers
% #+attr_latex: :width 0.99\linewidth :float nil
% [[file:figs/modal_location_accelerometers.png]]
% #+end_minipage
% \hfill
% #+attr_latex: :options [b]{0.38\linewidth}
% #+begin_minipage
% #+begin_scriptsize
% #+name: tab:modal_position_accelerometers
% #+caption: Positions in mm
% #+attr_latex: :environment tabularx :width \linewidth :placement [b] :align Xccc
% #+attr_latex: :booktabs t :float nil :center nil
% #+RESULTS:
% | | $x$ | $y$ | $z$ |
% |--------------+------+------+------|
% | Low. Granite | -730 | -526 | -951 |
% | Low. Granite | -735 | 814 | -951 |
% | Low. Granite | 875 | 799 | -951 |
% | Low. Granite | 865 | -506 | -951 |
% | Up. Granite | -320 | -446 | -786 |
% | Up. Granite | -480 | 534 | -786 |
% | Up. Granite | 450 | 534 | -786 |
% | Up. Granite | 295 | -481 | -786 |
% | Translation | -475 | -414 | -427 |
% | Translation | -465 | 407 | -427 |
% | Translation | 475 | 424 | -427 |
% | Translation | 475 | -419 | -427 |
% | Tilt | -385 | -300 | -417 |
% | Tilt | -420 | 280 | -417 |
% | Tilt | 420 | 280 | -417 |
% | Tilt | 380 | -300 | -417 |
% | Spindle | -155 | -90 | -594 |
% | Spindle | 0 | 180 | -594 |
% | Spindle | 155 | -90 | -594 |
% | Hexapod | -64 | -64 | -270 |
% | Hexapod | -64 | 64 | -270 |
% | Hexapod | 64 | 64 | -270 |
% | Hexapod | 64 | -64 | -270 |
% #+end_scriptsize
% #+end_minipage
% In total, 23 accelerometers are used: *69 DOFs are thus measured*.
% The precise determination of the position of each accelerometer is done using the SolidWorks model (shown on figure ref:fig:location_accelerometers).
% #+name: fig:accelerometer_pictures
% #+caption: Accelerometers fixed on the micro-station
% #+name: fig:modal_accelerometer_pictures
% #+caption: Accelerometers fixed on the micro-station stages
% #+attr_latex: :options [htbp]
% #+begin_figure
% #+attr_latex: :caption \subcaption{\label{fig:accelerometers_ty}$T_y$ stage}
% #+attr_latex: :caption \subcaption{\label{fig:modal_accelerometers_ty} $T_y$ stage}
% #+attr_latex: :options {0.49\textwidth}
% #+begin_subfigure
% #+attr_latex: :height 6cm
% [[file:figs/accelerometers_ty.jpg]]
% [[file:figs/modal_accelerometers_ty.jpg]]
% #+end_subfigure
% #+attr_latex: :caption \subcaption{\label{fig:accelerometers_hexapod}Micro-Hexapod}
% #+attr_latex: :caption \subcaption{\label{fig:modal_accelerometers_hexapod} Micro-Hexapod}
% #+attr_latex: :options {0.49\textwidth}
% #+begin_subfigure
% #+attr_latex: :height 6cm
% [[file:figs/accelerometers_hexapod.jpg]]
% [[file:figs/modal_accelerometers_hexapod.jpg]]
% #+end_subfigure
% #+end_figure
% #+name: fig:location_accelerometers
% #+caption: Position of the accelerometers using SolidWorks
% #+attr_latex: :width \linewidth
% [[file:figs/location_accelerometers.png]]
% The precise position of all the 23 accelerometer with respect to a frame located at the point of interest (located 270mm above the top platform of the hexapod) are shown in table ref:tab:position_accelerometers.
%% Load Accelerometer positions
acc_pos = readtable('mat/acc_pos.txt', 'ReadVariableNames', false);
@ -61,59 +90,18 @@ acc_pos = table2array(acc_pos(:, 1:4));
[~, i] = sort(acc_pos(:, 1));
acc_pos = acc_pos(i, 2:4);
% Signal Processing :noexport:
% <<ssec:modal_signal_processing>>
% The measurements are averaged 10 times corresponding to 10 hammer impacts in order to reduce the effect of random noise.
% Windowing is also used on the force and response signals.
% A boxcar window (figure ref:fig:modal_windowing_force_signal) is used for the force signal as once the impact on the structure is done, the measured signal is meaningless.
% The parameters are:
% - *Start*: $3\%$
% - *Stop*: $7\%$
%% Boxcar window used for the force signal
figure;
plot(100*[0, 0.03, 0.03, 0.07, 0.07, 1], [0, 0, 1, 1, 0, 0]);
xlabel('Time [\%]'); ylabel('Amplitude');
xlim([0, 100]); ylim([0, 1]);
% #+name: fig:modal_windowing_force_signal
% #+caption: Boxcar window used for the force signal
% #+RESULTS:
% [[file:figs/modal_windowing_force_signal.png]]
% An exponential window (figure ref:fig:modal_windowing_acc_signal) is used for the response signal as we are measuring transient signals and most of the information is located at the beginning of the signal.
% The parameters are:
% - FlatTop:
% - *Start*: $3\%$
% - *Stop*: $2.96\%$
% - Decreasing point:
% - *X*: $60.4\%$
% - *Y*: $14.7\%$
%% Exponential window used for acceleration signal
x0 = 0.296;
xd = 0.604;
yd = 0.147;
alpha = log(yd)/(x0 - xd);
t = x0:0.01:1.01;
y = exp(-alpha*(t-x0));
figure;
plot(100*[0, 0.03, 0.03, x0, t], [0, 0, 1, 1, y]);
xlabel('Time [\%]'); ylabel('Amplitude');
xlim([0, 100]); ylim([0, 1]);
% Force and Response signals
% <<ssec:modal_measured_signals>>
% The force sensor of the instrumented hammer and the accelerometers signals are shown in the time domain in Figure ref:fig:modal_raw_meas.
% Sharp "impacts" can be seen for the force sensor, indicating wide frequency band excitation.
% For the accelerometer, a much more complex signal can be observed, indicating complex dynamics.
% The "normalized" acrfull:asd of the two signals are computed and shown in Figure ref:fig:modal_asd_acc_force.
% Conclusions based on the time domain signals can be clearly seen in the frequency domain (wide frequency content for the force signal and complex dynamics for the accelerometer).
% Similar results are obtained for all the measured frequency response functions.
%% Load raw data
meas1_raw = load('mat/meas_raw_1.mat');
@ -126,46 +114,17 @@ impacts = [5.937, 11.228, 16.681, 22.205, 27.350, 32.714, 38.115, 43.888, 50.407
% Time vector [s]
time = linspace(0, meas1_raw.Track1_X_Resolution*length(meas1_raw.Track1), length(meas1_raw.Track1));
% The force sensor and the accelerometers signals are shown in the time domain in Figure ref:fig:modal_raw_meas.
% Sharp "impacts" can be seen for the force sensor, indicating wide frequency band excitation.
% For the accelerometer, many resonances can be seen on the right, indicating complex dynamics
%% Raw measurement of the Accelerometer
figure;
tiledlayout(1, 3, 'TileSpacing', 'Compact', 'Padding', 'None');
ax1 = nexttile([1,2]);
hold on;
plot(time, meas1_raw.Track2, 'DisplayName', 'Acceleration [$m/s^2$]');
plot(time, 1e-3*meas1_raw.Track1, 'DisplayName', 'Force [kN]');
plot(time-22.2, meas1_raw.Track2, 'DisplayName', '$X_{j}$ [$m/s^2$]');
plot(time-22.2, 1e-3*meas1_raw.Track1, 'DisplayName', '$F_{k}$ [kN]');
hold off;
xlabel('Time [s]');
ylabel('Amplitude');
xlim([0, time(end)]);
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
ax2 = nexttile();
hold on;
plot(time, meas1_raw.Track2);
plot(time, 1e-3*meas1_raw.Track1);
hold off;
xlabel('Time [s]');
set(gca, 'YTickLabel',[]);
xlim([22.19, 22.4]);
linkaxes([ax1,ax2],'y');
xlim([0, 0.2]);
ylim([-2, 2]);
% #+name: fig:modal_raw_meas
% #+caption: Raw measurement of the acceleromter (blue) and of the force sensor at the Hammer tip (red). Zoom on one impact is shown on the right.
% #+RESULTS:
% [[file:figs/modal_raw_meas.png]]
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
%% Frequency Analysis
Nfft = floor(5.0*Fs); % Number of frequency points
@ -176,17 +135,11 @@ Noverlap = floor(Nfft/2); % Overlap for frequency analysis
[pxx_force, f] = pwelch(meas1_raw.Track1, win, Noverlap, Nfft, Fs);
[pxx_acc, ~] = pwelch(meas1_raw.Track2, win, Noverlap, Nfft, Fs);
% The "normalized" amplitude spectral density of the two signals are computed and shown in Figure ref:fig:modal_asd_acc_force.
% Conclusions based on the time domain signals can be clearly seen in the frequency domain (wide frequency content for the force signal and complex dynamics for the accelerometer).
%% Normalized Amplitude Spectral Density of the measured force and acceleration
figure;
hold on;
plot(f, sqrt(pxx_force./max(pxx_force(f<200))), 'DisplayName', 'Force');
plot(f, sqrt(pxx_acc./max(pxx_acc(f<200))), 'DisplayName', 'Acceleration');
plot(f, sqrt(pxx_acc./max(pxx_acc(f<200))), 'DisplayName', '$X_{j}$');
plot(f, sqrt(pxx_force./max(pxx_force(f<200))), 'DisplayName', '$F_{k}$');
hold off;
set(gca, 'XScale', 'lin'); set(gca, 'YScale', 'lin');
xlabel('Frequency [Hz]'); ylabel('Normalized Spectral Density');
@ -197,12 +150,27 @@ legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
% #+name: fig:modal_asd_acc_force
% #+caption: Normalized Amplitude Spectral Density of the measured force and acceleration
% #+RESULTS:
% #+name: fig:modal_raw_meas_asd
% #+caption: Raw measurement of the acceleromter (blue) and of the force sensor at the Hammer tip (red) (\subref{fig:modal_raw_meas}). Computed Amplitude Spectral Density of the two signals (normalized) (\subref{fig:modal_asd_acc_force})
% #+attr_latex: :options [htbp]
% #+begin_figure
% #+attr_latex: :caption \subcaption{\label{fig:modal_raw_meas}Time domain signals}
% #+attr_latex: :options {0.49\textwidth}
% #+begin_subfigure
% #+attr_latex: :width 0.95\linewidth
% [[file:figs/modal_raw_meas.png]]
% #+end_subfigure
% #+attr_latex: :caption \subcaption{\label{fig:modal_asd_acc_force}Amplitude Spectral Density (normalized)}
% #+attr_latex: :options {0.49\textwidth}
% #+begin_subfigure
% #+attr_latex: :width 0.95\linewidth
% [[file:figs/modal_asd_acc_force.png]]
% #+end_subfigure
% #+end_figure
% The frequency response function from the applied force to the measured acceleration can then be computed (Figure ref:fig:modal_frf_acc_force).
% The frequency response function $H_{jk}$ from the applied force $F_{k}$ to the measured acceleration $X_j$ is then computed and shown Figure ref:fig:modal_frf_acc_force.
% The quality of the obtained data can be estimated using the /coherence/ function, which is shown in Figure ref:fig:modal_coh_acc_force.
% Good coherence is obtained from $20\,\text{Hz}$ to $200\,\text{Hz}$ which corresponds to the frequency range of interest.
%% Compute the transfer function and Coherence
@ -217,16 +185,6 @@ set(gca, 'XScale', 'lin'); set(gca, 'YScale', 'log');
xlim([0, 200]);
xticks([0:20:200]);
% #+name: fig:modal_frf_acc_force
% #+caption: Frequency Response Function between the measured force and acceleration
% #+RESULTS:
% [[file:figs/modal_frf_acc_force.png]]
% The coherence between the input and output signals is also computed and found to be good between 20 and 200Hz (Figure ref:fig:modal_coh_acc_force).
%% Frequency Response Function between the force and the acceleration
figure;
plot(f, coh1);

View File

@ -10,33 +10,84 @@ addpath('./mat/'); % Path for data
%% Colors for the figures
colors = colororder;
% Frequency Response Matrix
% <<ssec:modal_frf_matrix>>
% All the Frequency Response Functions measured are combined into one big array called the Frequency Response Matrix.
% The frequency response matrix is an $n \times p \times q$ matrix with:
% - $n$ the number of measurements: $23 \times 3$ (23 accelerometers measuring 3 directions each)
% - $p$ the number of excitation inputs: $3$
% - $q$ the number of frequency points $\omega_i$
% Thus, the FRF matrix is an $69 \times 3 \times 801$ matrix.
% #+name: fig:modal_local_to_global_coordinates
% #+caption: Schematic of the measured motions of a solid body
% #+RESULTS:
% [[file:figs/modal_local_to_global_coordinates.png]]
% For each frequency point $\omega_i$, a 2D matrix is obtained:
% \begin{equation}
% \text{FRF}(\omega_i) = \begin{bmatrix}
% \frac{D_{1_x}}{F_x}(\omega_i) & \frac{D_{1_x}}{F_y}(\omega_i) & \frac{D_{1_x}}{F_z}(\omega_i) \\
% \frac{D_{1_y}}{F_x}(\omega_i) & \frac{D_{1_y}}{F_y}(\omega_i) & \frac{D_{1_y}}{F_z}(\omega_i) \\
% \frac{D_{1_z}}{F_x}(\omega_i) & \frac{D_{1_z}}{F_y}(\omega_i) & \frac{D_{1_z}}{F_z}(\omega_i) \\
% \frac{D_{2_x}}{F_x}(\omega_i) & \frac{D_{2_x}}{F_y}(\omega_i) & \frac{D_{2_x}}{F_z}(\omega_i) \\
% \vdots & \vdots & \vdots \\
% \frac{D_{23_z}}{F_x}(\omega_i) & \frac{D_{23_z}}{F_y}(\omega_i) & \frac{D_{23_z}}{F_z}(\omega_i) \\
% The motion of the rigid body of figure ref:fig:modal_local_to_global_coordinates can be described by its displacement $\vec{\delta}p = [\delta p_x,\ \delta p_y,\ \delta p_z]$ and (small) rotations $[\delta \Omega_x,\ \delta \Omega_y,\ \delta \Omega_z]$ with respect to a reference frame $\{O\}$.
% The motion $\vec{\delta} p_{i}$ of a point $p_i$ can be computed from $\vec{\delta} p$ and $\bm{\delta \Omega}$ using equation eqref:eq:modal_compute_point_response, with $\bm{\delta\Omega}$ defined in equation eqref:eq:modal_rotation_matrix.
% \begin{equation}\label{eq:modal_compute_point_response}
% \vec{\delta} p_{i} &= \vec{\delta} p + \bm{\delta \Omega} \cdot \vec{p}_{i} \\
% \end{equation}
% \begin{equation}\label{eq:modal_rotation_matrix}
% \bm{\delta\Omega} = \begin{bmatrix}
% 0 & -\delta\Omega_z & \delta\Omega_y \\
% \delta\Omega_z & 0 & -\delta\Omega_x \\
% -\delta\Omega_y & \delta\Omega_x & 0
% \end{bmatrix}
% \end{equation}
% Writing this in a matrix form for the four points gives eqref:eq:modal_cart_to_acc.
% \begin{equation}\label{eq:modal_cart_to_acc}
% \left[\begin{array}{c}
% \delta p_{1x} \\ \delta p_{1y} \\ \delta p_{1z} \\\hline \vdots \\\hline \delta p_{4x} \\ \delta p_{4y} \\ \delta p_{4z}
% \end{array}\right] =
% \left[\begin{array}{ccc|ccc}
% 1 & 0 & 0 & 0 & p_{1z} & -p_{1y} \\
% 0 & 1 & 0 & -p_{1z} & 0 & p_{1x} \\
% 0 & 0 & 1 & p_{1y} & -p_{1x} & 0 \\ \hline
% & \vdots & & & \vdots & \\ \hline
% 1 & 0 & 0 & 0 & p_{4z} & -p_{4y} \\
% 0 & 1 & 0 & -p_{4z} & 0 & p_{4x} \\
% 0 & 0 & 1 & p_{4y} & -p_{4x} & 0
% \end{array}\right] \left[\begin{array}{c}
% \delta p_x \\ \delta p_y \\ \delta p_z \\ \hline \delta\Omega_x \\ \delta\Omega_y \\ \delta\Omega_z
% \end{array}\right]
% \end{equation}
% Provided that the four sensors are properly located, the system of equation eqref:eq:modal_cart_to_acc can be solved by matrix inversion[fn:5].
% The motion of the solid body expressed in a chosen frame $\{O\}$ can be determined using equation eqref:eq:modal_determine_global_disp.
% Note that this matrix inversion is equivalent to resolving a mean square problem.
% Therefore, having more accelerometers permits to have a better approximation of the motion of the solid body.
% \begin{equation}
% \left[\begin{array}{c}
% \delta p_x \\ \delta p_y \\ \delta p_z \\ \hline \delta\Omega_x \\ \delta\Omega_y \\ \delta\Omega_z
% \end{array}\right] =
% \left[\begin{array}{ccc|ccc}
% 1 & 0 & 0 & 0 & p_{1z} & -p_{1y} \\
% 0 & 1 & 0 & -p_{1z} & 0 & p_{1x} \\
% 0 & 0 & 1 & p_{1y} & -p_{1x} & 0 \\ \hline
% & \vdots & & & \vdots & \\ \hline
% 1 & 0 & 0 & 0 & p_{4z} & -p_{4y} \\
% 0 & 1 & 0 & -p_{4z} & 0 & p_{4x} \\
% 0 & 0 & 1 & p_{4y} & -p_{4x} & 0
% \end{array}\right]^{-1} \left[\begin{array}{c}
% \delta p_{1x} \\ \delta p_{1y} \\ \delta p_{1z} \\\hline \vdots \\\hline \delta p_{4x} \\ \delta p_{4y} \\ \delta p_{4z}
% \end{array}\right] \label{eq:modal_determine_global_disp}
% \end{equation}
% From the CAD model, the position of the center of mass of each considered solid body is computed (see Table ref:tab:modal_com_solid_bodies).
% Then, the position of each accelerometer with respect to the center of mass of the corresponding solid body can easily be derived.
%% Load frequency response matrix
load('frf_matrix.mat', 'freqs', 'frf');
%% Load Accelerometer positions
acc_pos = readtable('mat/acc_pos.txt', 'ReadVariableNames', false);
acc_pos = table2array(acc_pos(:, 1:4));
[~, i] = sort(acc_pos(:, 1));
acc_pos = acc_pos(i, 2:4);
%% Accelerometers ID connected to each solid body
solids = {};
solids.gbot = [17, 18, 19, 20]; % bottom granite
@ -52,189 +103,29 @@ solid_names = fields(solids);
%% Save the acceleromter positions are well as the solid bodies
save('mat/geometry.mat', 'solids', 'solid_names', 'acc_pos');
% #+name: fig:aligned_accelerometers
% #+caption: Aligned measurement of the motion of a solid body
% #+RESULTS:
% [[file:figs/aligned_accelerometers.png]]
% The motion of the rigid body of figure ref:fig:aligned_accelerometers is defined by its displacement $\delta p$ and rotation $\vec{\Omega}$ with respect to the reference frame $\{O\}$.
% The motions at points $1$ and $2$ are:
% \begin{align*}
% \delta p_1 &= \delta p + \Omega \times p_1 \\
% \delta p_2 &= \delta p + \Omega \times p_2
% \end{align*}
% Taking only the $x$ direction:
% \begin{align*}
% \delta p_{x1} &= \delta p_x + \Omega_y p_{z1} - \Omega_z p_{y1} \\
% \delta p_{x2} &= \delta p_x + \Omega_y p_{z2} - \Omega_z p_{y2}
% \end{align*}
% However, we have $p_{1y} = p_{2y}$ and $p_{1z} = p_{2z}$ because of the co-linearity of the two sensors in the $x$ direction, and thus we obtain
% \begin{equation}
% \delta p_{x1} = \delta p_{x2}
% \end{equation}
% #+begin_important
% Two sensors that are measuring the motion of a rigid body in the direction of the line linking the two sensors should measure the same quantity.
% #+end_important
% We can verify that the rigid body assumption is correct by comparing the measurement of the sensors.
% From the table ref:tab:position_accelerometers, we can guess which sensors will give the same results in the X and Y directions.
% Comparison of such measurements in the X direction is shown on figure ref:fig:modal_solid_body_comp_x_dir.
% Similar result is obtained for the Y direction.
meas_dir = 1; % X
exc_dir = 1; % X
% Pair of accelerometers aligned in the X direction
acc_i = [1 , 4 ;
2 , 3 ;
5 , 8 ;
6 , 7 ;
9 , 12;
10, 11;
14, 15;
18, 19;
21, 23];
%% Comparaison of measured frequency response function for in the X directions for accelerometers aligned along X
figure;
tiledlayout(3, 3, 'TileSpacing', 'Compact', 'Padding', 'None');
for i = 1:size(acc_i, 1)
nexttile();
hold on;
plot(freqs, abs(squeeze(frf(meas_dir+3*(acc_i(i, 1)-1), exc_dir, :))), ...
'DisplayName', sprintf('%i', acc_i(i, 1)))
plot(freqs, abs(squeeze(frf(meas_dir+3*(acc_i(i, 2)-1), exc_dir, :))), ...
'DisplayName', sprintf('%i', acc_i(i, 2)))
hold off;
set(gca, 'XScale', 'lin'); set(gca, 'YScale', 'log');
if i > 6
xlabel('Frequency [Hz]');
legend('location', 'northeast', 'FontSize', 8, 'NumColumns', 1);
else
set(gca, 'XTickLabel',[]);
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
end
if rem(i, 3) == 1
ylabel('Amplitude');
else
set(gca, 'YTickLabel',[]);
end
xlim([0, 200]); ylim([1e-5, 2e-2]);
end
% TODO Verification of the principle of reciprocity :noexport:
% <<ssec:modal_reciprocity_principle>>
% Because we expect our system to follow the principle of reciprocity.
% That is to say the response $X_j$ at some degree of freedom $j$ due to a force $F_k$ applied on DOF $k$ should be the same as the response $X_k$ due to a force $F_j$:
% \[ H_{jk} = \frac{X_j}{F_k} = \frac{X_k}{F_j} = H_{kj} \]
% This comes from the fact that we expect to have symmetric mass, stiffness and damping matrices.
% In order to access the quality of the data and the validity of the measured FRF, we then check that the reciprocity between $H_{jk}$ and $H_{kj}$ is of an acceptable level.
% We can verify this reciprocity using 3 different pairs of response/force.
dir_names = {'X', 'Y', 'Z'};
figure;
for i = 1:3
subplot(3, 1, i)
a = mod(i, 3)+1;
b = mod(i-2, 3)+1;
hold on;
plot(freqs, abs(squeeze(frf(3*(11-1)+a, b, :))), 'DisplayName', sprintf('$\\frac{F_%s}{D_%s}$', dir_names{a}, dir_names{b}));
plot(freqs, abs(squeeze(frf(3*(11-1)+b, a, :))), 'DisplayName', sprintf('$\\frac{F_%s}{D_%s}$', dir_names{b}, dir_names{a}));
hold off;
set(gca, 'XScale', 'lin'); set(gca, 'YScale', 'log');
if i == 3
xlabel('Frequency [Hz]');
else
set(gca, 'XTickLabel',[]);
end
if i == 2
ylabel('Amplitude [$\frac{m/s^2}{N}$]');
end
xlim([0, 200]);
legend('location', 'northwest');
end
% From accelerometer DOFs to solid body DOFs - Matlab Implementation
% First, we initialize a new FRF matrix =FRFs_O= which is an $n \times p \times q$ with:
% - $n$ is the number of DOFs of the considered 6 solid-bodies: $6 \times 6 = 36$
% - $p$ is the number of excitation inputs: $3$
% - $q$ is the number of frequency points $\omega_i$
% #+begin_important
% For each frequency point $\omega_i$, the FRF matrix =FRFs_O= is a $n\times p$ matrix:
% \begin{equation}
% \text{FRF}_\text{O}(\omega_i) = \begin{bmatrix}
% \frac{D_{1,T_x}}{F_x}(\omega_i) & \frac{D_{1,T_x}}{F_y}(\omega_i) & \frac{D_{1,T_x}}{F_z}(\omega_i) \\
% \frac{D_{1,T_y}}{F_x}(\omega_i) & \frac{D_{1,T_y}}{F_y}(\omega_i) & \frac{D_{1,T_y}}{F_z}(\omega_i) \\
% \frac{D_{1,T_z}}{F_x}(\omega_i) & \frac{D_{1,T_z}}{F_y}(\omega_i) & \frac{D_{1,T_z}}{F_z}(\omega_i) \\
% \frac{D_{1,R_x}}{F_x}(\omega_i) & \frac{D_{1,R_x}}{F_y}(\omega_i) & \frac{D_{1,R_x}}{F_z}(\omega_i) \\
% \frac{D_{1,R_y}}{F_x}(\omega_i) & \frac{D_{1,R_y}}{F_y}(\omega_i) & \frac{D_{1,R_y}}{F_z}(\omega_i) \\
% \frac{D_{1,R_z}}{F_x}(\omega_i) & \frac{D_{1,R_z}}{F_y}(\omega_i) & \frac{D_{1,R_z}}{F_z}(\omega_i) \\
% \frac{D_{2,T_x}}{F_x}(\omega_i) & \frac{D_{2,T_x}}{F_y}(\omega_i) & \frac{D_{2,T_x}}{F_z}(\omega_i) \\
% \vdots & \vdots & \vdots \\
% \frac{D_{6,R_z}}{F_x}(\omega_i) & \frac{D_{6,R_z}}{F_y}(\omega_i) & \frac{D_{6,R_z}}{F_z}(\omega_i)
% \end{bmatrix}
% \end{equation}
% where $D_i$ corresponds to the solid body number i.
% #+end_important
% Then, as we know the positions of the accelerometers on each solid body, and we have the response of those accelerometers, we can use the equations derived in the previous section to determine the response of each solid body expressed in the frame $\{O\}$.
FRFs_O = zeros(length(solid_names)*6, 3, 801);
for solid_i = 1:length(solid_names)
solids_i = solids.(solid_names{solid_i});
A = zeros(3*length(solids_i), 6);
for i = 1:length(solids_i)
acc_i = solids_i(i);
A(3*(i-1)+1:3*i, 1:3) = eye(3);
A(3*(i-1)+1:3*i, 4:6) = [ 0 acc_pos(acc_i, 3) -acc_pos(acc_i, 2) ;
-acc_pos(acc_i, 3) 0 acc_pos(acc_i, 1) ;
acc_pos(acc_i, 2) -acc_pos(acc_i, 1) 0];
end
for exc_dir = 1:3
FRFs_O((solid_i-1)*6+1:solid_i*6, exc_dir, :) = A\squeeze(FRFs((solids_i(1)-1)*3+1:solids_i(end)*3, exc_dir, :));
end
end
% Center of Mass of each solid body
% From solidworks, we can export the position of the center of mass of each solid body considered.
% These are summarized in Table ref:tab:modal_com_solid_bodies
%% Extract the CoM of considered solid bodies
model_com = reshape(table2array(readtable('mat/model_solidworks_com.txt', 'ReadVariableNames', false)), [3, 6]);
% From accelerometer DOFs to solid body DOFs - Expressed at the CoM
% First, we initialize a new FRF matrix which is an $n \times p \times q$ with:
% - $n$ is the number of DOFs of the considered 6 solid-bodies: $6 \times 6 = 36$
% - $p$ is the number of excitation inputs: $3$
% - $q$ is the number of frequency points $\omega_i$
% #+begin_important
% For each frequency point $\omega_i$, the FRF matrix is a $n\times p$ matrix:
% \begin{equation}
% \text{FRF}_\text{CoM}(\omega_i) = \begin{bmatrix}
% #+name: tab:modal_com_solid_bodies
% #+caption: Center of mass of considered solid bodies with respect to the "point of interest"
% #+attr_latex: :environment tabularx :width 0.6\linewidth :align lXXX
% #+attr_latex: :center t :booktabs t
% #+RESULTS:
% | | $X$ [mm] | $Y$ [mm] | $Z$ [mm] |
% |-------------------+----------+----------+----------|
% | Bottom Granite | 45 | 144 | -1251 |
% | Top granite | 52 | 258 | -778 |
% | Translation stage | 0 | 14 | -600 |
% | Tilt Stage | 0 | -5 | -628 |
% | Spindle | 0 | 0 | -580 |
% | Hexapod | -4 | 6 | -319 |
% Using eqref:eq:modal_determine_global_disp, the frequency response matrix $\mathbf{H}_\text{CoM}$ eqref:eq:modal_frf_matrix_com expressing the response at the center of mass of each solid body $D_i$ ($i$ from $1$ to $6$ for the $6$ considered solid bodies) can be computed from the initial acrshort:frf matrix $\mathbf{H}$.
% \begin{equation}\label{eq:modal_frf_matrix_com}
% \mathbf{H}_\text{CoM}(\omega_i) = \begin{bmatrix}
% \frac{D_{1,T_x}}{F_x}(\omega_i) & \frac{D_{1,T_x}}{F_y}(\omega_i) & \frac{D_{1,T_x}}{F_z}(\omega_i) \\
% \frac{D_{1,T_y}}{F_x}(\omega_i) & \frac{D_{1,T_y}}{F_y}(\omega_i) & \frac{D_{1,T_y}}{F_z}(\omega_i) \\
% \frac{D_{1,T_z}}{F_x}(\omega_i) & \frac{D_{1,T_z}}{F_y}(\omega_i) & \frac{D_{1,T_z}}{F_z}(\omega_i) \\
@ -246,14 +137,10 @@ model_com = reshape(table2array(readtable('mat/model_solidworks_com.txt', 'ReadV
% \frac{D_{6,R_z}}{F_x}(\omega_i) & \frac{D_{6,R_z}}{F_y}(\omega_i) & \frac{D_{6,R_z}}{F_z}(\omega_i)
% \end{bmatrix}
% \end{equation}
% where 1, 2, ..., 6 corresponds to the 6 solid bodies.
% #+end_important
% Then, as we know the positions of the accelerometers on each solid body, and we have the response of those accelerometers, we can use the equations derived in the previous section to determine the response of each solid body expressed in their center of mass.
%% Frequency Response Matrix - Response expressed at the CoM of the solid bodies
FRFs_CoM = zeros(length(solid_names)*6, 3, 801);
frfs_CoM = zeros(length(solid_names)*6, 3, 801);
for solid_i = 1:length(solid_names)
% Number of accelerometers fixed to this solid body
@ -273,43 +160,30 @@ for solid_i = 1:length(solid_names)
end
for exc_dir = 1:3
FRFs_CoM((solid_i-1)*6+1:solid_i*6, exc_dir, :) = A\squeeze(frf((solids_i(1)-1)*3+1:solids_i(end)*3, exc_dir, :));
frfs_CoM((solid_i-1)*6+1:solid_i*6, exc_dir, :) = A\squeeze(frf((solids_i(1)-1)*3+1:solids_i(end)*3, exc_dir, :));
end
end
%% Save the computed FRF at the CoM
save('mat/frf_com.mat', 'FRFs_CoM');
save('mat/frf_com.mat', 'frfs_CoM');
% Verify that we find the original FRF from the FRF in the global coordinates
% We have computed the Frequency Response Functions Matrix representing the response of the 6 solid bodies in their 6 DOFs with respect to their center of mass.
% Verification of solid body assumption
% <<ssec:modal_solid_body_assumption>>
% From the response of one body in its 6 DOFs, we should be able to compute the FRF of each of its accelerometer fixed to it during the measurement, supposing that this stage is a solid body.
% From the response of one solid body expressed by its 6 acrshortpl:dof (i.e. from $\mathbf{H}_{\text{CoM}}$), and using equation eqref:eq:modal_cart_to_acc, it is possible to compute the response of the same solid body at any considered position.
% In particular, the response at the location of the four accelerometers can be computed and compared with the original measurements $\mathbf{H}$.
% This is what is here done to check if solid body assumption is correct in the frequency band of interest.
% We can then compare the result with the original measurements.
% This will help us to determine if:
% - the previous inversion used is correct
% - the solid body assumption is correct in the frequency band of interest
% From the translation $\delta p$ and rotation $\delta \Omega$ of a solid body and the positions $p_i$ of the accelerometers attached to it, we can compute the response that would have been measured by the accelerometers using the following formula:
% \begin{align*}
% \delta p_1 &= \delta p + \delta\Omega p_1\\
% \delta p_2 &= \delta p + \delta\Omega p_2\\
% \delta p_3 &= \delta p + \delta\Omega p_3\\
% \delta p_4 &= \delta p + \delta\Omega p_4
% \end{align*}
% Thus, we can obtain the FRF matrix =FRFs_A= that gives the responses of the accelerometers to the forces applied by the hammer.
% It is implemented in matlab as follow:
FRFs_A = zeros(size(frf));
%% Compute the FRF at the accelerometer location from the CoM reponses
frfs_A = zeros(size(frf));
% For each excitation direction
for exc_dir = 1:3
% For each solid
for solid_i = 1:length(solid_names)
v0 = squeeze(FRFs_CoM((solid_i-1)*6+1:(solid_i-1)*6+3, exc_dir, :));
W0 = squeeze(FRFs_CoM((solid_i-1)*6+4:(solid_i-1)*6+6, exc_dir, :));
v0 = squeeze(frfs_CoM((solid_i-1)*6+1:(solid_i-1)*6+3, exc_dir, :));
W0 = squeeze(frfs_CoM((solid_i-1)*6+4:(solid_i-1)*6+6, exc_dir, :));
% For each accelerometer attached to the current solid
for acc_i = solids.(solid_names{solid_i})
@ -318,20 +192,17 @@ for exc_dir = 1:3
% pos = acc_pos(acc_i, :).';
posX = [0 pos(3) -pos(2); -pos(3) 0 pos(1) ; pos(2) -pos(1) 0];
FRFs_A(3*(acc_i-1)+1:3*(acc_i-1)+3, exc_dir, :) = v0 + posX*W0;
frfs_A(3*(acc_i-1)+1:3*(acc_i-1)+3, exc_dir, :) = v0 + posX*W0;
end
end
end
% We then compare the original FRF measured for each accelerometer =FRFs= with the "recovered" FRF =FRFs_A= from the global FRF matrix in the common frame.
% The FRF for the 4 accelerometers on the Hexapod are compared on figure ref:fig:recovered_frf_comparison_hexa.
% All the FRF are matching very well in all the frequency range displayed.
% The FRF for accelerometers located on the translation stage are compared on figure ref:fig:recovered_frf_comparison_ty.
% The FRF are matching well until 100Hz.
% The comparison is made for the 4 accelerometers fixed to the micro-hexapod (Figure ref:fig:modal_comp_acc_solid_body_frf).
% The original frequency response functions and the ones computed from the CoM responses are well matching in the frequency range of interested.
% Similar results are obtained for the other solid bodies, indicating that the solid body assumption is valid, and that a multi-body model can be used to represent the dynamics of the micro-station.
% This also validates the reduction of the number of degrees of freedom from 69 (23 accelerometers with each 3 acrshort:dof) to 36 (6 solid bodies with 6 acrshort:dof).
%% Comparaison of the original accelerometer response and reconstructed response from the solid body response
@ -344,7 +215,7 @@ exc_dir = 1; % Excited direction
accs_i = solids.(solid_names{solid_i}); % Accelerometers fixed to this solid body
figure;
tiledlayout(2, 2, 'TileSpacing', 'Compact', 'Padding', 'None');
tiledlayout(2, 2, 'TileSpacing', 'Tight', 'Padding', 'None');
for i = 1:length(accs_i)
acc_i = accs_i(i);
@ -356,7 +227,7 @@ for i = 1:length(accs_i)
end
set(gca,'ColorOrderIndex',1)
for dir_i = 1:3
plot(freqs, abs(squeeze(FRFs_A(3*(acc_i-1)+dir_i, exc_dir, :))), '--', 'HandleVisibility', 'off');
plot(freqs, abs(squeeze(frfs_A(3*(acc_i-1)+dir_i, exc_dir, :))), '--', 'HandleVisibility', 'off');
end
hold off;
@ -372,7 +243,8 @@ for i = 1:length(accs_i)
set(gca, 'YTickLabel',[]);
end
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
xlim([5, 200]); ylim([1e-6, 1e-1]);
legend('location', 'northwest', 'FontSize', 8, 'NumColumns', 1);
set(gca, 'XScale', 'lin'); set(gca, 'YScale', 'log');
xlim([0, 200]); ylim([1e-6, 3e-2]);
xticks([0:20:200]);
legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
end

View File

@ -10,32 +10,29 @@ addpath('./mat/'); % Path for data
%% Colors for the figures
colors = colororder;
% Singular Value Decomposition - Modal Indication Function
% The Mode Indicator Functions are usually used on $n\times p$ FRF matrix where $n$ is a relatively large number of measurement DOFs and $p$ is the number of excitation DOFs, typically 3 or 4.
% Number of modes determination
% <<ssec:modal_number_of_modes>>
% The acrshort:mif is here applied to the $n\times p$ acrshort:frf matrix where $n$ is a relatively large number of measurement DOFs (here $n=69$) and $p$ is the number of excitation DOFs (here $p=3$).
% In these methods, the frequency dependent FRF matrix is subjected to a singular value decomposition analysis which thus yields a small number (3 or 4) of singular values, these also being frequency dependent.
% The complex modal indication function is defined in equation eqref:eq:modal_cmif where the diagonal matrix $\Sigma$ is obtained from a acrlong:svd of the acrshort:frf matrix as shown in equation eqref:eq:modal_svd.
% \begin{equation} \label{eq:modal_cmif}
% [CMIF(\omega)]_{p\times p} = [\Sigma(\omega)]_{p\times n}^T [\Sigma(\omega)]_{n\times p}
% \end{equation}
% These methods are used to *determine the number of modes* present in a given frequency range, to *identify repeated natural frequencies* and to pre-process the FRF data prior to modal analysis.
% \begin{equation} \label{eq:modal_svd}
% [H(\omega)]_{n\times p} = [U(\omega)]_{n\times n} [\Sigma(\omega)]_{n\times p} [V(\omega)]_{p\times p}^H
% \end{equation}
% From the documentation of the modal software:
% #+begin_quote
% The MIF consist of the singular values of the Frequency response function matrix. The number of MIFs equals the number of excitations.
% By the powerful singular value decomposition, the real signal space is separated from the noise space. Therefore, the MIFs exhibit the modes effectively.
% A peak in the MIFs plot usually indicate the existence of a structural mode, and two peaks at the same frequency point means the existence of two repeated modes.
% Moreover, the magnitude of the MIFs implies the strength of the a mode.
% #+end_quote
% The acrshort:mif therefore yields to $p$ values that are also frequency dependent.
% A peak in the acrshort:mif plot indicates the presence of a mode.
% Repeated modes can also be detected by multiple singular values are having peaks at the same frequency.
% The obtained acrshort:mif is shown on Figure ref:fig:modal_indication_function.
% A total of 16 modes are found between 0 and $200\,\text{Hz}$.
% The obtained natural frequencies and associated modal damping are summarized in Table ref:tab:modal_obtained_modes_freqs_damps.
% #+begin_important
% The *Complex Mode Indicator Function* is defined simply by the SVD of the FRF (sub) matrix:
% \begin{align*}
% [H(\omega)]_{n\times p} &= [U(\omega)]_{n\times n} [\Sigma(\omega)]_{n\times p} [V(\omega)]_{p\times p}^H\\
% [CMIF(\omega)]_{p\times p} &= [\Sigma(\omega)]_{p\times n}^T [\Sigma(\omega)]_{n\times p}
% \end{align*}
% #+end_important
% We compute the Complex Mode Indicator Function.
% The result is shown on Figure ref:fig:modal_indication_function.
%% Load frequency response matrix
load('frf_matrix.mat', 'freqs', 'frf');
%% Computation of the modal indication function
MIF = zeros(size(frf, 2), size(frf, 2), size(frf, 3));
@ -58,35 +55,31 @@ xticks([0:20:200]);
xlim([0, 200]);
ylim([1e-6, 2e-2]);
% Composite Response Function
% An alternative is the Composite Response Function $HH(\omega)$ defined as the sum of all the measured FRF:
% \begin{equation}
% HH(\omega) = \sum_j\sum_kH_{jk}(\omega)
% Verification of the modal model validity
% <<ssec:modal_model_validity>>
% In order to check the validity of the modal model, the complete $n \times n$ acrshort:frf matrix $\mathbf{H}_{\text{syn}}$ is first synthesized from the modal parameters.
% Then, the elements of this acrshort:frf matrix $\mathbf{H}_{\text{syn}}$ that were already measured can be compared with the measured acrshort:frf matrix $\mathbf{H}$.
% In order to synthesize the full acrshort:frf matrix, the eigenvectors $\phi_r$ are first organized in a matrix from as shown in equation eqref:eq:modal_eigvector_matrix.
% \begin{equation}\label{eq:modal_eigvector_matrix}
% \Phi = \begin{bmatrix}
% & & & & &\\
% \phi_1 & \dots & \phi_N & \phi_1^* & \dots & \phi_N^* \\
% & & & & &
% \end{bmatrix}_{n \times 2m}
% \end{equation}
% Instead, we choose here to use the sum of the norms of the measured frf:
% \begin{equation}
% HH(\omega) = \sum_j\sum_k \left|H_{jk}(\omega) \right|
% The full acrshort:frf matrix $\mathbf{H}_{\text{syn}}$ can be synthesize using eqref:eq:modal_synthesized_frf.
% \begin{equation}\label{eq:modal_synthesized_frf}
% [\mathbf{H}_{\text{syn}}(\omega)]_{n\times n} = [\Phi]_{n\times2m} [\mathbf{H}_{\text{mod}}(\omega)]_{2m\times2m} [\Phi]_{2m\times n}^T
% \end{equation}
% The result is shown on figure ref:fig:modal_composite_reponse_function.
%% Composite Response Function
figure;
hold on;
plot(freqs, squeeze(sum(sum(abs(frf)))), '-k');
hold off;
xlabel('Frequency [Hz]'); ylabel('Amplitude');
xlim([0, 200]);
xticks([0:20:200]);
% Importation of the modal parameters on Matlab
% The obtained modal parameters are:
% - Resonance frequencies in Hertz
% - Modal damping ratio in percentage
% - (complex) Modes shapes for each measured DoF
% - Modal A and modal B which are parameters important for further normalization
% With $\mathbf{H}_{\text{mod}}(\omega)$ a diagonal matrix representing the response of the different modes eqref:eq:modal_modal_resp.
% \begin{equation}\label{eq:modal_modal_resp}
% \mathbf{H}_{\text{mod}}(\omega) = \text{diag}\left(\frac{1}{a_1 (j\omega - s_1)},\ \dots,\ \frac{1}{a_m (j\omega - s_m)}, \frac{1}{a_1^* (j\omega - s_1^*)},\ \dots,\ \frac{1}{a_m^* (j\omega - s_m^*)} \right)_{2m\times 2m}
% \end{equation}
%% Load modal parameters
@ -123,149 +116,91 @@ for mod_i = 1:mod_n
end
end
% Modal Matrices
% We would like to arrange the obtained modal parameters into two modal matrices:
% \[ \Lambda = \begin{bmatrix}
% s_1 & & 0 \\
% & \ddots & \\
% 0 & & s_N
% \end{bmatrix}_{N \times N}; \quad \Psi = \begin{bmatrix}
% & & \\
% \{\psi_1\} & \dots & \{\psi_N\} \\
% & &
% \end{bmatrix}_{M \times N} \]
% \[ \{\psi_i\} = \begin{Bmatrix} \psi_{i, 1_x} & \psi_{i, 1_y} & \psi_{i, 1_z} & \psi_{i, 2_x} & \dots & \psi_{i, 23_z} \end{Bmatrix}^T \]
% $M$ is the number of DoF: here it is $23 \times 3 = 69$.
% $N$ is the number of mode
eigen_val_M = diag(2*pi*freqs_m.*(-damps_m/100 + j*sqrt(1 - (damps_m/100).^2)));
eigen_vec_M = reshape(mode_shapes, [mod_n, acc_n*dir_n]).';
% Each eigen vector is normalized: $\| \{\psi_i\} \|_2 = 1$
% However, the eigen values and eigen vectors appears as complex conjugates:
% \[ s_r, s_r^*, \{\psi\}_r, \{\psi\}_r^*, \quad r = 1, N \]
% In the end, they are $2N$ eigen values.
% We then build two extended eigen matrices as follow:
% \[ \mathcal{S} = \begin{bmatrix}
% s_1 & & & & & \\
% & \ddots & & & 0 & \\
% & & s_N & & & \\
% & & & s_1^* & & \\
% & 0 & & & \ddots & \\
% & & & & & s_N^*
% \end{bmatrix}_{2N \times 2N}; \quad \Phi = \begin{bmatrix}
% & & & & &\\
% \{\psi_1\} & \dots & \{\psi_N\} & \{\psi_1^*\} & \dots & \{\psi_N^*\} \\
% & & & & &
% \end{bmatrix}_{M \times 2N} \]
%% Create the eigenvalue and eigenvector matrices
eigen_val_M = diag(2*pi*freqs_m.*(-damps_m/100 + j*sqrt(1 - (damps_m/100).^2))); % Lambda = diagonal matrix
eigen_vec_M = reshape(mode_shapes, [mod_n, acc_n*dir_n]).'; % Phi, vecnorm(eigen_vec_M) = 1
% Add complex conjugate eigenvalues and eigenvectors
eigen_val_ext_M = blkdiag(eigen_val_M, conj(eigen_val_M));
eigen_vec_ext_M = [eigen_vec_M, conj(eigen_vec_M)];
% We also build the Modal A and Modal B matrices:
% \begin{equation}
% A = \begin{bmatrix}
% a_1 & & 0 \\
% & \ddots & \\
% 0 & & a_N
% \end{bmatrix}_{N \times N}; \quad B = \begin{bmatrix}
% b_1 & & 0 \\
% & \ddots & \\
% 0 & & b_N
% \end{bmatrix}_{N \times N}
% \end{equation}
% With $a_i$ is the "Modal A" parameter linked to mode i.
%% "Modal A" and "Modal B" matrices
modal_a_M = diag(complex(modal_a(:, 1), modal_a(:, 2)));
modal_b_M = diag(complex(modal_b(:, 1), modal_b(:, 2)));
modal_a_ext_M = blkdiag(modal_a_M, conj(modal_a_M));
modal_b_ext_M = blkdiag(modal_b_M, conj(modal_b_M));
% Matlab Implementation
%% Synthesize the full FRF matrix from the modal model
Hsyn = zeros(acc_n*dir_n, acc_n*dir_n, length(freqs));
for i = 1:length(freqs)
Hsyn(:, :, i) = eigen_vec_ext_M*((j*2*pi*freqs(i)).^2*inv(modal_a_ext_M)/(diag(j*2*pi*freqs(i) - diag(eigen_val_ext_M))))*eigen_vec_ext_M.';
Hsyn(:, :, i) = eigen_vec_ext_M*diag(1./(diag(modal_a_ext_M).*(j*2*pi*freqs(i) - diag(eigen_val_ext_M))))*eigen_vec_ext_M.';
end
% Because the synthesize frequency response functions are representing the displacement response in $[m/N]$, we multiply each element of the FRF matrix by $(j \omega)^2$ in order to obtain the acceleration response in $[m/s^2/N]$.
%% Derivate two times to to have the acceleration response
for i = 1:size(Hsyn, 1)
Hsyn(i, :, :) = squeeze(Hsyn(i, :, :)).*(j*2*pi*freqs).^2;
end
% Original and Synthesize FRF matrix comparison
acc_o = 1; dir_o = 1; dir_i = 1;
% The comparison between the original measured frequency response functions and the synthesized ones from the modal model is done in Figure ref:fig:modal_comp_acc_frf_modal.
% Whether the obtained match can be considered good or bad is quite arbitrary.
% Yet, the modal model seems to be able to represent the coupling between different nodes and different direction which is quite important in a control point of view.
% This can be seen in Figure ref:fig:modal_comp_acc_frf_modal_3 that shows the frequency response function between a force applied on node 11 (i.e. on the translation stage) in the $y$ direction to the measured acceleration at node $2$ (i.e. at the top of the micro-hexapod) in the $x$ direction.
acc_o = 11; dir_o = 3;
acc_i = 11; dir_i = 3;
figure;
ax1 = subplot(2, 1, 1);
hold on;
plot(freqs, abs(squeeze(frf(3*(acc_o-1)+dir_o, dir_i, :))), 'DisplayName', 'Original');
plot(freqs, abs(squeeze(Hsyn(3*(acc_o-1)+dir_o, 3*(11-1)+dir_i, :))), 'DisplayName', 'Synthesize');
plot(freqs, abs(squeeze(frf( 3*(acc_o-1)+dir_o, dir_i, :))), 'DisplayName', 'Measured');
plot(freqs, abs(squeeze(Hsyn(3*(acc_o-1)+dir_o, 3*(acc_i-1)+dir_i, :))), 'DisplayName', 'Synthesized');
hold off;
set(gca, 'xscale', 'lin');
set(gca, 'yscale', 'log');
set(gca, 'XTickLabel',[]);
xlabel('Frequency [Hz]');
ylabel('Magnitude [$\frac{m/s^2}{N}$]');
title(sprintf('From acc %i %s to acc %i %s', 11, dirs(dir_i), acc_o, dirs(dir_o)))
legend('location', 'northwest');
ax2 = subplot(2, 1, 2);
hold on;
plot(freqs, mod(180/pi*phase(squeeze(frf(3*(acc_o-1)+dir_o, dir_i, :)))+180, 360)-180);
plot(freqs, mod(180/pi*phase(squeeze(Hsyn(3*(acc_o-1)+dir_o, 3*(11-1)+dir_i, :)))+180, 360)-180);
hold off;
yticks(-360:90:360); ylim([-180, 180]);
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
linkaxes([ax1,ax2],'x');
ldg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
ldg.ItemTokenSize = [10, 1];
xticks([0:40:200]);
xlim([1, 200]);
ylim([1e-6, 1e-1]);
% Synthesize FRF that has not yet been measured
accs = [1]; dirs = [1:3];
acc_o = 15; dir_o = 3;
acc_i = 11; dir_i = 3;
figure;
ax1 = subplot(2, 1, 1);
hold on;
for acc_i = accs
for dir_i = dirs
plot(freqs, abs((1./(j*2*pi*freqs').^2).*squeeze(Hsyn(3*(acc_i-1)+dir_i, 3*(acc_i-1)+dir_i, :))), 'DisplayName', sprintf('Acc %i - %s', acc_i, dirs(dir_i)));
end
end
plot(freqs, abs(squeeze(frf( 3*(acc_o-1)+dir_o, dir_i, :))), 'DisplayName', 'Measured');
plot(freqs, abs(squeeze(Hsyn(3*(acc_o-1)+dir_o, 3*(acc_i-1)+dir_i, :))), 'DisplayName', 'Synthesized');
hold off;
set(gca, 'xscale', 'log'); set(gca, 'yscale', 'log');
set(gca, 'XTickLabel',[]);
ylabel('Magnitude [$\frac{m}{N}$]');
legend('location', 'southwest');
ax2 = subplot(2, 1, 2);
hold on;
for acc_i = accs
for dir_i = dirs
plot(freqs, mod(180/pi*phase((1./(j*2*pi*freqs').^2).*squeeze(Hsyn(3*(acc_i-1)+dir_i, 3*(acc_i-1)+dir_i, :)))+180, 360)-180);
end
end
hold off;
yticks(-360:90:360); ylim([-180, 180]);
set(gca, 'xscale', 'log');
xlabel('Frequency [Hz]'); ylabel('Phase [deg]');
linkaxes([ax1,ax2],'x');
set(gca, 'xscale', 'lin');
set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]');
ylabel('Magnitude [$\frac{m/s^2}{N}$]');
ldg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
ldg.ItemTokenSize = [10, 1];
xticks([0:40:200]);
xlim([1, 200]);
ylim([1e-6, 1e-1]);
acc_o = 2; dir_o = 1;
acc_i = 11; dir_i = 2;
figure;
hold on;
plot(freqs, abs(squeeze(frf( 3*(acc_o-1)+dir_o, dir_i, :))), 'DisplayName', 'Measured');
plot(freqs, abs(squeeze(Hsyn(3*(acc_o-1)+dir_o, 3*(acc_i-1)+dir_i, :))), 'DisplayName', 'Synthesized');
hold off;
set(gca, 'xscale', 'lin');
set(gca, 'yscale', 'log');
xlabel('Frequency [Hz]');
ylabel('Magnitude [$\frac{m/s^2}{N}$]');
ldg = legend('location', 'southeast', 'FontSize', 8, 'NumColumns', 1);
ldg.ItemTokenSize = [10, 1];
xticks([0:40:200]);
xlim([1, 200]);
ylim([1e-6, 1e-1]);

View File

@ -98,11 +98,14 @@
* Notes :noexport:
Prefix is =modal=
** DONE [#C] Section ref:ssec:modal_solid_body_first_check can probably be removed
CLOSED: [2024-10-24 Thu 10:08]
As the solid body assumption is already verified in section ref:ssec:modal_solid_body_assumption.
** TODO [#A] Make sure the synthesis of FRF from modal model is working as expected
** DONE [#A] Make sure the synthesis of FRF from modal model is working as expected
CLOSED: [2024-10-24 Thu 17:42]
** TODO [#B] Add all notation
| | |
@ -167,7 +170,7 @@ This modal model can then be used to tune the spatial model (i.e. the multi-body
#+end_src
#+name: fig:modal_vibration_analysis_procedure
#+caption: Figure caption
#+caption: Three models of the same structure. The goal could be to tune a spatial model (i.e. mass, stiffness and damping properties) from a response model. As an intermediate step, the modal model can prove to be very useful.
#+RESULTS:
[[file:figs/modal_vibration_analysis_procedure.png]]
@ -179,7 +182,7 @@ These measurements are projected at the center of mass of each considered solid
The solid body assumption is then verified, validating the use of the multi-body model.
Finally, the modal analysis is performed in Section ref:sec:modal_analysis.
It shows how complex the micro-station dynamics is, and the necessity of the developed more complex multi-body model.
It shows how complex the micro-station dynamics is, and the necessity of having a model that represented complex dynamics.
# #+name: tab:modal_section_matlab_code
# #+caption: Report sections and corresponding Matlab files
@ -201,7 +204,7 @@ It shows how complex the micro-station dynamics is, and the necessity of the dev
In order to perform an experimental modal analysis, a proper measurement setup is key.
This include using appropriate instrumentation (presented in Section ref:ssec:modal_instrumentation) and properly preparing the structure to be measured (Section ref:ssec:modal_test_preparation).
Then, the location of the measured motion (Section ref:ssec:modal_accelerometers) and the location of the hammer impacts (Section ref:ssec:modal_hammer_impacts) have to be chosen carefully.
Obtained force and acceleration signals are shown in Section ref:ssec:modal_measured_signals, and the quality of the measured data is checked.
Obtained force and acceleration signals are shown in Section ref:ssec:modal_measured_signals, and the quality of the measured data is assessed.
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
@ -274,13 +277,13 @@ The top part representing the active stabilization stage has been disassembled a
To perform the modal-analysis from the measured responses, the $n \times n$ frequency response function matrix $\mathbf{H}$ needs to be measured, where $n$ is the considered number of degrees of freedom.
The $H_{jk}$ element of this acrfull:frf matrix corresponds to the frequency response function from a force $F_k$ applied at acrfull:dof $k$ to the displacement of the structure $X_j$ at acrshort:dof $j$.
Measuring this acrshort:frf matrix is very time consuming as it requires to make $n^2$ measurements.
Measuring this acrshort:frf matrix is very time consuming as it requires to make $n \times n$ measurements.
However thanks to the principle of reciprocity ($H_{jk} = H_{kj}$) and using the /point measurement/ ($H_{jj}$), it is possible to reconstruct the full matrix by measuring only one column or one line of the matrix $\mathbf{H}$ [[cite:&ewins00_modal chapt. 5.2]].
Therefore, a minimum set of $n$ frequency response functions needs to be measured.
This can be done either by measuring the response $X_{j}$ at a fixed acrshort:dof $j$ while applying forces $F_{i}$ for at all $n$ considered acrshort:dof, or by applying a force $F_{k}$ at a fixed acrshort:dof $k$ and measuring the response $X_{i}$ for all $n$ acrshort:dof.
It is however not advised to measure only one row or one column as one or more modes may be missed by an unfortunate choice of force or acceleration measured locations (for instance if the force is applied at a vibration node of a particular mode).
In this modal-analysis, it is chosen to measure the response of the structure at all considered acrshort:dof, and to excite the structure at one location in three directions in order to have some redundancy and to make sure that all modes are properly energized.
In this modal-analysis, it is chosen to measure the response of the structure at all considered acrshort:dof, and to excite the structure at one location in three directions in order to have some redundancy and to make sure that all modes are properly identified.
** Location of the Accelerometers
<<ssec:modal_accelerometers>>
@ -374,7 +377,6 @@ The chosen location of the hammer impact corresponds to the location of accelero
It was chosen to match the location of one accelerometer, because a /point measurement/ (i.e. a measurement of $H_{kk}$) is necessary to be able to reconstruct the full acrshort:frf matrix [[cite:ewins00_modal]].
The impacts are performed in three directions, which are shown in figures ref:fig:modal_impact_x, ref:fig:modal_impact_y and ref:fig:modal_impact_z.
This excitation point with the three considered directions allows to properly energize all the modes in the frequency band of interest and to provide good coherence for all the accelerometers as will be shown in the next section.
#+name: fig:modal_hammer_impacts
#+caption: The three hammer impacts used for the modal analysis
@ -409,6 +411,7 @@ For the accelerometer, a much more complex signal can be observed, indicating co
The "normalized" acrfull:asd of the two signals are computed and shown in Figure ref:fig:modal_asd_acc_force.
Conclusions based on the time domain signals can be clearly seen in the frequency domain (wide frequency content for the force signal and complex dynamics for the accelerometer).
Similar results are obtained for all the measured frequency response functions.
#+begin_src matlab
%% Load raw data
@ -553,7 +556,7 @@ exportFig('figs/modal_coh_acc_force.pdf', 'width', 'half', 'height', 'normal');
<<sec:modal_frf_processing>>
** Introduction :ignore:
All measurements where conducted and a $n \times p \times q$ acrlongpl:frf Matrix were computed with:
After all measurements are conducted, a $n \times p \times q$ acrlongpl:frf matrix can be computed with:
- $n = 69$: the number of output measured accelerations (23 3-axis accelerometers)
- $p = 3$: the number of input force excitations
- $q = 801$: the number of frequency points $\omega_{i}$
@ -571,14 +574,14 @@ For each frequency point $\omega_{i}$, a 2D complex matrix is obtained that link
\end{bmatrix}
\end{equation}
However, for the multi-body model being developed, only 6 solid bodies are considered, namely: the bottom granite, the top granite, the translation stage, the tilt stage, the spindle and the hexapod.
However, for the multi-body model being developed, only 6 solid bodies are considered, namely: the bottom granite, the top granite, the translation stage, the tilt stage, the spindle and the micro-hexapod.
Therefore, only $6 \times 6 = 36$ degrees of freedom are of interest.
The objective in this section is therefore to process the Frequency Response Matrix to reduce the number of measured acrshort:dof from 69 to 36.
The coordinate transformation from accelerometers acrshort:dof to the solid body 6 acrshortpl:dof (three translations and three rotations) is performed in Section ref:ssec:modal_acc_to_solid_dof.
The $69 \times 3 \times 801$ frequency response matrix is then reduced to a $36 \times 3 \times 801$ frequency response matrix where the motion of each solid body is expressed with respect to its center of mass.
To validate this reduction of acrshort:dof and the solid body assumption, the frequency response function at the accelerometer location are recomputed from the reduced frequency response matrix and are compared with the initial measurements in Section ref:ssec:modal_solid_body_assumption.
To validate this reduction of acrshort:dof and the solid body assumption, the frequency response function at the accelerometer location are "reconstructed" from the reduced frequency response matrix and are compared with the initial measurements in Section ref:ssec:modal_solid_body_assumption.
** Matlab Init :noexport:ignore:
#+begin_src matlab :tangle no :exports none :results silent :noweb yes :var current_dir=(file-name-directory buffer-file-name)
@ -619,7 +622,7 @@ The goal here is to link these $4 \times 3 = 12$ measurements to the 6 acrshort:
\begin{tikzpicture}
\draw[rounded corners=1mm, fill=blue!30!white] (0, 0) \irregularcircle{3cm}{1mm};
\node[] (origin) at (4, -1) {$\bullet$};
\node[] (origin) at (0, 0) {$\bullet$};
\begin{scope}[shift={(origin)}]
\def\axissize{0.8cm}
\draw[->] (0, 0) -- ++(\axissize, 0) node[above left]{$x$};
@ -634,10 +637,10 @@ The goal here is to link these $4 \times 3 = 12$ measurements to the 6 acrshort:
\coordinate[] (p3) at ( 1.5, 1.5);
\coordinate[] (p4) at ( 1.5, -1.5);
\draw[->] (p1)node[]{$\bullet$}node[above]{$\vec{p}_1$} -- ++( 1 , 0.5)node[right]{$\delta \vec{p}_1$};
\draw[->] (p2)node[]{$\bullet$}node[above]{$\vec{p}_2$} -- ++(-0.5, 1 )node[right]{$\delta \vec{p}_2$};
\draw[->] (p3)node[]{$\bullet$}node[above]{$\vec{p}_3$} -- ++( 1 , 0.5)node[right]{$\delta \vec{p}_3$};
\draw[->] (p4)node[]{$\bullet$}node[above]{$\vec{p}_4$} -- ++( 0.5, 1 )node[right]{$\delta \vec{p}_4$};
\draw[->] (p1)node[]{$\bullet$}node[above]{$\vec{p}_1$} -- ++( 1 , 0.1)node[right]{$\delta \vec{p}_1$};
\draw[->] (p2)node[]{$\bullet$}node[above]{$\vec{p}_2$} -- ++(-0.5,-0.4)node[below]{$\delta \vec{p}_2$};
\draw[->] (p3)node[]{$\bullet$}node[above]{$\vec{p}_3$} -- ++(-0.8,-0.1)node[below]{$\delta \vec{p}_3$};
\draw[->] (p4)node[]{$\bullet$}node[above]{$\vec{p}_4$} -- ++( 0.5, 0.2)node[below]{$\delta \vec{p}_4$};
\end{tikzpicture}
#+end_src
@ -646,9 +649,28 @@ The goal here is to link these $4 \times 3 = 12$ measurements to the 6 acrshort:
#+RESULTS:
[[file:figs/modal_local_to_global_coordinates.png]]
Writing Eq. eqref:eq:modal_p1_p2_motion for the four displacement sensors in a matrix form gives eqref:eq:modal_cart_to_acc.
The motion of the rigid body of figure ref:fig:modal_local_to_global_coordinates can be described by its displacement $\vec{\delta}p = [\delta p_x,\ \delta p_y,\ \delta p_z]$ and (small) rotations $[\delta \Omega_x,\ \delta \Omega_y,\ \delta \Omega_z]$ with respect to a reference frame $\{O\}$.
The motion $\vec{\delta} p_{i}$ of a point $p_i$ can be computed from $\vec{\delta} p$ and $\bm{\delta \Omega}$ using equation eqref:eq:modal_compute_point_response, with $\bm{\delta\Omega}$ defined in equation eqref:eq:modal_rotation_matrix.
\begin{equation}\label{eq:modal_compute_point_response}
\vec{\delta} p_{i} &= \vec{\delta} p + \bm{\delta \Omega} \cdot \vec{p}_{i} \\
\end{equation}
\begin{equation}\label{eq:modal_rotation_matrix}
\bm{\delta\Omega} = \begin{bmatrix}
0 & -\delta\Omega_z & \delta\Omega_y \\
\delta\Omega_z & 0 & -\delta\Omega_x \\
-\delta\Omega_y & \delta\Omega_x & 0
\end{bmatrix}
\end{equation}
Writing this in a matrix form for the four points gives eqref:eq:modal_cart_to_acc.
\begin{equation}\label{eq:modal_cart_to_acc}
\left[\begin{array}{c}
\delta p_{1x} \\ \delta p_{1y} \\ \delta p_{1z} \\\hline \vdots \\\hline \delta p_{4x} \\ \delta p_{4y} \\ \delta p_{4z}
\end{array}\right] =
\left[\begin{array}{ccc|ccc}
1 & 0 & 0 & 0 & p_{1z} & -p_{1y} \\
0 & 1 & 0 & -p_{1z} & 0 & p_{1x} \\
@ -659,17 +681,14 @@ Writing Eq. eqref:eq:modal_p1_p2_motion for the four displacement sensors in a m
0 & 0 & 1 & p_{4y} & -p_{4x} & 0
\end{array}\right] \left[\begin{array}{c}
\delta p_x \\ \delta p_y \\ \delta p_z \\ \hline \delta\Omega_x \\ \delta\Omega_y \\ \delta\Omega_z
\end{array}\right] = \left[\begin{array}{c}
\delta p_{1x} \\ \delta p_{1y} \\ \delta p_{1z} \\\hline \vdots \\\hline \delta p_{4x} \\ \delta p_{4y} \\ \delta p_{4z}
\end{array}\right]
\end{equation}
Provided that the four sensors are properly located, the system of equation eqref:eq:modal_cart_to_acc can be solved by matrix inversion.
Provided that the four sensors are properly located, the system of equation eqref:eq:modal_cart_to_acc can be solved by matrix inversion[fn:5].
The motion of the solid body expressed in a chosen frame $\{O\}$ can be determined using equation eqref:eq:modal_determine_global_disp.
Note that this matrix inversion is equivalent to resolving a mean square problem.
Therefore, having more accelerometers permits to have a better approximation of the motion of the solid body.
\begin{equation}
\left[\begin{array}{c}
\delta p_x \\ \delta p_y \\ \delta p_z \\ \hline \delta\Omega_x \\ \delta\Omega_y \\ \delta\Omega_z
@ -805,11 +824,12 @@ save('matlab/mat/frf_com.mat', 'frfs_CoM');
** Verification of solid body assumption
<<ssec:modal_solid_body_assumption>>
From the response of one solid body along its 6 acrshortpl:dof (i.e. from $\mathbf{H}_{\text{CoM}}$), and using equation eqref:eq:modal_cart_to_acc, it is possible to compute the response of the same solid body at any considered position.
In particular, the response at the location of the four accelerometers can be computed.
Comparing the computed response of a particular accelerometer from $\mathbf{H}_{\text{CoM}}$ with the original measurements $\mathbf{H}$ is use to check if solid body assumption is correct in the frequency band of interest.
From the response of one solid body expressed by its 6 acrshortpl:dof (i.e. from $\mathbf{H}_{\text{CoM}}$), and using equation eqref:eq:modal_cart_to_acc, it is possible to compute the response of the same solid body at any considered position.
In particular, the response at the location of the four accelerometers can be computed and compared with the original measurements $\mathbf{H}$.
This is what is here done to check if solid body assumption is correct in the frequency band of interest.
#+begin_src matlab
%% Compute the FRF at the accelerometer location from the CoM reponses
frfs_A = zeros(size(frf));
% For each excitation direction
@ -898,7 +918,7 @@ exportFig('figs/modal_comp_acc_solid_body_frf.pdf', 'width', 'full', 'height', '
:END:
<<sec:modal_analysis>>
** Introduction :ignore:
The goal here is to extract the modal parameters describing the modes of station being studied, namely the natural frequencies and the modal damping (i.e. the eigenvalues) and the mode shapes (.i.e. the eigenvectors).
The goal here is to extract the modal parameters describing the modes of station being studied, namely the natural frequencies and the modal damping (i.e. the eigenvalues) as well as the mode shapes (.i.e. the eigenvectors).
This is done from the acrshort:frf matrix previously extracted from the measurements.
In order to perform the modal parameter extraction, the order of the modal model needs to be estimated (i.e. the number of modes in the frequency band of interest).
@ -930,11 +950,11 @@ To validate the quality of the modal model, the full acrshort:frf matrix is comp
<<m-init-other>>
#+end_src
** Determine the number of modes
** Number of modes determination
<<ssec:modal_number_of_modes>>
The acrshort:mif is here applied to the $n\times p$ acrshort:frf matrix where $n$ is a relatively large number of measurement DOFs (here $n=69$) and $p$ is the number of excitation DOFs (here $p=3$).
The complex modal indication function is defined in equation eqref:eq:modal_cmif where $\Sigma$ is obtained from a acrshort:svd of the acrshort:frf matrix eqref:eq:modal_svd.
The complex modal indication function is defined in equation eqref:eq:modal_cmif where the diagonal matrix $\Sigma$ is obtained from a acrlong:svd of the acrshort:frf matrix as shown in equation eqref:eq:modal_svd.
\begin{equation} \label{eq:modal_cmif}
[CMIF(\omega)]_{p\times p} = [\Sigma(\omega)]_{p\times n}^T [\Sigma(\omega)]_{n\times p}
\end{equation}
@ -1021,19 +1041,13 @@ exportFig('figs/modal_indication_function.pdf', 'width', 'wide', 'height', 'norm
** Modal parameter extraction
<<ssec:modal_parameter_extraction>>
The modal identification generally consists of curve-fitting a theoretical expression for an individual acrshort:frf to the actual measured data.
The modal identification generally consists of curve-fitting a theoretical expression to the actual measured acrshort:frf data.
However, there are multiple level of complexity, from fitting of a single resonance, a complete curve encompassing several resonances and working on a set of many acrshort:frf plots all obtained from the same structure.
Here, the last method is used as it gives a unique and consistent model as direct output.
It takes into account the fact the the properties of all the individual curves are related by being from the same structure: all FRF plots on a given structure should indicate the same values for the natural frequencies and damping factor of each mode.
It takes into account the fact the properties of all the individual curves are related by being from the same structure: all acrshort:frf plots on a given structure should indicate the same values for the natural frequencies and damping factor of each mode.
From the obtained modal parameters, the mode shapes are computed and can be displayed in the form of animations.
Three mode shapes are shown in Figure ref:fig:modal_mode_animations.
These animations are quite useful to easily get a better understanding of the system.
For instance, the mode shape of the first mode at 11Hz (figure ref:fig:modal_mode1_animation) indicates that there is an issue with the lower granite.
It turns out that four /Airloc Levelers/ are used to level the lower granite (figure ref:fig:modal_airloc).
These are difficult to tune so that the granite is well supported by four of them and not "wobbly" on just two of them.
From the obtained modal parameters, the mode shapes are computed and can be displayed in the form of animations (three mode shapes are shown in Figure ref:fig:modal_mode_animations).
#+name: fig:modal_mode_animations
#+caption: Three obtained mode shape animations
@ -1058,6 +1072,12 @@ These are difficult to tune so that the granite is well supported by four of the
#+end_subfigure
#+end_figure
These animations are quite useful to visually get a better understanding of the system dynamical behavior.
For instance, the mode shape of the first mode at $11\,\text{Hz}$ (figure ref:fig:modal_mode1_animation) indicates that there is an issue with the lower granite.
It turns out that four /Airloc Levelers/ are used to level the lower granite (figure ref:fig:modal_airloc).
These are difficult to adjust and can lead to a situation where the granite is only supported by two of them, and therefore has a low frequency "tilt mode".
The levelers were then better adjusted.
#+name: fig:modal_airloc
#+caption: AirLoc used for the granite (2120-KSKC)
#+attr_latex: :width 0.6\linewidth
@ -1070,20 +1090,19 @@ For each mode $r$ (from $1$ to the number of considered modes $m=16$), it output
\{\phi_i\} = \begin{Bmatrix} \phi_{i, 1_x} & \phi_{i, 1_y} & \phi_{i, 1_z} & \phi_{i, 2_x} & \dots & \phi_{i, 23_z} \end{Bmatrix}^T
\end{equation}
The eigenvalues $s_r$ and $s_r^*$ can then be computed from eqref:eq:modal_eigenvalues.
The eigenvalues $s_r$ and $s_r^*$ can then be computed from equation eqref:eq:modal_eigenvalues.
\begin{equation}\label{eq:modal_eigenvalues}
s_r = \omega_r (-\xi_r + i \sqrt{1 - \xi_r^2}), \quad s_r^* = \omega_r (-\xi_r - i \sqrt{1 - \xi_r^2})
\end{equation}
** Verify the validity of the Modal Model
** Verification of the modal model validity
<<ssec:modal_model_validity>>
In order to check the validity of the modal model, the complete $n \times n$ acrshort:frf matrix $\mathbf{H}_{\text{syn}}$ is first synthesized from the modal parameters.
Then, the elements of this acrshort:frf matrix $\mathbf{H}_{\text{syn}}$ that were already measured can be compared with the measured elements $\mathbf{H}$.
New measurements may be performed to compare with elements of the synthesized acrshort:frf matrix that were not initialized measured to build the modal model.
Then, the elements of this acrshort:frf matrix $\mathbf{H}_{\text{syn}}$ that were already measured can be compared with the measured acrshort:frf matrix $\mathbf{H}$.
In order to synthesize the full acrshort:frf matrix, the eigenvectors $\phi_r$ are first reorganized in a matrix from as shown in equation eqref:eq:modal_eigvector_matrix.
In order to synthesize the full acrshort:frf matrix, the eigenvectors $\phi_r$ are first organized in a matrix from as shown in equation eqref:eq:modal_eigvector_matrix.
\begin{equation}\label{eq:modal_eigvector_matrix}
\Phi = \begin{bmatrix}
& & & & &\\
@ -1166,8 +1185,10 @@ for i = 1:size(Hsyn, 1)
end
#+end_src
The comparison between the original measured frequency response function and the synthesized one from the modal model is done in Figure ref:fig:modal_comp_acc_frf_modal.
The match is rather good considering the complex dynamics and the different directions considered.
The comparison between the original measured frequency response functions and the synthesized ones from the modal model is done in Figure ref:fig:modal_comp_acc_frf_modal.
Whether the obtained match can be considered good or bad is quite arbitrary.
Yet, the modal model seems to be able to represent the coupling between different nodes and different direction which is quite important in a control point of view.
This can be seen in Figure ref:fig:modal_comp_acc_frf_modal_3 that shows the frequency response function between a force applied on node 11 (i.e. on the translation stage) in the $y$ direction to the measured acceleration at node $2$ (i.e. at the top of the micro-hexapod) in the $x$ direction.
#+begin_src matlab :exports none
acc_o = 11; dir_o = 3;
@ -1270,14 +1291,14 @@ exportFig('figs/modal_comp_acc_frf_modal_3.pdf', 'width', 'third', 'height', 'no
In this study, a modal analysis of the micro-station was performed.
Thanks to adequate choice of instrumentation and proper set of measurements, high quality frequency response functions could be obtained.
As could be expected from a heavy stacked stages architecture, the obtained frequency response functions indicate that the dynamics of the micro-station is complex.
It shows lots of coupling between stages and different directions, as well as many modes with various damping properties.
The obtained frequency response functions indicate that the dynamics of the micro-station is complex, which is expected from a heavy stack stages architecture.
It shows lots of coupling between stages and different directions, as well as many modes.
By measuring 12 degrees of freedom on each "stage", it could be verified that in the frequency range of interest, each stage is behaving as a rigid body.
This confirms that a solid-body model can be used to properly model the micro-station.
Even though lots of efforts were put in the proper modal analysis of the micro-station, it was stiff very difficult to obtain an accurate modal model.
Yet, the measurements will be quite useful when tuning the parameters of the multi-body model.
Even though lots of efforts were put in this experimental modal analysis of the micro-station, it was proven difficult to obtain an accurate modal model.
Yet, the measurements will be quite useful for tuning the parameters of the micro-station multi-body model.
* Bibliography :ignore:
#+latex: \printbibliography[heading=bibintoc,title={Bibliography}]
@ -1313,7 +1334,8 @@ colors = colororder;
* Footnotes
[fn:4]NVGate software from OROS company
[fn:5]As this matrix is in general non-square, the MoorePenrose inverse can be used instead.
[fn:4]NVGate software from OROS company.
[fn:3]OROS OR36. 24bits signal-delta ADC.
[fn:2]Kistler 9722A2000. Sensitivity of $2.3\,mV/N$ and measurement range of $2\,kN$
[fn:1]PCB 356B18. Sensitivity is $1\,V/g$, measurement range is $\pm 5\,g$ and bandwidth is $0.5$ to $5\,\text{kHz}$.

Binary file not shown.

View File

@ -1,4 +1,4 @@
% Created 2024-10-24 Thu 17:41
% Created 2024-10-24 Thu 18:44
% Intended LaTeX compiler: pdflatex
\documentclass[a4paper, 10pt, DIV=12, parskip=full, bibliography=totoc]{scrreprt}
@ -49,7 +49,7 @@ This modal model can then be used to tune the spatial model (i.e. the multi-body
\begin{figure}[htbp]
\centering
\includegraphics[scale=1]{figs/modal_vibration_analysis_procedure.png}
\caption{\label{fig:modal_vibration_analysis_procedure}Figure caption}
\caption{\label{fig:modal_vibration_analysis_procedure}Three models of the same structure. The goal could be to tune a spatial model (i.e. mass, stiffness and damping properties) from a response model. As an intermediate step, the modal model can prove to be very useful.}
\end{figure}
The measurement setup used to obtain the response model is presented in Section \ref{sec:modal_meas_setup}.
@ -60,7 +60,7 @@ These measurements are projected at the center of mass of each considered solid
The solid body assumption is then verified, validating the use of the multi-body model.
Finally, the modal analysis is performed in Section \ref{sec:modal_analysis}.
It shows how complex the micro-station dynamics is, and the necessity of the developed more complex multi-body model.
It shows how complex the micro-station dynamics is, and the necessity of having a model that represented complex dynamics.
\chapter{Measurement Setup}
@ -68,7 +68,7 @@ It shows how complex the micro-station dynamics is, and the necessity of the dev
In order to perform an experimental modal analysis, a proper measurement setup is key.
This include using appropriate instrumentation (presented in Section \ref{ssec:modal_instrumentation}) and properly preparing the structure to be measured (Section \ref{ssec:modal_test_preparation}).
Then, the location of the measured motion (Section \ref{ssec:modal_accelerometers}) and the location of the hammer impacts (Section \ref{ssec:modal_hammer_impacts}) have to be chosen carefully.
Obtained force and acceleration signals are shown in Section \ref{ssec:modal_measured_signals}, and the quality of the measured data is checked.
Obtained force and acceleration signals are shown in Section \ref{ssec:modal_measured_signals}, and the quality of the measured data is assessed.
\section{Used Instrumentation}
\label{ssec:modal_instrumentation}
@ -117,13 +117,13 @@ The top part representing the active stabilization stage has been disassembled a
To perform the modal-analysis from the measured responses, the \(n \times n\) frequency response function matrix \(\mathbf{H}\) needs to be measured, where \(n\) is the considered number of degrees of freedom.
The \(H_{jk}\) element of this \acrfull{frf} matrix corresponds to the frequency response function from a force \(F_k\) applied at \acrfull{dof} \(k\) to the displacement of the structure \(X_j\) at \acrshort{dof} \(j\).
Measuring this \acrshort{frf} matrix is very time consuming as it requires to make \(n^2\) measurements.
Measuring this \acrshort{frf} matrix is very time consuming as it requires to make \(n \times n\) measurements.
However thanks to the principle of reciprocity (\(H_{jk} = H_{kj}\)) and using the \emph{point measurement} (\(H_{jj}\)), it is possible to reconstruct the full matrix by measuring only one column or one line of the matrix \(\mathbf{H}\) \cite[chapt. 5.2]{ewins00_modal}.
Therefore, a minimum set of \(n\) frequency response functions needs to be measured.
This can be done either by measuring the response \(X_{j}\) at a fixed \acrshort{dof} \(j\) while applying forces \(F_{i}\) for at all \(n\) considered \acrshort{dof}, or by applying a force \(F_{k}\) at a fixed \acrshort{dof} \(k\) and measuring the response \(X_{i}\) for all \(n\) \acrshort{dof}.
It is however not advised to measure only one row or one column as one or more modes may be missed by an unfortunate choice of force or acceleration measured locations (for instance if the force is applied at a vibration node of a particular mode).
In this modal-analysis, it is chosen to measure the response of the structure at all considered \acrshort{dof}, and to excite the structure at one location in three directions in order to have some redundancy and to make sure that all modes are properly energized.
In this modal-analysis, it is chosen to measure the response of the structure at all considered \acrshort{dof}, and to excite the structure at one location in three directions in order to have some redundancy and to make sure that all modes are properly identified.
\section{Location of the Accelerometers}
\label{ssec:modal_accelerometers}
@ -201,7 +201,6 @@ The chosen location of the hammer impact corresponds to the location of accelero
It was chosen to match the location of one accelerometer, because a \emph{point measurement} (i.e. a measurement of \(H_{kk}\)) is necessary to be able to reconstruct the full \acrshort{frf} matrix \cite{ewins00_modal}.
The impacts are performed in three directions, which are shown in figures \ref{fig:modal_impact_x}, \ref{fig:modal_impact_y} and \ref{fig:modal_impact_z}.
This excitation point with the three considered directions allows to properly energize all the modes in the frequency band of interest and to provide good coherence for all the accelerometers as will be shown in the next section.
\begin{figure}[htbp]
\begin{subfigure}{0.33\textwidth}
@ -234,6 +233,7 @@ For the accelerometer, a much more complex signal can be observed, indicating co
The ``normalized'' \acrfull{asd} of the two signals are computed and shown in Figure \ref{fig:modal_asd_acc_force}.
Conclusions based on the time domain signals can be clearly seen in the frequency domain (wide frequency content for the force signal and complex dynamics for the accelerometer).
Similar results are obtained for all the measured frequency response functions.
\begin{figure}[htbp]
\begin{subfigure}{0.49\textwidth}
@ -273,7 +273,7 @@ Good coherence is obtained from \(20\,\text{Hz}\) to \(200\,\text{Hz}\) which co
\chapter{Frequency Analysis}
\label{sec:modal_frf_processing}
All measurements where conducted and a \(n \times p \times q\) \acrlongpl{frf} Matrix were computed with:
After all measurements are conducted, a \(n \times p \times q\) \acrlongpl{frf} matrix can be computed with:
\begin{itemize}
\item \(n = 69\): the number of output measured accelerations (23 3-axis accelerometers)
\item \(p = 3\): the number of input force excitations
@ -293,14 +293,14 @@ For each frequency point \(\omega_{i}\), a 2D complex matrix is obtained that li
\end{bmatrix}
\end{equation}
However, for the multi-body model being developed, only 6 solid bodies are considered, namely: the bottom granite, the top granite, the translation stage, the tilt stage, the spindle and the hexapod.
However, for the multi-body model being developed, only 6 solid bodies are considered, namely: the bottom granite, the top granite, the translation stage, the tilt stage, the spindle and the micro-hexapod.
Therefore, only \(6 \times 6 = 36\) degrees of freedom are of interest.
The objective in this section is therefore to process the Frequency Response Matrix to reduce the number of measured \acrshort{dof} from 69 to 36.
The coordinate transformation from accelerometers \acrshort{dof} to the solid body 6 \acrshortpl{dof} (three translations and three rotations) is performed in Section \ref{ssec:modal_acc_to_solid_dof}.
The \(69 \times 3 \times 801\) frequency response matrix is then reduced to a \(36 \times 3 \times 801\) frequency response matrix where the motion of each solid body is expressed with respect to its center of mass.
To validate this reduction of \acrshort{dof} and the solid body assumption, the frequency response function at the accelerometer location are recomputed from the reduced frequency response matrix and are compared with the initial measurements in Section \ref{ssec:modal_solid_body_assumption}.
To validate this reduction of \acrshort{dof} and the solid body assumption, the frequency response function at the accelerometer location are ``reconstructed'' from the reduced frequency response matrix and are compared with the initial measurements in Section \ref{ssec:modal_solid_body_assumption}.
\section{From accelerometer DOFs to solid body DOFs}
\label{ssec:modal_acc_to_solid_dof}
@ -313,9 +313,28 @@ The goal here is to link these \(4 \times 3 = 12\) measurements to the 6 \acrsho
\caption{\label{fig:modal_local_to_global_coordinates}Schematic of the measured motions of a solid body}
\end{figure}
Writing Eq. \eqref{eq:modal_p1_p2_motion} for the four displacement sensors in a matrix form gives \eqref{eq:modal_cart_to_acc}.
The motion of the rigid body of figure \ref{fig:modal_local_to_global_coordinates} can be described by its displacement \(\vec{\delta}p = [\delta p_x,\ \delta p_y,\ \delta p_z]\) and (small) rotations \([\delta \Omega_x,\ \delta \Omega_y,\ \delta \Omega_z]\) with respect to a reference frame \(\{O\}\).
The motion \(\vec{\delta} p_{i}\) of a point \(p_i\) can be computed from \(\vec{\delta} p\) and \(\bm{\delta \Omega}\) using equation \eqref{eq:modal_compute_point_response}, with \(\bm{\delta\Omega}\) defined in equation \eqref{eq:modal_rotation_matrix}.
\begin{equation}\label{eq:modal_compute_point_response}
\vec{\delta} p_{i} &= \vec{\delta} p + \bm{\delta \Omega} \cdot \vec{p}_{i} \\
\end{equation}
\begin{equation}\label{eq:modal_rotation_matrix}
\bm{\delta\Omega} = \begin{bmatrix}
0 & -\delta\Omega_z & \delta\Omega_y \\
\delta\Omega_z & 0 & -\delta\Omega_x \\
-\delta\Omega_y & \delta\Omega_x & 0
\end{bmatrix}
\end{equation}
Writing this in a matrix form for the four points gives \eqref{eq:modal_cart_to_acc}.
\begin{equation}\label{eq:modal_cart_to_acc}
\left[\begin{array}{c}
\delta p_{1x} \\ \delta p_{1y} \\ \delta p_{1z} \\\hline \vdots \\\hline \delta p_{4x} \\ \delta p_{4y} \\ \delta p_{4z}
\end{array}\right] =
\left[\begin{array}{ccc|ccc}
1 & 0 & 0 & 0 & p_{1z} & -p_{1y} \\
0 & 1 & 0 & -p_{1z} & 0 & p_{1x} \\
@ -326,17 +345,14 @@ Writing Eq. \eqref{eq:modal_p1_p2_motion} for the four displacement sensors in a
0 & 0 & 1 & p_{4y} & -p_{4x} & 0
\end{array}\right] \left[\begin{array}{c}
\delta p_x \\ \delta p_y \\ \delta p_z \\ \hline \delta\Omega_x \\ \delta\Omega_y \\ \delta\Omega_z
\end{array}\right] = \left[\begin{array}{c}
\delta p_{1x} \\ \delta p_{1y} \\ \delta p_{1z} \\\hline \vdots \\\hline \delta p_{4x} \\ \delta p_{4y} \\ \delta p_{4z}
\end{array}\right]
\end{equation}
Provided that the four sensors are properly located, the system of equation \eqref{eq:modal_cart_to_acc} can be solved by matrix inversion.
Provided that the four sensors are properly located, the system of equation \eqref{eq:modal_cart_to_acc} can be solved by matrix inversion\footnote{As this matrix is in general non-square, the MoorePenrose inverse can be used instead.}.
The motion of the solid body expressed in a chosen frame \(\{O\}\) can be determined using equation \eqref{eq:modal_determine_global_disp}.
Note that this matrix inversion is equivalent to resolving a mean square problem.
Therefore, having more accelerometers permits to have a better approximation of the motion of the solid body.
\begin{equation}
\left[\begin{array}{c}
\delta p_x \\ \delta p_y \\ \delta p_z \\ \hline \delta\Omega_x \\ \delta\Omega_y \\ \delta\Omega_z
@ -394,9 +410,9 @@ Using \eqref{eq:modal_determine_global_disp}, the frequency response matrix \(\m
\section{Verification of solid body assumption}
\label{ssec:modal_solid_body_assumption}
From the response of one solid body along its 6 \acrshortpl{dof} (i.e. from \(\mathbf{H}_{\text{CoM}}\)), and using equation \eqref{eq:modal_cart_to_acc}, it is possible to compute the response of the same solid body at any considered position.
In particular, the response at the location of the four accelerometers can be computed.
Comparing the computed response of a particular accelerometer from \(\mathbf{H}_{\text{CoM}}\) with the original measurements \(\mathbf{H}\) is use to check if solid body assumption is correct in the frequency band of interest.
From the response of one solid body expressed by its 6 \acrshortpl{dof} (i.e. from \(\mathbf{H}_{\text{CoM}}\)), and using equation \eqref{eq:modal_cart_to_acc}, it is possible to compute the response of the same solid body at any considered position.
In particular, the response at the location of the four accelerometers can be computed and compared with the original measurements \(\mathbf{H}\).
This is what is here done to check if solid body assumption is correct in the frequency band of interest.
The comparison is made for the 4 accelerometers fixed to the micro-hexapod (Figure \ref{fig:modal_comp_acc_solid_body_frf}).
The original frequency response functions and the ones computed from the CoM responses are well matching in the frequency range of interested.
@ -411,7 +427,7 @@ This also validates the reduction of the number of degrees of freedom from 69 (2
\chapter{Modal Analysis}
\label{sec:modal_analysis}
The goal here is to extract the modal parameters describing the modes of station being studied, namely the natural frequencies and the modal damping (i.e. the eigenvalues) and the mode shapes (.i.e. the eigenvectors).
The goal here is to extract the modal parameters describing the modes of station being studied, namely the natural frequencies and the modal damping (i.e. the eigenvalues) as well as the mode shapes (.i.e. the eigenvectors).
This is done from the \acrshort{frf} matrix previously extracted from the measurements.
In order to perform the modal parameter extraction, the order of the modal model needs to be estimated (i.e. the number of modes in the frequency band of interest).
@ -421,11 +437,11 @@ In section \ref{ssec:modal_parameter_extraction}, the modal parameter extraction
Graphical display of the mode shapes can be computed from the modal model, which is quite quite useful to have a physical interpretation of the modes.
To validate the quality of the modal model, the full \acrshort{frf} matrix is computed from the modal model and compared with the initial measured \acrshort{frf} (section \ref{ssec:modal_model_validity}).
\section{Determine the number of modes}
\section{Number of modes determination}
\label{ssec:modal_number_of_modes}
The \acrshort{mif} is here applied to the \(n\times p\) \acrshort{frf} matrix where \(n\) is a relatively large number of measurement DOFs (here \(n=69\)) and \(p\) is the number of excitation DOFs (here \(p=3\)).
The complex modal indication function is defined in equation \eqref{eq:modal_cmif} where \(\Sigma\) is obtained from a \acrshort{svd} of the \acrshort{frf} matrix \eqref{eq:modal_svd}.
The complex modal indication function is defined in equation \eqref{eq:modal_cmif} where the diagonal matrix \(\Sigma\) is obtained from a \acrlong{svd} of the \acrshort{frf} matrix as shown in equation \eqref{eq:modal_svd}.
\begin{equation} \label{eq:modal_cmif}
[CMIF(\omega)]_{p\times p} = [\Sigma(\omega)]_{p\times n}^T [\Sigma(\omega)]_{n\times p}
\end{equation}
@ -479,19 +495,13 @@ Mode & Freq. [Hz] & Damp. [\%]\\
\section{Modal parameter extraction}
\label{ssec:modal_parameter_extraction}
The modal identification generally consists of curve-fitting a theoretical expression for an individual \acrshort{frf} to the actual measured data.
The modal identification generally consists of curve-fitting a theoretical expression to the actual measured \acrshort{frf} data.
However, there are multiple level of complexity, from fitting of a single resonance, a complete curve encompassing several resonances and working on a set of many \acrshort{frf} plots all obtained from the same structure.
Here, the last method is used as it gives a unique and consistent model as direct output.
It takes into account the fact the the properties of all the individual curves are related by being from the same structure: all FRF plots on a given structure should indicate the same values for the natural frequencies and damping factor of each mode.
It takes into account the fact the properties of all the individual curves are related by being from the same structure: all \acrshort{frf} plots on a given structure should indicate the same values for the natural frequencies and damping factor of each mode.
From the obtained modal parameters, the mode shapes are computed and can be displayed in the form of animations.
Three mode shapes are shown in Figure \ref{fig:modal_mode_animations}.
These animations are quite useful to easily get a better understanding of the system.
For instance, the mode shape of the first mode at 11Hz (figure \ref{fig:modal_mode1_animation}) indicates that there is an issue with the lower granite.
It turns out that four \emph{Airloc Levelers} are used to level the lower granite (figure \ref{fig:modal_airloc}).
These are difficult to tune so that the granite is well supported by four of them and not ``wobbly'' on just two of them.
From the obtained modal parameters, the mode shapes are computed and can be displayed in the form of animations (three mode shapes are shown in Figure \ref{fig:modal_mode_animations}).
\begin{figure}
\begin{subfigure}{\textwidth}
@ -515,33 +525,38 @@ These are difficult to tune so that the granite is well supported by four of the
\caption{\label{fig:modal_mode_animations}Three obtained mode shape animations}
\end{figure}
These animations are quite useful to visually get a better understanding of the system dynamical behavior.
For instance, the mode shape of the first mode at \(11\,\text{Hz}\) (figure \ref{fig:modal_mode1_animation}) indicates that there is an issue with the lower granite.
It turns out that four \emph{Airloc Levelers} are used to level the lower granite (figure \ref{fig:modal_airloc}).
These are difficult to adjust and can lead to a situation where the granite is only supported by two of them, and therefore has a low frequency ``tilt mode''.
The levelers were then better adjusted.
\begin{figure}[htbp]
\centering
\includegraphics[scale=1,width=0.6\linewidth]{figs/modal_airlock_picture.jpg}
\caption{\label{fig:modal_airloc}AirLoc used for the granite (2120-KSKC)}
\end{figure}
The modal parameter extraction is made using a proprietary software\footnote{NVGate software from OROS company}.
The modal parameter extraction is made using a proprietary software\footnote{NVGate software from OROS company.}.
For each mode \(r\) (from \(1\) to the number of considered modes \(m=16\)), it outputs the frequency \(\omega_r\), the damping ratio \(\xi_r\), the eigenvectors \(\{\phi_{r}\}\) (vector of complex numbers with a size equal to the number of measured \acrshort{dof} \(n=69\), see equation \eqref{eq:modal_eigenvector}) and a scaling factor \(a_r\).
\begin{equation}\label{eq:modal_eigenvector}
\{\phi_i\} = \begin{Bmatrix} \phi_{i, 1_x} & \phi_{i, 1_y} & \phi_{i, 1_z} & \phi_{i, 2_x} & \dots & \phi_{i, 23_z} \end{Bmatrix}^T
\end{equation}
The eigenvalues \(s_r\) and \(s_r^*\) can then be computed from \eqref{eq:modal_eigenvalues}.
The eigenvalues \(s_r\) and \(s_r^*\) can then be computed from equation \eqref{eq:modal_eigenvalues}.
\begin{equation}\label{eq:modal_eigenvalues}
s_r = \omega_r (-\xi_r + i \sqrt{1 - \xi_r^2}), \quad s_r^* = \omega_r (-\xi_r - i \sqrt{1 - \xi_r^2})
\end{equation}
\section{Verify the validity of the Modal Model}
\section{Verification of the modal model validity}
\label{ssec:modal_model_validity}
In order to check the validity of the modal model, the complete \(n \times n\) \acrshort{frf} matrix \(\mathbf{H}_{\text{syn}}\) is first synthesized from the modal parameters.
Then, the elements of this \acrshort{frf} matrix \(\mathbf{H}_{\text{syn}}\) that were already measured can be compared with the measured elements \(\mathbf{H}\).
New measurements may be performed to compare with elements of the synthesized \acrshort{frf} matrix that were not initialized measured to build the modal model.
Then, the elements of this \acrshort{frf} matrix \(\mathbf{H}_{\text{syn}}\) that were already measured can be compared with the measured \acrshort{frf} matrix \(\mathbf{H}\).
In order to synthesize the full \acrshort{frf} matrix, the eigenvectors \(\phi_r\) are first reorganized in a matrix from as shown in equation \eqref{eq:modal_eigvector_matrix}.
In order to synthesize the full \acrshort{frf} matrix, the eigenvectors \(\phi_r\) are first organized in a matrix from as shown in equation \eqref{eq:modal_eigvector_matrix}.
\begin{equation}\label{eq:modal_eigvector_matrix}
\Phi = \begin{bmatrix}
& & & & &\\
@ -561,8 +576,10 @@ With \(\mathbf{H}_{\text{mod}}(\omega)\) a diagonal matrix representing the resp
\mathbf{H}_{\text{mod}}(\omega) = \text{diag}\left(\frac{1}{a_1 (j\omega - s_1)},\ \dots,\ \frac{1}{a_m (j\omega - s_m)}, \frac{1}{a_1^* (j\omega - s_1^*)},\ \dots,\ \frac{1}{a_m^* (j\omega - s_m^*)} \right)_{2m\times 2m}
\end{equation}
The comparison between the original measured frequency response function and the synthesized one from the modal model is done in Figure \ref{fig:modal_comp_acc_frf_modal}.
The match is rather good considering the complex dynamics and the different directions considered.
The comparison between the original measured frequency response functions and the synthesized ones from the modal model is done in Figure \ref{fig:modal_comp_acc_frf_modal}.
Whether the obtained match can be considered good or bad is quite arbitrary.
Yet, the modal model seems to be able to represent the coupling between different nodes and different direction which is quite important in a control point of view.
This can be seen in Figure \ref{fig:modal_comp_acc_frf_modal_3} that shows the frequency response function between a force applied on node 11 (i.e. on the translation stage) in the \(y\) direction to the measured acceleration at node \(2\) (i.e. at the top of the micro-hexapod) in the \(x\) direction.
\begin{figure}[htbp]
\begin{subfigure}{0.33\textwidth}
@ -591,14 +608,14 @@ The match is rather good considering the complex dynamics and the different dire
In this study, a modal analysis of the micro-station was performed.
Thanks to adequate choice of instrumentation and proper set of measurements, high quality frequency response functions could be obtained.
As could be expected from a heavy stacked stages architecture, the obtained frequency response functions indicate that the dynamics of the micro-station is complex.
It shows lots of coupling between stages and different directions, as well as many modes with various damping properties.
The obtained frequency response functions indicate that the dynamics of the micro-station is complex, which is expected from a heavy stack stages architecture.
It shows lots of coupling between stages and different directions, as well as many modes.
By measuring 12 degrees of freedom on each ``stage'', it could be verified that in the frequency range of interest, each stage is behaving as a rigid body.
This confirms that a solid-body model can be used to properly model the micro-station.
Even though lots of efforts were put in the proper modal analysis of the micro-station, it was stiff very difficult to obtain an accurate modal model.
Yet, the measurements will be quite useful when tuning the parameters of the multi-body model.
Even though lots of efforts were put in this experimental modal analysis of the micro-station, it was proven difficult to obtain an accurate modal model.
Yet, the measurements will be quite useful for tuning the parameters of the micro-station multi-body model.
\printbibliography[heading=bibintoc,title={Bibliography}]