[READ-ONLY] Mirror of https://github.com/jmrplens/PyOctaveBand. [Python3] Octave-Band and Fractional Octave-Band filter. For signal in time domain. jmrplens.github.io/PyOctaveBand/
acoustics audio filter frequency frequency-analysis frequency-domain octave python3 signal time-domain
0

Configure Feed

Select the types of activity you want to include in your feed.

feat: dynamic stiffness of resilient materials (EN 29052-1:1992) (#135)

First module of the structure-borne / vibro-acoustic characterisation chain
that culminates in EN 12354-5. EN 29052-1 (= ISO 9052-1:1989) determines the
dynamic stiffness per unit area s' of resilient layers under floating floors
from the load-plate resonance:

- apparent_dynamic_stiffness s't = 4 pi^2 m't fr^2 (Formula 4)
- enclosed_gas_stiffness s'a = p0 / (d eps) (Formula 7)
- installed_dynamic_stiffness airflow-resistivity regimes (clause 8.2)
- natural_frequency f0 = (1/2pi) sqrt(s'/m') (Formula 2)
- floating_floor_resonance full chain -> DynamicStiffnessResult + .plot()

Conformance is anchored on the standard's own worked NOTE (s'a = 111/d MN/m3
for p0 = 0,1 MPa, eps = 0,9), reproduced exactly by the closed form, plus
hand-computed values of the resonance relations. s' feeds the ISO 16251 /
EN 12354-2 floating-floor impact improvement.

Docs (repo + bilingual site guide + API reference), the dynamic_stiffness
figure (4 variants), 3 conformance checks (123/123) and 17 tests.

authored by

José M. Requena Plens and committed by
GitHub
(Jul 11, 2026, 5:10 PM +0200) 593fd207 0aae1405

+3686 -4
+676
.github/images/dynamic_stiffness.svg
··· 1 + <?xml version="1.0" encoding="utf-8" standalone="no"?> 2 + <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 3 + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 + <svg xmlns:xlink="http://www.w3.org/1999/xlink" width="713.0875pt" height="438.938125pt" viewBox="0 0 713.0875 438.938125" xmlns="http://www.w3.org/2000/svg" version="1.1"> 5 + <metadata> 6 + <rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 7 + <cc:Work> 8 + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> 9 + <dc:format>image/svg+xml</dc:format> 10 + <dc:creator> 11 + <cc:Agent> 12 + <dc:title>Matplotlib v3.11.0, https://matplotlib.org/</dc:title> 13 + </cc:Agent> 14 + </dc:creator> 15 + </cc:Work> 16 + </rdf:RDF> 17 + </metadata> 18 + <defs> 19 + <style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style> 20 + </defs> 21 + <g id="figure_1"> 22 + <g id="patch_1"> 23 + <path d="M 0 438.938125 24 + L 713.0875 438.938125 25 + L 713.0875 0 26 + L 0 0 27 + z 28 + " style="fill: #ffffff"/> 29 + </g> 30 + <g id="axes_1"> 31 + <g id="patch_2"> 32 + <path d="M 47.289844 398.433438 33 + L 705.8875 398.433438 34 + L 705.8875 28.318125 35 + L 47.289844 28.318125 36 + z 37 + " style="fill: #ffffff"/> 38 + </g> 39 + <g id="matplotlib.axis_1"> 40 + <g id="xtick_1"> 41 + <g id="line2d_1"> 42 + <path d="M 323.546468 398.433438 43 + L 323.546468 28.318125 44 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 45 + </g> 46 + <g id="line2d_2"> 47 + <defs> 48 + <path id="m3d27035b55" d="M 0 0 49 + L 0 3.5 50 + " style="stroke: #000000; stroke-width: 0.8"/> 51 + </defs> 52 + <g> 53 + <use xlink:href="#m3d27035b55" x="323.546468" y="398.433438" style="stroke: #000000; stroke-width: 0.8"/> 54 + </g> 55 + </g> 56 + <g id="text_1"> 57 + <!-- $\mathdefault{10^{1}}$ --> 58 + <g transform="translate(314.746468 414.733438)"> 59 + <text> 60 + <tspan x="0" y="-0.762187" style="font-size: 10px; font-family: 'DejaVu Sans'">1</tspan> 61 + <tspan x="6.362305" y="-0.762187" style="font-size: 10px; font-family: 'DejaVu Sans'">0</tspan> 62 + <tspan x="12.820312" y="-4.892187" style="font-size: 7px; font-family: 'DejaVu Sans'">1</tspan> 63 + </text> 64 + </g> 65 + </g> 66 + </g> 67 + <g id="xtick_2"> 68 + <g id="line2d_3"> 69 + <path d="M 675.951243 398.433438 70 + L 675.951243 28.318125 71 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 72 + </g> 73 + <g id="line2d_4"> 74 + <g> 75 + <use xlink:href="#m3d27035b55" x="675.951243" y="398.433438" style="stroke: #000000; stroke-width: 0.8"/> 76 + </g> 77 + </g> 78 + <g id="text_2"> 79 + <!-- $\mathdefault{10^{2}}$ --> 80 + <g transform="translate(667.151243 414.833438)"> 81 + <text> 82 + <tspan x="0" y="-0.674688" style="font-size: 10px; font-family: 'DejaVu Sans'">1</tspan> 83 + <tspan x="6.362305" y="-0.674688" style="font-size: 10px; font-family: 'DejaVu Sans'">0</tspan> 84 + <tspan x="12.820312" y="-4.804688" style="font-size: 7px; font-family: 'DejaVu Sans'">2</tspan> 85 + </text> 86 + </g> 87 + </g> 88 + </g> 89 + <g id="xtick_3"> 90 + <g id="line2d_5"> 91 + <path d="M 77.226101 398.433438 92 + L 77.226101 28.318125 93 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 94 + </g> 95 + <g id="line2d_6"> 96 + <defs> 97 + <path id="md1b22fa4b4" d="M 0 0 98 + L 0 2 99 + " style="stroke: #000000; stroke-width: 0.6"/> 100 + </defs> 101 + <g> 102 + <use xlink:href="#md1b22fa4b4" x="77.226101" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 103 + </g> 104 + </g> 105 + </g> 106 + <g id="xtick_4"> 107 + <g id="line2d_7"> 108 + <path d="M 139.281501 398.433438 109 + L 139.281501 28.318125 110 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 111 + </g> 112 + <g id="line2d_8"> 113 + <g> 114 + <use xlink:href="#md1b22fa4b4" x="139.281501" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 115 + </g> 116 + </g> 117 + </g> 118 + <g id="xtick_5"> 119 + <g id="line2d_9"> 120 + <path d="M 183.310509 398.433438 121 + L 183.310509 28.318125 122 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 123 + </g> 124 + <g id="line2d_10"> 125 + <g> 126 + <use xlink:href="#md1b22fa4b4" x="183.310509" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 127 + </g> 128 + </g> 129 + </g> 130 + <g id="xtick_6"> 131 + <g id="line2d_11"> 132 + <path d="M 217.46206 398.433438 133 + L 217.46206 28.318125 134 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 135 + </g> 136 + <g id="line2d_12"> 137 + <g> 138 + <use xlink:href="#md1b22fa4b4" x="217.46206" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 139 + </g> 140 + </g> 141 + </g> 142 + <g id="xtick_7"> 143 + <g id="line2d_13"> 144 + <path d="M 245.365909 398.433438 145 + L 245.365909 28.318125 146 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 147 + </g> 148 + <g id="line2d_14"> 149 + <g> 150 + <use xlink:href="#md1b22fa4b4" x="245.365909" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 151 + </g> 152 + </g> 153 + </g> 154 + <g id="xtick_8"> 155 + <g id="line2d_15"> 156 + <path d="M 268.958278 398.433438 157 + L 268.958278 28.318125 158 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 159 + </g> 160 + <g id="line2d_16"> 161 + <g> 162 + <use xlink:href="#md1b22fa4b4" x="268.958278" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 163 + </g> 164 + </g> 165 + </g> 166 + <g id="xtick_9"> 167 + <g id="line2d_17"> 168 + <path d="M 289.394917 398.433438 169 + L 289.394917 28.318125 170 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 171 + </g> 172 + <g id="line2d_18"> 173 + <g> 174 + <use xlink:href="#md1b22fa4b4" x="289.394917" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 175 + </g> 176 + </g> 177 + </g> 178 + <g id="xtick_10"> 179 + <g id="line2d_19"> 180 + <path d="M 307.42131 398.433438 181 + L 307.42131 28.318125 182 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 183 + </g> 184 + <g id="line2d_20"> 185 + <g> 186 + <use xlink:href="#md1b22fa4b4" x="307.42131" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 187 + </g> 188 + </g> 189 + </g> 190 + <g id="xtick_11"> 191 + <g id="line2d_21"> 192 + <path d="M 429.630876 398.433438 193 + L 429.630876 28.318125 194 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 195 + </g> 196 + <g id="line2d_22"> 197 + <g> 198 + <use xlink:href="#md1b22fa4b4" x="429.630876" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 199 + </g> 200 + </g> 201 + </g> 202 + <g id="xtick_12"> 203 + <g id="line2d_23"> 204 + <path d="M 491.686276 398.433438 205 + L 491.686276 28.318125 206 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 207 + </g> 208 + <g id="line2d_24"> 209 + <g> 210 + <use xlink:href="#md1b22fa4b4" x="491.686276" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 211 + </g> 212 + </g> 213 + </g> 214 + <g id="xtick_13"> 215 + <g id="line2d_25"> 216 + <path d="M 535.715284 398.433438 217 + L 535.715284 28.318125 218 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 219 + </g> 220 + <g id="line2d_26"> 221 + <g> 222 + <use xlink:href="#md1b22fa4b4" x="535.715284" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 223 + </g> 224 + </g> 225 + </g> 226 + <g id="xtick_14"> 227 + <g id="line2d_27"> 228 + <path d="M 569.866835 398.433438 229 + L 569.866835 28.318125 230 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 231 + </g> 232 + <g id="line2d_28"> 233 + <g> 234 + <use xlink:href="#md1b22fa4b4" x="569.866835" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 235 + </g> 236 + </g> 237 + </g> 238 + <g id="xtick_15"> 239 + <g id="line2d_29"> 240 + <path d="M 597.770684 398.433438 241 + L 597.770684 28.318125 242 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 243 + </g> 244 + <g id="line2d_30"> 245 + <g> 246 + <use xlink:href="#md1b22fa4b4" x="597.770684" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 247 + </g> 248 + </g> 249 + </g> 250 + <g id="xtick_16"> 251 + <g id="line2d_31"> 252 + <path d="M 621.363053 398.433438 253 + L 621.363053 28.318125 254 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 255 + </g> 256 + <g id="line2d_32"> 257 + <g> 258 + <use xlink:href="#md1b22fa4b4" x="621.363053" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 259 + </g> 260 + </g> 261 + </g> 262 + <g id="xtick_17"> 263 + <g id="line2d_33"> 264 + <path d="M 641.799692 398.433438 265 + L 641.799692 28.318125 266 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 267 + </g> 268 + <g id="line2d_34"> 269 + <g> 270 + <use xlink:href="#md1b22fa4b4" x="641.799692" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 271 + </g> 272 + </g> 273 + </g> 274 + <g id="xtick_18"> 275 + <g id="line2d_35"> 276 + <path d="M 659.826085 398.433438 277 + L 659.826085 28.318125 278 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 279 + </g> 280 + <g id="line2d_36"> 281 + <g> 282 + <use xlink:href="#md1b22fa4b4" x="659.826085" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 283 + </g> 284 + </g> 285 + </g> 286 + <g id="text_3"> 287 + <!-- Dynamic stiffness per unit area $s'$ [MN/m³] --> 288 + <g transform="translate(270.438672 429.335781)"> 289 + <text> 290 + <tspan x="0" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">D</tspan> 291 + <tspan x="7.700195" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">y</tspan> 292 + <tspan x="13.618164" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">n</tspan> 293 + <tspan x="19.956055" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">a</tspan> 294 + <tspan x="26.083984" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">m</tspan> 295 + <tspan x="35.825195" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">i</tspan> 296 + <tspan x="38.603516" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">c</tspan> 297 + <tspan x="44.101562" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 298 + <tspan x="47.280273" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">s</tspan> 299 + <tspan x="52.490234" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">t</tspan> 300 + <tspan x="56.411133" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">i</tspan> 301 + <tspan x="59.189453" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">f</tspan> 302 + <tspan x="62.709961" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">f</tspan> 303 + <tspan x="66.230469" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">n</tspan> 304 + <tspan x="72.568359" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">e</tspan> 305 + <tspan x="78.720703" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">s</tspan> 306 + <tspan x="83.930664" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">s</tspan> 307 + <tspan x="89.140625" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 308 + <tspan x="92.319336" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">p</tspan> 309 + <tspan x="98.666992" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">e</tspan> 310 + <tspan x="104.819336" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">r</tspan> 311 + <tspan x="108.930664" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 312 + <tspan x="112.109375" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">u</tspan> 313 + <tspan x="118.447266" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">n</tspan> 314 + <tspan x="124.785156" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">i</tspan> 315 + <tspan x="127.563477" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">t</tspan> 316 + <tspan x="131.484375" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 317 + <tspan x="134.663086" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">a</tspan> 318 + <tspan x="140.791016" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">r</tspan> 319 + <tspan x="144.902344" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">e</tspan> 320 + <tspan x="151.054688" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">a</tspan> 321 + <tspan x="157.182617" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 322 + <tspan x="168.233158" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 323 + <tspan x="171.411868" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">[</tspan> 324 + <tspan x="175.313236" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">M</tspan> 325 + <tspan x="183.941165" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">N</tspan> 326 + <tspan x="191.421634" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">/</tspan> 327 + <tspan x="194.790775" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">m</tspan> 328 + <tspan x="204.531986" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">³</tspan> 329 + <tspan x="208.540775" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">]</tspan> 330 + <tspan x="160.361328" y="-0.954375" style="font-style: oblique; font-size: 10px; font-family: 'DejaVu Sans'">s</tspan> 331 + <tspan x="166.035404" y="-5.084375" style="font-size: 7px; font-family: 'cmsy10'">0</tspan> 332 + </text> 333 + </g> 334 + </g> 335 + </g> 336 + <g id="matplotlib.axis_2"> 337 + <g id="ytick_1"> 338 + <g id="line2d_37"> 339 + <path d="M 47.289844 398.433438 340 + L 705.8875 398.433438 341 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 342 + </g> 343 + <g id="line2d_38"> 344 + <defs> 345 + <path id="mef640d9f3a" d="M 0 0 346 + L -3.5 0 347 + " style="stroke: #000000; stroke-width: 0.8"/> 348 + </defs> 349 + <g> 350 + <use xlink:href="#mef640d9f3a" x="47.289844" y="398.433438" style="stroke: #000000; stroke-width: 0.8"/> 351 + </g> 352 + </g> 353 + <g id="text_4"> 354 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end" x="40.289844" y="402.232266" transform="rotate(-0 40.289844 402.232266)">0</text> 355 + </g> 356 + </g> 357 + <g id="ytick_2"> 358 + <g id="line2d_39"> 359 + <path d="M 47.289844 328.396423 360 + L 705.8875 328.396423 361 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 362 + </g> 363 + <g id="line2d_40"> 364 + <g> 365 + <use xlink:href="#mef640d9f3a" x="47.289844" y="328.396423" style="stroke: #000000; stroke-width: 0.8"/> 366 + </g> 367 + </g> 368 + <g id="text_5"> 369 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end" x="40.289844" y="332.195252" transform="rotate(-0 40.289844 332.195252)">50</text> 370 + </g> 371 + </g> 372 + <g id="ytick_3"> 373 + <g id="line2d_41"> 374 + <path d="M 47.289844 258.359409 375 + L 705.8875 258.359409 376 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 377 + </g> 378 + <g id="line2d_42"> 379 + <g> 380 + <use xlink:href="#mef640d9f3a" x="47.289844" y="258.359409" style="stroke: #000000; stroke-width: 0.8"/> 381 + </g> 382 + </g> 383 + <g id="text_6"> 384 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end" x="40.289844" y="262.158237" transform="rotate(-0 40.289844 262.158237)">100</text> 385 + </g> 386 + </g> 387 + <g id="ytick_4"> 388 + <g id="line2d_43"> 389 + <path d="M 47.289844 188.322395 390 + L 705.8875 188.322395 391 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 392 + </g> 393 + <g id="line2d_44"> 394 + <g> 395 + <use xlink:href="#mef640d9f3a" x="47.289844" y="188.322395" style="stroke: #000000; stroke-width: 0.8"/> 396 + </g> 397 + </g> 398 + <g id="text_7"> 399 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end" x="40.289844" y="192.121223" transform="rotate(-0 40.289844 192.121223)">150</text> 400 + </g> 401 + </g> 402 + <g id="ytick_5"> 403 + <g id="line2d_45"> 404 + <path d="M 47.289844 118.285381 405 + L 705.8875 118.285381 406 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 407 + </g> 408 + <g id="line2d_46"> 409 + <g> 410 + <use xlink:href="#mef640d9f3a" x="47.289844" y="118.285381" style="stroke: #000000; stroke-width: 0.8"/> 411 + </g> 412 + </g> 413 + <g id="text_8"> 414 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end" x="40.289844" y="122.084209" transform="rotate(-0 40.289844 122.084209)">200</text> 415 + </g> 416 + </g> 417 + <g id="ytick_6"> 418 + <g id="line2d_47"> 419 + <path d="M 47.289844 48.248367 420 + L 705.8875 48.248367 421 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 422 + </g> 423 + <g id="line2d_48"> 424 + <g> 425 + <use xlink:href="#mef640d9f3a" x="47.289844" y="48.248367" style="stroke: #000000; stroke-width: 0.8"/> 426 + </g> 427 + </g> 428 + <g id="text_9"> 429 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end" x="40.289844" y="52.047195" transform="rotate(-0 40.289844 52.047195)">250</text> 430 + </g> 431 + </g> 432 + <g id="text_10"> 433 + <!-- Natural frequency $f_0$ [Hz] --> 434 + <g transform="translate(14.8 276.125781) rotate(-90)"> 435 + <text> 436 + <tspan x="0" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">N</tspan> 437 + <tspan x="7.480469" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">a</tspan> 438 + <tspan x="13.608398" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">t</tspan> 439 + <tspan x="17.529297" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">u</tspan> 440 + <tspan x="23.867188" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">r</tspan> 441 + <tspan x="27.978516" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">a</tspan> 442 + <tspan x="34.106445" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">l</tspan> 443 + <tspan x="36.884766" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 444 + <tspan x="40.063477" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">f</tspan> 445 + <tspan x="43.583984" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">r</tspan> 446 + <tspan x="47.695312" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">e</tspan> 447 + <tspan x="53.847656" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">q</tspan> 448 + <tspan x="60.195312" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">u</tspan> 449 + <tspan x="66.533203" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">e</tspan> 450 + <tspan x="72.685547" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">n</tspan> 451 + <tspan x="79.023438" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">c</tspan> 452 + <tspan x="84.521484" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">y</tspan> 453 + <tspan x="90.439453" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 454 + <tspan x="101.865723" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 455 + <tspan x="105.044434" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">[</tspan> 456 + <tspan x="108.945801" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">H</tspan> 457 + <tspan x="116.465332" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">z</tspan> 458 + <tspan x="121.714355" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">]</tspan> 459 + <tspan x="93.618164" y="-0.40625" style="font-style: oblique; font-size: 10px; font-family: 'DejaVu Sans'">f</tspan> 460 + <tspan x="97.138672" y="1.093745" style="font-size: 7px; font-family: 'DejaVu Sans'">0</tspan> 461 + </text> 462 + </g> 463 + </g> 464 + </g> 465 + <g id="line2d_49"> 466 + <path d="M 323.546468 398.433438 467 + L 323.546468 334.077721 468 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #e0e0e0"/> 469 + </g> 470 + <g id="line2d_50"> 471 + <path d="M 77.226101 334.077721 472 + L 323.546468 334.077721 473 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #e0e0e0"/> 474 + </g> 475 + <g id="line2d_51"> 476 + <path d="M 77.226101 348.583714 477 + L 97.250353 345.213591 478 + L 117.274605 341.615627 479 + L 137.298858 337.774422 480 + L 155.320685 334.095795 481 + L 173.342512 330.19408 482 + L 191.364339 326.055749 483 + L 209.386166 321.666451 484 + L 225.405567 317.541882 485 + L 241.424969 313.195706 486 + L 257.444371 308.616017 487 + L 273.463773 303.790268 488 + L 289.483175 298.70524 489 + L 303.500151 294.032216 490 + L 317.517128 289.140226 491 + L 331.534104 284.019009 492 + L 345.551081 278.657824 493 + L 359.568057 273.045426 494 + L 373.585034 267.170046 495 + L 387.602011 261.019359 496 + L 399.616562 255.518457 497 + L 411.631113 249.797347 498 + L 423.645665 243.847211 499 + L 435.660216 237.658882 500 + L 447.674767 231.222824 501 + L 459.689319 224.529121 502 + L 471.70387 217.567458 503 + L 483.718421 210.32711 504 + L 495.732973 202.796918 505 + L 507.747524 194.965281 506 + L 519.762075 186.820132 507 + L 529.774202 179.783979 508 + L 539.786328 172.513874 509 + L 549.798454 165.002037 510 + L 559.81058 157.240431 511 + L 569.822706 149.220752 512 + L 579.834832 140.934418 513 + L 589.846958 132.372563 514 + L 599.859084 123.526025 515 + L 609.87121 114.38534 516 + L 619.883337 104.940727 517 + L 629.895463 95.18208 518 + L 639.907589 85.098957 519 + L 649.919715 74.68057 520 + L 659.931841 63.915771 521 + L 669.943967 52.793042 522 + L 675.951243 45.942664 523 + L 675.951243 45.942664 524 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke: #d62728; stroke-width: 2.2; stroke-linecap: square"/> 525 + </g> 526 + <g id="line2d_52"> 527 + <path d="M 77.226101 369.652686 528 + L 103.257629 367.097964 529 + L 129.289157 364.316473 530 + L 153.318259 361.530288 531 + L 177.347362 358.516568 532 + L 199.37404 355.538264 533 + L 221.400717 352.337741 534 + L 243.427394 348.898418 535 + L 263.451647 345.54957 536 + L 283.475899 341.97432 537 + L 303.500151 338.157364 538 + L 321.521978 334.501961 539 + L 339.543805 330.624878 540 + L 357.565632 326.512672 541 + L 375.587459 322.151084 542 + L 391.606861 318.052554 543 + L 407.626263 313.733815 544 + L 423.645665 309.183038 545 + L 439.665066 304.387754 546 + L 455.684468 299.334828 547 + L 469.701445 294.691305 548 + L 483.718421 289.830198 549 + L 497.735398 284.741312 550 + L 511.752375 279.413972 551 + L 525.769351 273.837006 552 + L 539.786328 267.998717 553 + L 553.803304 261.886859 554 + L 565.817856 256.420685 555 + L 577.832407 250.735692 556 + L 589.846958 244.82312 557 + L 601.86151 238.673858 558 + L 613.876061 232.278431 559 + L 625.890612 225.626986 560 + L 637.905164 218.709273 561 + L 649.919715 211.514632 562 + L 661.934266 204.031979 563 + L 673.948818 196.249784 564 + L 675.951243 194.922794 565 + L 675.951243 194.922794 566 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke: #1f77b4; stroke-width: 2.2; stroke-linecap: square"/> 567 + </g> 568 + <g id="patch_3"> 569 + <path d="M 47.289844 398.433438 570 + L 47.289844 28.318125 571 + " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 572 + </g> 573 + <g id="patch_4"> 574 + <path d="M 705.8875 398.433438 575 + L 705.8875 28.318125 576 + " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 577 + </g> 578 + <g id="patch_5"> 579 + <path d="M 47.289844 398.433438 580 + L 705.8875 398.433438 581 + " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 582 + </g> 583 + <g id="patch_6"> 584 + <path d="M 47.289844 28.318125 585 + L 705.8875 28.318125 586 + " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 587 + </g> 588 + <g id="text_11"> 589 + <g id="patch_7"> 590 + <path d="M 483.447598 392.329978 591 + L 696.008535 392.329978 592 + Q 701.008535 392.329978 701.008535 387.329978 593 + L 701.008535 339.319041 594 + Q 701.008535 334.319041 696.008535 334.319041 595 + L 483.447598 334.319041 596 + Q 478.447598 334.319041 478.447598 339.319041 597 + L 478.447598 387.329978 598 + Q 478.447598 392.329978 483.447598 392.329978 599 + z 600 + " style="fill: #f0f2f5; stroke: #e0e0e0; stroke-linejoin: miter"/> 601 + </g> 602 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif" transform="translate(519.846035 347.918455)">f0 = (1/2pi) sqrt(s'/m') (Formula 2)</text> 603 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif" transform="translate(564.091348 359.921189)">s' = s't + s'a (clause 8.2)</text> 604 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif" transform="translate(526.71166 371.923923)">s't = 4 pi^2 m't fr^2 (Formula 4)</text> 605 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif" transform="translate(483.447598 383.926658)">s'a = p0/(d eps) ~ 111/d MN/m^3 (NOTE)</text> 606 + </g> 607 + <g id="text_12"> 608 + <text style="font-weight: 700; font-size: 12px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: middle" x="376.588672" y="16.318125" transform="rotate(-0 376.588672 16.318125)">EN 29052-1 Floating-Floor Resonance</text> 609 + </g> 610 + <g id="legend_1"> 611 + <g id="patch_8"> 612 + <path d="M 54.289844 81.320469 613 + L 254.019531 81.320469 614 + Q 256.019531 81.320469 256.019531 79.320469 615 + L 256.019531 35.318125 616 + Q 256.019531 33.318125 254.019531 33.318125 617 + L 54.289844 33.318125 618 + Q 52.289844 33.318125 52.289844 35.318125 619 + L 52.289844 79.320469 620 + Q 52.289844 81.320469 54.289844 81.320469 621 + z 622 + " style="fill: #ffffff; opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter"/> 623 + </g> 624 + <g id="line2d_53"> 625 + <path d="M 56.289844 41.416562 626 + L 66.289844 41.416562 627 + L 76.289844 41.416562 628 + " style="fill: none; stroke: #d62728; stroke-width: 2.2; stroke-linecap: square"/> 629 + </g> 630 + <g id="text_13"> 631 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: start" x="84.289844" y="44.916562" transform="rotate(-0 84.289844 44.916562)">m' = 40 kg/m^2</text> 632 + </g> 633 + <g id="line2d_54"> 634 + <path d="M 56.289844 56.417344 635 + L 66.289844 56.417344 636 + L 76.289844 56.417344 637 + " style="fill: none; stroke: #1f77b4; stroke-width: 2.2; stroke-linecap: square"/> 638 + </g> 639 + <g id="text_14"> 640 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: start" x="84.289844" y="59.917344" transform="rotate(-0 84.289844 59.917344)">m' = 120 kg/m^2</text> 641 + </g> 642 + <g id="PathCollection_1"> 643 + <defs> 644 + <path id="m221fa3c9a5" d="M 0 4.743416 645 + C 1.257969 4.743416 2.464584 4.24362 3.354102 3.354102 646 + C 4.24362 2.464584 4.743416 1.257969 4.743416 0 647 + C 4.743416 -1.257969 4.24362 -2.464584 3.354102 -3.354102 648 + C 2.464584 -4.24362 1.257969 -4.743416 0 -4.743416 649 + C -1.257969 -4.743416 -2.464584 -4.24362 -3.354102 -3.354102 650 + C -4.24362 -2.464584 -4.743416 -1.257969 -4.743416 0 651 + C -4.743416 1.257969 -4.24362 2.464584 -3.354102 3.354102 652 + C -2.464584 4.24362 -1.257969 4.743416 0 4.743416 653 + z 654 + " style="stroke: #2ca02c"/> 655 + </defs> 656 + <g> 657 + <use xlink:href="#m221fa3c9a5" x="66.289844" y="72.293125" style="fill: #2ca02c; stroke: #2ca02c"/> 658 + </g> 659 + </g> 660 + <g id="text_15"> 661 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: start" x="84.289844" y="74.918125" transform="rotate(-0 84.289844 74.918125)">design point (10 MN/m^3, 46 Hz)</text> 662 + </g> 663 + </g> 664 + <g id="PathCollection_2"> 665 + <g clip-path="url(#p2990b744a2)"> 666 + <use xlink:href="#m221fa3c9a5" x="323.546468" y="334.077721" style="fill: #2ca02c; stroke: #2ca02c"/> 667 + </g> 668 + </g> 669 + </g> 670 + </g> 671 + <defs> 672 + <clipPath id="p2990b744a2"> 673 + <rect x="47.289844" y="28.318125" width="658.597656" height="370.115313"/> 674 + </clipPath> 675 + </defs> 676 + </svg>
+676
.github/images/dynamic_stiffness_dark.svg
··· 1 + <?xml version="1.0" encoding="utf-8" standalone="no"?> 2 + <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 3 + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 + <svg xmlns:xlink="http://www.w3.org/1999/xlink" width="713.0875pt" height="438.938125pt" viewBox="0 0 713.0875 438.938125" xmlns="http://www.w3.org/2000/svg" version="1.1"> 5 + <metadata> 6 + <rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 7 + <cc:Work> 8 + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> 9 + <dc:format>image/svg+xml</dc:format> 10 + <dc:creator> 11 + <cc:Agent> 12 + <dc:title>Matplotlib v3.11.0, https://matplotlib.org/</dc:title> 13 + </cc:Agent> 14 + </dc:creator> 15 + </cc:Work> 16 + </rdf:RDF> 17 + </metadata> 18 + <defs> 19 + <style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style> 20 + </defs> 21 + <g id="figure_1"> 22 + <g id="patch_1"> 23 + <path d="M 0 438.938125 24 + L 713.0875 438.938125 25 + L 713.0875 0 26 + L 0 0 27 + z 28 + "/> 29 + </g> 30 + <g id="axes_1"> 31 + <g id="patch_2"> 32 + <path d="M 47.289844 398.433438 33 + L 705.8875 398.433438 34 + L 705.8875 28.318125 35 + L 47.289844 28.318125 36 + z 37 + "/> 38 + </g> 39 + <g id="matplotlib.axis_1"> 40 + <g id="xtick_1"> 41 + <g id="line2d_1"> 42 + <path d="M 323.546468 398.433438 43 + L 323.546468 28.318125 44 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 45 + </g> 46 + <g id="line2d_2"> 47 + <defs> 48 + <path id="m8d14ee1197" d="M 0 0 49 + L 0 3.5 50 + " style="stroke: #ffffff; stroke-width: 0.8"/> 51 + </defs> 52 + <g> 53 + <use xlink:href="#m8d14ee1197" x="323.546468" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 54 + </g> 55 + </g> 56 + <g id="text_1"> 57 + <!-- $\mathdefault{10^{1}}$ --> 58 + <g style="fill: #ffffff" transform="translate(314.746468 414.733438)"> 59 + <text> 60 + <tspan x="0" y="-0.762187" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">1</tspan> 61 + <tspan x="6.362305" y="-0.762187" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">0</tspan> 62 + <tspan x="12.820312" y="-4.892187" style="font-size: 7px; font-family: 'DejaVu Sans'; fill: #ffffff">1</tspan> 63 + </text> 64 + </g> 65 + </g> 66 + </g> 67 + <g id="xtick_2"> 68 + <g id="line2d_3"> 69 + <path d="M 675.951243 398.433438 70 + L 675.951243 28.318125 71 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 72 + </g> 73 + <g id="line2d_4"> 74 + <g> 75 + <use xlink:href="#m8d14ee1197" x="675.951243" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 76 + </g> 77 + </g> 78 + <g id="text_2"> 79 + <!-- $\mathdefault{10^{2}}$ --> 80 + <g style="fill: #ffffff" transform="translate(667.151243 414.833438)"> 81 + <text> 82 + <tspan x="0" y="-0.674688" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">1</tspan> 83 + <tspan x="6.362305" y="-0.674688" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">0</tspan> 84 + <tspan x="12.820312" y="-4.804688" style="font-size: 7px; font-family: 'DejaVu Sans'; fill: #ffffff">2</tspan> 85 + </text> 86 + </g> 87 + </g> 88 + </g> 89 + <g id="xtick_3"> 90 + <g id="line2d_5"> 91 + <path d="M 77.226101 398.433438 92 + L 77.226101 28.318125 93 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 94 + </g> 95 + <g id="line2d_6"> 96 + <defs> 97 + <path id="m1caa325441" d="M 0 0 98 + L 0 2 99 + " style="stroke: #ffffff; stroke-width: 0.6"/> 100 + </defs> 101 + <g> 102 + <use xlink:href="#m1caa325441" x="77.226101" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 103 + </g> 104 + </g> 105 + </g> 106 + <g id="xtick_4"> 107 + <g id="line2d_7"> 108 + <path d="M 139.281501 398.433438 109 + L 139.281501 28.318125 110 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 111 + </g> 112 + <g id="line2d_8"> 113 + <g> 114 + <use xlink:href="#m1caa325441" x="139.281501" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 115 + </g> 116 + </g> 117 + </g> 118 + <g id="xtick_5"> 119 + <g id="line2d_9"> 120 + <path d="M 183.310509 398.433438 121 + L 183.310509 28.318125 122 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 123 + </g> 124 + <g id="line2d_10"> 125 + <g> 126 + <use xlink:href="#m1caa325441" x="183.310509" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 127 + </g> 128 + </g> 129 + </g> 130 + <g id="xtick_6"> 131 + <g id="line2d_11"> 132 + <path d="M 217.46206 398.433438 133 + L 217.46206 28.318125 134 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 135 + </g> 136 + <g id="line2d_12"> 137 + <g> 138 + <use xlink:href="#m1caa325441" x="217.46206" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 139 + </g> 140 + </g> 141 + </g> 142 + <g id="xtick_7"> 143 + <g id="line2d_13"> 144 + <path d="M 245.365909 398.433438 145 + L 245.365909 28.318125 146 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 147 + </g> 148 + <g id="line2d_14"> 149 + <g> 150 + <use xlink:href="#m1caa325441" x="245.365909" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 151 + </g> 152 + </g> 153 + </g> 154 + <g id="xtick_8"> 155 + <g id="line2d_15"> 156 + <path d="M 268.958278 398.433438 157 + L 268.958278 28.318125 158 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 159 + </g> 160 + <g id="line2d_16"> 161 + <g> 162 + <use xlink:href="#m1caa325441" x="268.958278" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 163 + </g> 164 + </g> 165 + </g> 166 + <g id="xtick_9"> 167 + <g id="line2d_17"> 168 + <path d="M 289.394917 398.433438 169 + L 289.394917 28.318125 170 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 171 + </g> 172 + <g id="line2d_18"> 173 + <g> 174 + <use xlink:href="#m1caa325441" x="289.394917" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 175 + </g> 176 + </g> 177 + </g> 178 + <g id="xtick_10"> 179 + <g id="line2d_19"> 180 + <path d="M 307.42131 398.433438 181 + L 307.42131 28.318125 182 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 183 + </g> 184 + <g id="line2d_20"> 185 + <g> 186 + <use xlink:href="#m1caa325441" x="307.42131" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 187 + </g> 188 + </g> 189 + </g> 190 + <g id="xtick_11"> 191 + <g id="line2d_21"> 192 + <path d="M 429.630876 398.433438 193 + L 429.630876 28.318125 194 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 195 + </g> 196 + <g id="line2d_22"> 197 + <g> 198 + <use xlink:href="#m1caa325441" x="429.630876" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 199 + </g> 200 + </g> 201 + </g> 202 + <g id="xtick_12"> 203 + <g id="line2d_23"> 204 + <path d="M 491.686276 398.433438 205 + L 491.686276 28.318125 206 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 207 + </g> 208 + <g id="line2d_24"> 209 + <g> 210 + <use xlink:href="#m1caa325441" x="491.686276" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 211 + </g> 212 + </g> 213 + </g> 214 + <g id="xtick_13"> 215 + <g id="line2d_25"> 216 + <path d="M 535.715284 398.433438 217 + L 535.715284 28.318125 218 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 219 + </g> 220 + <g id="line2d_26"> 221 + <g> 222 + <use xlink:href="#m1caa325441" x="535.715284" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 223 + </g> 224 + </g> 225 + </g> 226 + <g id="xtick_14"> 227 + <g id="line2d_27"> 228 + <path d="M 569.866835 398.433438 229 + L 569.866835 28.318125 230 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 231 + </g> 232 + <g id="line2d_28"> 233 + <g> 234 + <use xlink:href="#m1caa325441" x="569.866835" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 235 + </g> 236 + </g> 237 + </g> 238 + <g id="xtick_15"> 239 + <g id="line2d_29"> 240 + <path d="M 597.770684 398.433438 241 + L 597.770684 28.318125 242 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 243 + </g> 244 + <g id="line2d_30"> 245 + <g> 246 + <use xlink:href="#m1caa325441" x="597.770684" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 247 + </g> 248 + </g> 249 + </g> 250 + <g id="xtick_16"> 251 + <g id="line2d_31"> 252 + <path d="M 621.363053 398.433438 253 + L 621.363053 28.318125 254 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 255 + </g> 256 + <g id="line2d_32"> 257 + <g> 258 + <use xlink:href="#m1caa325441" x="621.363053" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 259 + </g> 260 + </g> 261 + </g> 262 + <g id="xtick_17"> 263 + <g id="line2d_33"> 264 + <path d="M 641.799692 398.433438 265 + L 641.799692 28.318125 266 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 267 + </g> 268 + <g id="line2d_34"> 269 + <g> 270 + <use xlink:href="#m1caa325441" x="641.799692" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 271 + </g> 272 + </g> 273 + </g> 274 + <g id="xtick_18"> 275 + <g id="line2d_35"> 276 + <path d="M 659.826085 398.433438 277 + L 659.826085 28.318125 278 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 279 + </g> 280 + <g id="line2d_36"> 281 + <g> 282 + <use xlink:href="#m1caa325441" x="659.826085" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 283 + </g> 284 + </g> 285 + </g> 286 + <g id="text_3"> 287 + <!-- Dynamic stiffness per unit area $s'$ [MN/m³] --> 288 + <g style="fill: #ffffff" transform="translate(270.438672 429.335781)"> 289 + <text> 290 + <tspan x="0" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">D</tspan> 291 + <tspan x="7.700195" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">y</tspan> 292 + <tspan x="13.618164" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">n</tspan> 293 + <tspan x="19.956055" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 294 + <tspan x="26.083984" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">m</tspan> 295 + <tspan x="35.825195" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 296 + <tspan x="38.603516" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">c</tspan> 297 + <tspan x="44.101562" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 298 + <tspan x="47.280273" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 299 + <tspan x="52.490234" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">t</tspan> 300 + <tspan x="56.411133" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 301 + <tspan x="59.189453" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">f</tspan> 302 + <tspan x="62.709961" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">f</tspan> 303 + <tspan x="66.230469" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">n</tspan> 304 + <tspan x="72.568359" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">e</tspan> 305 + <tspan x="78.720703" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 306 + <tspan x="83.930664" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 307 + <tspan x="89.140625" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 308 + <tspan x="92.319336" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">p</tspan> 309 + <tspan x="98.666992" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">e</tspan> 310 + <tspan x="104.819336" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">r</tspan> 311 + <tspan x="108.930664" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 312 + <tspan x="112.109375" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">u</tspan> 313 + <tspan x="118.447266" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">n</tspan> 314 + <tspan x="124.785156" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 315 + <tspan x="127.563477" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">t</tspan> 316 + <tspan x="131.484375" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 317 + <tspan x="134.663086" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 318 + <tspan x="140.791016" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">r</tspan> 319 + <tspan x="144.902344" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">e</tspan> 320 + <tspan x="151.054688" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 321 + <tspan x="157.182617" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 322 + <tspan x="168.233158" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 323 + <tspan x="171.411868" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">[</tspan> 324 + <tspan x="175.313236" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">M</tspan> 325 + <tspan x="183.941165" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">N</tspan> 326 + <tspan x="191.421634" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">/</tspan> 327 + <tspan x="194.790775" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">m</tspan> 328 + <tspan x="204.531986" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">³</tspan> 329 + <tspan x="208.540775" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">]</tspan> 330 + <tspan x="160.361328" y="-0.954375" style="font-style: oblique; font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 331 + <tspan x="166.035404" y="-5.084375" style="font-size: 7px; font-family: 'cmsy10'; fill: #ffffff">0</tspan> 332 + </text> 333 + </g> 334 + </g> 335 + </g> 336 + <g id="matplotlib.axis_2"> 337 + <g id="ytick_1"> 338 + <g id="line2d_37"> 339 + <path d="M 47.289844 398.433438 340 + L 705.8875 398.433438 341 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 342 + </g> 343 + <g id="line2d_38"> 344 + <defs> 345 + <path id="m5e07181663" d="M 0 0 346 + L -3.5 0 347 + " style="stroke: #ffffff; stroke-width: 0.8"/> 348 + </defs> 349 + <g> 350 + <use xlink:href="#m5e07181663" x="47.289844" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 351 + </g> 352 + </g> 353 + <g id="text_4"> 354 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end; fill: #ffffff" x="40.289844" y="402.232266" transform="rotate(-0 40.289844 402.232266)">0</text> 355 + </g> 356 + </g> 357 + <g id="ytick_2"> 358 + <g id="line2d_39"> 359 + <path d="M 47.289844 328.396423 360 + L 705.8875 328.396423 361 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 362 + </g> 363 + <g id="line2d_40"> 364 + <g> 365 + <use xlink:href="#m5e07181663" x="47.289844" y="328.396423" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 366 + </g> 367 + </g> 368 + <g id="text_5"> 369 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end; fill: #ffffff" x="40.289844" y="332.195252" transform="rotate(-0 40.289844 332.195252)">50</text> 370 + </g> 371 + </g> 372 + <g id="ytick_3"> 373 + <g id="line2d_41"> 374 + <path d="M 47.289844 258.359409 375 + L 705.8875 258.359409 376 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 377 + </g> 378 + <g id="line2d_42"> 379 + <g> 380 + <use xlink:href="#m5e07181663" x="47.289844" y="258.359409" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 381 + </g> 382 + </g> 383 + <g id="text_6"> 384 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end; fill: #ffffff" x="40.289844" y="262.158237" transform="rotate(-0 40.289844 262.158237)">100</text> 385 + </g> 386 + </g> 387 + <g id="ytick_4"> 388 + <g id="line2d_43"> 389 + <path d="M 47.289844 188.322395 390 + L 705.8875 188.322395 391 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 392 + </g> 393 + <g id="line2d_44"> 394 + <g> 395 + <use xlink:href="#m5e07181663" x="47.289844" y="188.322395" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 396 + </g> 397 + </g> 398 + <g id="text_7"> 399 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end; fill: #ffffff" x="40.289844" y="192.121223" transform="rotate(-0 40.289844 192.121223)">150</text> 400 + </g> 401 + </g> 402 + <g id="ytick_5"> 403 + <g id="line2d_45"> 404 + <path d="M 47.289844 118.285381 405 + L 705.8875 118.285381 406 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 407 + </g> 408 + <g id="line2d_46"> 409 + <g> 410 + <use xlink:href="#m5e07181663" x="47.289844" y="118.285381" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 411 + </g> 412 + </g> 413 + <g id="text_8"> 414 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end; fill: #ffffff" x="40.289844" y="122.084209" transform="rotate(-0 40.289844 122.084209)">200</text> 415 + </g> 416 + </g> 417 + <g id="ytick_6"> 418 + <g id="line2d_47"> 419 + <path d="M 47.289844 48.248367 420 + L 705.8875 48.248367 421 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 422 + </g> 423 + <g id="line2d_48"> 424 + <g> 425 + <use xlink:href="#m5e07181663" x="47.289844" y="48.248367" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 426 + </g> 427 + </g> 428 + <g id="text_9"> 429 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end; fill: #ffffff" x="40.289844" y="52.047195" transform="rotate(-0 40.289844 52.047195)">250</text> 430 + </g> 431 + </g> 432 + <g id="text_10"> 433 + <!-- Natural frequency $f_0$ [Hz] --> 434 + <g style="fill: #ffffff" transform="translate(14.8 276.125781) rotate(-90)"> 435 + <text> 436 + <tspan x="0" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">N</tspan> 437 + <tspan x="7.480469" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 438 + <tspan x="13.608398" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">t</tspan> 439 + <tspan x="17.529297" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">u</tspan> 440 + <tspan x="23.867188" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">r</tspan> 441 + <tspan x="27.978516" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 442 + <tspan x="34.106445" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">l</tspan> 443 + <tspan x="36.884766" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 444 + <tspan x="40.063477" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">f</tspan> 445 + <tspan x="43.583984" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">r</tspan> 446 + <tspan x="47.695312" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">e</tspan> 447 + <tspan x="53.847656" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">q</tspan> 448 + <tspan x="60.195312" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">u</tspan> 449 + <tspan x="66.533203" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">e</tspan> 450 + <tspan x="72.685547" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">n</tspan> 451 + <tspan x="79.023438" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">c</tspan> 452 + <tspan x="84.521484" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">y</tspan> 453 + <tspan x="90.439453" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 454 + <tspan x="101.865723" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 455 + <tspan x="105.044434" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">[</tspan> 456 + <tspan x="108.945801" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">H</tspan> 457 + <tspan x="116.465332" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">z</tspan> 458 + <tspan x="121.714355" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">]</tspan> 459 + <tspan x="93.618164" y="-0.40625" style="font-style: oblique; font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">f</tspan> 460 + <tspan x="97.138672" y="1.093745" style="font-size: 7px; font-family: 'DejaVu Sans'; fill: #ffffff">0</tspan> 461 + </text> 462 + </g> 463 + </g> 464 + </g> 465 + <g id="line2d_49"> 466 + <path d="M 323.546468 398.433438 467 + L 323.546468 334.077721 468 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #555555"/> 469 + </g> 470 + <g id="line2d_50"> 471 + <path d="M 77.226101 334.077721 472 + L 323.546468 334.077721 473 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #555555"/> 474 + </g> 475 + <g id="line2d_51"> 476 + <path d="M 77.226101 348.583714 477 + L 97.250353 345.213591 478 + L 117.274605 341.615627 479 + L 137.298858 337.774422 480 + L 155.320685 334.095795 481 + L 173.342512 330.19408 482 + L 191.364339 326.055749 483 + L 209.386166 321.666451 484 + L 225.405567 317.541882 485 + L 241.424969 313.195706 486 + L 257.444371 308.616017 487 + L 273.463773 303.790268 488 + L 289.483175 298.70524 489 + L 303.500151 294.032216 490 + L 317.517128 289.140226 491 + L 331.534104 284.019009 492 + L 345.551081 278.657824 493 + L 359.568057 273.045426 494 + L 373.585034 267.170046 495 + L 387.602011 261.019359 496 + L 399.616562 255.518457 497 + L 411.631113 249.797347 498 + L 423.645665 243.847211 499 + L 435.660216 237.658882 500 + L 447.674767 231.222824 501 + L 459.689319 224.529121 502 + L 471.70387 217.567458 503 + L 483.718421 210.32711 504 + L 495.732973 202.796918 505 + L 507.747524 194.965281 506 + L 519.762075 186.820132 507 + L 529.774202 179.783979 508 + L 539.786328 172.513874 509 + L 549.798454 165.002037 510 + L 559.81058 157.240431 511 + L 569.822706 149.220752 512 + L 579.834832 140.934418 513 + L 589.846958 132.372563 514 + L 599.859084 123.526025 515 + L 609.87121 114.38534 516 + L 619.883337 104.940727 517 + L 629.895463 95.18208 518 + L 639.907589 85.098957 519 + L 649.919715 74.68057 520 + L 659.931841 63.915771 521 + L 669.943967 52.793042 522 + L 675.951243 45.942664 523 + L 675.951243 45.942664 524 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke: #d62728; stroke-width: 2.2; stroke-linecap: square"/> 525 + </g> 526 + <g id="line2d_52"> 527 + <path d="M 77.226101 369.652686 528 + L 103.257629 367.097964 529 + L 129.289157 364.316473 530 + L 153.318259 361.530288 531 + L 177.347362 358.516568 532 + L 199.37404 355.538264 533 + L 221.400717 352.337741 534 + L 243.427394 348.898418 535 + L 263.451647 345.54957 536 + L 283.475899 341.97432 537 + L 303.500151 338.157364 538 + L 321.521978 334.501961 539 + L 339.543805 330.624878 540 + L 357.565632 326.512672 541 + L 375.587459 322.151084 542 + L 391.606861 318.052554 543 + L 407.626263 313.733815 544 + L 423.645665 309.183038 545 + L 439.665066 304.387754 546 + L 455.684468 299.334828 547 + L 469.701445 294.691305 548 + L 483.718421 289.830198 549 + L 497.735398 284.741312 550 + L 511.752375 279.413972 551 + L 525.769351 273.837006 552 + L 539.786328 267.998717 553 + L 553.803304 261.886859 554 + L 565.817856 256.420685 555 + L 577.832407 250.735692 556 + L 589.846958 244.82312 557 + L 601.86151 238.673858 558 + L 613.876061 232.278431 559 + L 625.890612 225.626986 560 + L 637.905164 218.709273 561 + L 649.919715 211.514632 562 + L 661.934266 204.031979 563 + L 673.948818 196.249784 564 + L 675.951243 194.922794 565 + L 675.951243 194.922794 566 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke: #1f77b4; stroke-width: 2.2; stroke-linecap: square"/> 567 + </g> 568 + <g id="patch_3"> 569 + <path d="M 47.289844 398.433438 570 + L 47.289844 28.318125 571 + " style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 572 + </g> 573 + <g id="patch_4"> 574 + <path d="M 705.8875 398.433438 575 + L 705.8875 28.318125 576 + " style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 577 + </g> 578 + <g id="patch_5"> 579 + <path d="M 47.289844 398.433438 580 + L 705.8875 398.433438 581 + " style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 582 + </g> 583 + <g id="patch_6"> 584 + <path d="M 47.289844 28.318125 585 + L 705.8875 28.318125 586 + " style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 587 + </g> 588 + <g id="text_11"> 589 + <g id="patch_7"> 590 + <path d="M 483.447598 392.329978 591 + L 696.008535 392.329978 592 + Q 701.008535 392.329978 701.008535 387.329978 593 + L 701.008535 339.319041 594 + Q 701.008535 334.319041 696.008535 334.319041 595 + L 483.447598 334.319041 596 + Q 478.447598 334.319041 478.447598 339.319041 597 + L 478.447598 387.329978 598 + Q 478.447598 392.329978 483.447598 392.329978 599 + z 600 + " style="fill: #1c2128; stroke: #555555; stroke-linejoin: miter"/> 601 + </g> 602 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; fill: #ffffff" transform="translate(519.846035 347.918455)">f0 = (1/2pi) sqrt(s'/m') (Formula 2)</text> 603 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; fill: #ffffff" transform="translate(564.091348 359.921189)">s' = s't + s'a (clause 8.2)</text> 604 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; fill: #ffffff" transform="translate(526.71166 371.923923)">s't = 4 pi^2 m't fr^2 (Formula 4)</text> 605 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; fill: #ffffff" transform="translate(483.447598 383.926658)">s'a = p0/(d eps) ~ 111/d MN/m^3 (NOTE)</text> 606 + </g> 607 + <g id="text_12"> 608 + <text style="font-weight: 700; font-size: 12px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: middle; fill: #ffffff" x="376.588672" y="16.318125" transform="rotate(-0 376.588672 16.318125)">EN 29052-1 Floating-Floor Resonance</text> 609 + </g> 610 + <g id="legend_1"> 611 + <g id="patch_8"> 612 + <path d="M 54.289844 81.320469 613 + L 254.019531 81.320469 614 + Q 256.019531 81.320469 256.019531 79.320469 615 + L 256.019531 35.318125 616 + Q 256.019531 33.318125 254.019531 33.318125 617 + L 54.289844 33.318125 618 + Q 52.289844 33.318125 52.289844 35.318125 619 + L 52.289844 79.320469 620 + Q 52.289844 81.320469 54.289844 81.320469 621 + z 622 + " style="opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter"/> 623 + </g> 624 + <g id="line2d_53"> 625 + <path d="M 56.289844 41.416562 626 + L 66.289844 41.416562 627 + L 76.289844 41.416562 628 + " style="fill: none; stroke: #d62728; stroke-width: 2.2; stroke-linecap: square"/> 629 + </g> 630 + <g id="text_13"> 631 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: start; fill: #ffffff" x="84.289844" y="44.916562" transform="rotate(-0 84.289844 44.916562)">m' = 40 kg/m^2</text> 632 + </g> 633 + <g id="line2d_54"> 634 + <path d="M 56.289844 56.417344 635 + L 66.289844 56.417344 636 + L 76.289844 56.417344 637 + " style="fill: none; stroke: #1f77b4; stroke-width: 2.2; stroke-linecap: square"/> 638 + </g> 639 + <g id="text_14"> 640 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: start; fill: #ffffff" x="84.289844" y="59.917344" transform="rotate(-0 84.289844 59.917344)">m' = 120 kg/m^2</text> 641 + </g> 642 + <g id="PathCollection_1"> 643 + <defs> 644 + <path id="m221fa3c9a5" d="M 0 4.743416 645 + C 1.257969 4.743416 2.464584 4.24362 3.354102 3.354102 646 + C 4.24362 2.464584 4.743416 1.257969 4.743416 0 647 + C 4.743416 -1.257969 4.24362 -2.464584 3.354102 -3.354102 648 + C 2.464584 -4.24362 1.257969 -4.743416 0 -4.743416 649 + C -1.257969 -4.743416 -2.464584 -4.24362 -3.354102 -3.354102 650 + C -4.24362 -2.464584 -4.743416 -1.257969 -4.743416 0 651 + C -4.743416 1.257969 -4.24362 2.464584 -3.354102 3.354102 652 + C -2.464584 4.24362 -1.257969 4.743416 0 4.743416 653 + z 654 + " style="stroke: #2ca02c"/> 655 + </defs> 656 + <g> 657 + <use xlink:href="#m221fa3c9a5" x="66.289844" y="72.293125" style="fill: #2ca02c; stroke: #2ca02c"/> 658 + </g> 659 + </g> 660 + <g id="text_15"> 661 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: start; fill: #ffffff" x="84.289844" y="74.918125" transform="rotate(-0 84.289844 74.918125)">design point (10 MN/m^3, 46 Hz)</text> 662 + </g> 663 + </g> 664 + <g id="PathCollection_2"> 665 + <g clip-path="url(#p2990b744a2)"> 666 + <use xlink:href="#m221fa3c9a5" x="323.546468" y="334.077721" style="fill: #2ca02c; stroke: #2ca02c"/> 667 + </g> 668 + </g> 669 + </g> 670 + </g> 671 + <defs> 672 + <clipPath id="p2990b744a2"> 673 + <rect x="47.289844" y="28.318125" width="658.597656" height="370.115313"/> 674 + </clipPath> 675 + </defs> 676 + </svg>
+681
.github/images/dynamic_stiffness_es.svg
··· 1 + <?xml version="1.0" encoding="utf-8" standalone="no"?> 2 + <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 3 + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 + <svg xmlns:xlink="http://www.w3.org/1999/xlink" width="713.0875pt" height="438.938125pt" viewBox="0 0 713.0875 438.938125" xmlns="http://www.w3.org/2000/svg" version="1.1"> 5 + <metadata> 6 + <rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 7 + <cc:Work> 8 + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> 9 + <dc:format>image/svg+xml</dc:format> 10 + <dc:creator> 11 + <cc:Agent> 12 + <dc:title>Matplotlib v3.11.0, https://matplotlib.org/</dc:title> 13 + </cc:Agent> 14 + </dc:creator> 15 + </cc:Work> 16 + </rdf:RDF> 17 + </metadata> 18 + <defs> 19 + <style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style> 20 + </defs> 21 + <g id="figure_1"> 22 + <g id="patch_1"> 23 + <path d="M 0 438.938125 24 + L 713.0875 438.938125 25 + L 713.0875 0 26 + L 0 0 27 + z 28 + " style="fill: #ffffff"/> 29 + </g> 30 + <g id="axes_1"> 31 + <g id="patch_2"> 32 + <path d="M 47.289844 398.433438 33 + L 705.8875 398.433438 34 + L 705.8875 28.318125 35 + L 47.289844 28.318125 36 + z 37 + " style="fill: #ffffff"/> 38 + </g> 39 + <g id="matplotlib.axis_1"> 40 + <g id="xtick_1"> 41 + <g id="line2d_1"> 42 + <path d="M 323.546468 398.433438 43 + L 323.546468 28.318125 44 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 45 + </g> 46 + <g id="line2d_2"> 47 + <defs> 48 + <path id="m3d27035b55" d="M 0 0 49 + L 0 3.5 50 + " style="stroke: #000000; stroke-width: 0.8"/> 51 + </defs> 52 + <g> 53 + <use xlink:href="#m3d27035b55" x="323.546468" y="398.433438" style="stroke: #000000; stroke-width: 0.8"/> 54 + </g> 55 + </g> 56 + <g id="text_1"> 57 + <!-- $\mathdefault{10^{1}}$ --> 58 + <g transform="translate(314.746468 414.733438)"> 59 + <text> 60 + <tspan x="0" y="-0.762187" style="font-size: 10px; font-family: 'DejaVu Sans'">1</tspan> 61 + <tspan x="6.362305" y="-0.762187" style="font-size: 10px; font-family: 'DejaVu Sans'">0</tspan> 62 + <tspan x="12.820312" y="-4.892187" style="font-size: 7px; font-family: 'DejaVu Sans'">1</tspan> 63 + </text> 64 + </g> 65 + </g> 66 + </g> 67 + <g id="xtick_2"> 68 + <g id="line2d_3"> 69 + <path d="M 675.951243 398.433438 70 + L 675.951243 28.318125 71 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 72 + </g> 73 + <g id="line2d_4"> 74 + <g> 75 + <use xlink:href="#m3d27035b55" x="675.951243" y="398.433438" style="stroke: #000000; stroke-width: 0.8"/> 76 + </g> 77 + </g> 78 + <g id="text_2"> 79 + <!-- $\mathdefault{10^{2}}$ --> 80 + <g transform="translate(667.151243 414.833438)"> 81 + <text> 82 + <tspan x="0" y="-0.674688" style="font-size: 10px; font-family: 'DejaVu Sans'">1</tspan> 83 + <tspan x="6.362305" y="-0.674688" style="font-size: 10px; font-family: 'DejaVu Sans'">0</tspan> 84 + <tspan x="12.820312" y="-4.804688" style="font-size: 7px; font-family: 'DejaVu Sans'">2</tspan> 85 + </text> 86 + </g> 87 + </g> 88 + </g> 89 + <g id="xtick_3"> 90 + <g id="line2d_5"> 91 + <path d="M 77.226101 398.433438 92 + L 77.226101 28.318125 93 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 94 + </g> 95 + <g id="line2d_6"> 96 + <defs> 97 + <path id="md1b22fa4b4" d="M 0 0 98 + L 0 2 99 + " style="stroke: #000000; stroke-width: 0.6"/> 100 + </defs> 101 + <g> 102 + <use xlink:href="#md1b22fa4b4" x="77.226101" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 103 + </g> 104 + </g> 105 + </g> 106 + <g id="xtick_4"> 107 + <g id="line2d_7"> 108 + <path d="M 139.281501 398.433438 109 + L 139.281501 28.318125 110 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 111 + </g> 112 + <g id="line2d_8"> 113 + <g> 114 + <use xlink:href="#md1b22fa4b4" x="139.281501" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 115 + </g> 116 + </g> 117 + </g> 118 + <g id="xtick_5"> 119 + <g id="line2d_9"> 120 + <path d="M 183.310509 398.433438 121 + L 183.310509 28.318125 122 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 123 + </g> 124 + <g id="line2d_10"> 125 + <g> 126 + <use xlink:href="#md1b22fa4b4" x="183.310509" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 127 + </g> 128 + </g> 129 + </g> 130 + <g id="xtick_6"> 131 + <g id="line2d_11"> 132 + <path d="M 217.46206 398.433438 133 + L 217.46206 28.318125 134 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 135 + </g> 136 + <g id="line2d_12"> 137 + <g> 138 + <use xlink:href="#md1b22fa4b4" x="217.46206" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 139 + </g> 140 + </g> 141 + </g> 142 + <g id="xtick_7"> 143 + <g id="line2d_13"> 144 + <path d="M 245.365909 398.433438 145 + L 245.365909 28.318125 146 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 147 + </g> 148 + <g id="line2d_14"> 149 + <g> 150 + <use xlink:href="#md1b22fa4b4" x="245.365909" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 151 + </g> 152 + </g> 153 + </g> 154 + <g id="xtick_8"> 155 + <g id="line2d_15"> 156 + <path d="M 268.958278 398.433438 157 + L 268.958278 28.318125 158 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 159 + </g> 160 + <g id="line2d_16"> 161 + <g> 162 + <use xlink:href="#md1b22fa4b4" x="268.958278" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 163 + </g> 164 + </g> 165 + </g> 166 + <g id="xtick_9"> 167 + <g id="line2d_17"> 168 + <path d="M 289.394917 398.433438 169 + L 289.394917 28.318125 170 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 171 + </g> 172 + <g id="line2d_18"> 173 + <g> 174 + <use xlink:href="#md1b22fa4b4" x="289.394917" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 175 + </g> 176 + </g> 177 + </g> 178 + <g id="xtick_10"> 179 + <g id="line2d_19"> 180 + <path d="M 307.42131 398.433438 181 + L 307.42131 28.318125 182 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 183 + </g> 184 + <g id="line2d_20"> 185 + <g> 186 + <use xlink:href="#md1b22fa4b4" x="307.42131" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 187 + </g> 188 + </g> 189 + </g> 190 + <g id="xtick_11"> 191 + <g id="line2d_21"> 192 + <path d="M 429.630876 398.433438 193 + L 429.630876 28.318125 194 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 195 + </g> 196 + <g id="line2d_22"> 197 + <g> 198 + <use xlink:href="#md1b22fa4b4" x="429.630876" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 199 + </g> 200 + </g> 201 + </g> 202 + <g id="xtick_12"> 203 + <g id="line2d_23"> 204 + <path d="M 491.686276 398.433438 205 + L 491.686276 28.318125 206 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 207 + </g> 208 + <g id="line2d_24"> 209 + <g> 210 + <use xlink:href="#md1b22fa4b4" x="491.686276" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 211 + </g> 212 + </g> 213 + </g> 214 + <g id="xtick_13"> 215 + <g id="line2d_25"> 216 + <path d="M 535.715284 398.433438 217 + L 535.715284 28.318125 218 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 219 + </g> 220 + <g id="line2d_26"> 221 + <g> 222 + <use xlink:href="#md1b22fa4b4" x="535.715284" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 223 + </g> 224 + </g> 225 + </g> 226 + <g id="xtick_14"> 227 + <g id="line2d_27"> 228 + <path d="M 569.866835 398.433438 229 + L 569.866835 28.318125 230 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 231 + </g> 232 + <g id="line2d_28"> 233 + <g> 234 + <use xlink:href="#md1b22fa4b4" x="569.866835" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 235 + </g> 236 + </g> 237 + </g> 238 + <g id="xtick_15"> 239 + <g id="line2d_29"> 240 + <path d="M 597.770684 398.433438 241 + L 597.770684 28.318125 242 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 243 + </g> 244 + <g id="line2d_30"> 245 + <g> 246 + <use xlink:href="#md1b22fa4b4" x="597.770684" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 247 + </g> 248 + </g> 249 + </g> 250 + <g id="xtick_16"> 251 + <g id="line2d_31"> 252 + <path d="M 621.363053 398.433438 253 + L 621.363053 28.318125 254 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 255 + </g> 256 + <g id="line2d_32"> 257 + <g> 258 + <use xlink:href="#md1b22fa4b4" x="621.363053" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 259 + </g> 260 + </g> 261 + </g> 262 + <g id="xtick_17"> 263 + <g id="line2d_33"> 264 + <path d="M 641.799692 398.433438 265 + L 641.799692 28.318125 266 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 267 + </g> 268 + <g id="line2d_34"> 269 + <g> 270 + <use xlink:href="#md1b22fa4b4" x="641.799692" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 271 + </g> 272 + </g> 273 + </g> 274 + <g id="xtick_18"> 275 + <g id="line2d_35"> 276 + <path d="M 659.826085 398.433438 277 + L 659.826085 28.318125 278 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 279 + </g> 280 + <g id="line2d_36"> 281 + <g> 282 + <use xlink:href="#md1b22fa4b4" x="659.826085" y="398.433438" style="stroke: #000000; stroke-width: 0.6"/> 283 + </g> 284 + </g> 285 + </g> 286 + <g id="text_3"> 287 + <!-- Rigidez dinámica por unidad de área $s'$ [MN/m³] --> 288 + <g transform="translate(256.988672 429.335781)"> 289 + <text> 290 + <tspan x="0" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">R</tspan> 291 + <tspan x="6.948242" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">i</tspan> 292 + <tspan x="9.726562" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">g</tspan> 293 + <tspan x="16.074219" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">i</tspan> 294 + <tspan x="18.852539" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">d</tspan> 295 + <tspan x="25.200195" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">e</tspan> 296 + <tspan x="31.352539" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">z</tspan> 297 + <tspan x="36.601562" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 298 + <tspan x="39.780273" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">d</tspan> 299 + <tspan x="46.12793" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">i</tspan> 300 + <tspan x="48.90625" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">n</tspan> 301 + <tspan x="55.244141" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">á</tspan> 302 + <tspan x="61.37207" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">m</tspan> 303 + <tspan x="71.113281" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">i</tspan> 304 + <tspan x="73.891602" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">c</tspan> 305 + <tspan x="79.389648" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">a</tspan> 306 + <tspan x="85.517578" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 307 + <tspan x="88.696289" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">p</tspan> 308 + <tspan x="95.043945" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">o</tspan> 309 + <tspan x="101.162109" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">r</tspan> 310 + <tspan x="105.273438" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 311 + <tspan x="108.452148" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">u</tspan> 312 + <tspan x="114.790039" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">n</tspan> 313 + <tspan x="121.12793" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">i</tspan> 314 + <tspan x="123.90625" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">d</tspan> 315 + <tspan x="130.253906" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">a</tspan> 316 + <tspan x="136.381836" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">d</tspan> 317 + <tspan x="142.729492" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 318 + <tspan x="145.908203" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">d</tspan> 319 + <tspan x="152.255859" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">e</tspan> 320 + <tspan x="158.408203" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 321 + <tspan x="161.586914" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">á</tspan> 322 + <tspan x="167.714844" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">r</tspan> 323 + <tspan x="171.826172" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">e</tspan> 324 + <tspan x="177.978516" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">a</tspan> 325 + <tspan x="184.106445" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 326 + <tspan x="195.156986" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 327 + <tspan x="198.335697" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">[</tspan> 328 + <tspan x="202.237064" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">M</tspan> 329 + <tspan x="210.864993" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">N</tspan> 330 + <tspan x="218.345462" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">/</tspan> 331 + <tspan x="221.714603" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">m</tspan> 332 + <tspan x="231.455814" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">³</tspan> 333 + <tspan x="235.464603" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'">]</tspan> 334 + <tspan x="187.285156" y="-0.954375" style="font-style: oblique; font-size: 10px; font-family: 'DejaVu Sans'">s</tspan> 335 + <tspan x="192.959232" y="-5.084375" style="font-size: 7px; font-family: 'cmsy10'">0</tspan> 336 + </text> 337 + </g> 338 + </g> 339 + </g> 340 + <g id="matplotlib.axis_2"> 341 + <g id="ytick_1"> 342 + <g id="line2d_37"> 343 + <path d="M 47.289844 398.433438 344 + L 705.8875 398.433438 345 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 346 + </g> 347 + <g id="line2d_38"> 348 + <defs> 349 + <path id="mef640d9f3a" d="M 0 0 350 + L -3.5 0 351 + " style="stroke: #000000; stroke-width: 0.8"/> 352 + </defs> 353 + <g> 354 + <use xlink:href="#mef640d9f3a" x="47.289844" y="398.433438" style="stroke: #000000; stroke-width: 0.8"/> 355 + </g> 356 + </g> 357 + <g id="text_4"> 358 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end" x="40.289844" y="402.232266" transform="rotate(-0 40.289844 402.232266)">0</text> 359 + </g> 360 + </g> 361 + <g id="ytick_2"> 362 + <g id="line2d_39"> 363 + <path d="M 47.289844 328.396423 364 + L 705.8875 328.396423 365 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 366 + </g> 367 + <g id="line2d_40"> 368 + <g> 369 + <use xlink:href="#mef640d9f3a" x="47.289844" y="328.396423" style="stroke: #000000; stroke-width: 0.8"/> 370 + </g> 371 + </g> 372 + <g id="text_5"> 373 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end" x="40.289844" y="332.195252" transform="rotate(-0 40.289844 332.195252)">50</text> 374 + </g> 375 + </g> 376 + <g id="ytick_3"> 377 + <g id="line2d_41"> 378 + <path d="M 47.289844 258.359409 379 + L 705.8875 258.359409 380 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 381 + </g> 382 + <g id="line2d_42"> 383 + <g> 384 + <use xlink:href="#mef640d9f3a" x="47.289844" y="258.359409" style="stroke: #000000; stroke-width: 0.8"/> 385 + </g> 386 + </g> 387 + <g id="text_6"> 388 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end" x="40.289844" y="262.158237" transform="rotate(-0 40.289844 262.158237)">100</text> 389 + </g> 390 + </g> 391 + <g id="ytick_4"> 392 + <g id="line2d_43"> 393 + <path d="M 47.289844 188.322395 394 + L 705.8875 188.322395 395 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 396 + </g> 397 + <g id="line2d_44"> 398 + <g> 399 + <use xlink:href="#mef640d9f3a" x="47.289844" y="188.322395" style="stroke: #000000; stroke-width: 0.8"/> 400 + </g> 401 + </g> 402 + <g id="text_7"> 403 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end" x="40.289844" y="192.121223" transform="rotate(-0 40.289844 192.121223)">150</text> 404 + </g> 405 + </g> 406 + <g id="ytick_5"> 407 + <g id="line2d_45"> 408 + <path d="M 47.289844 118.285381 409 + L 705.8875 118.285381 410 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 411 + </g> 412 + <g id="line2d_46"> 413 + <g> 414 + <use xlink:href="#mef640d9f3a" x="47.289844" y="118.285381" style="stroke: #000000; stroke-width: 0.8"/> 415 + </g> 416 + </g> 417 + <g id="text_8"> 418 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end" x="40.289844" y="122.084209" transform="rotate(-0 40.289844 122.084209)">200</text> 419 + </g> 420 + </g> 421 + <g id="ytick_6"> 422 + <g id="line2d_47"> 423 + <path d="M 47.289844 48.248367 424 + L 705.8875 48.248367 425 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 426 + </g> 427 + <g id="line2d_48"> 428 + <g> 429 + <use xlink:href="#mef640d9f3a" x="47.289844" y="48.248367" style="stroke: #000000; stroke-width: 0.8"/> 430 + </g> 431 + </g> 432 + <g id="text_9"> 433 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end" x="40.289844" y="52.047195" transform="rotate(-0 40.289844 52.047195)">250</text> 434 + </g> 435 + </g> 436 + <g id="text_10"> 437 + <!-- Frecuencia natural $f_0$ [Hz] --> 438 + <g transform="translate(14.8 277.375781) rotate(-90)"> 439 + <text> 440 + <tspan x="0" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">F</tspan> 441 + <tspan x="5.751953" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">r</tspan> 442 + <tspan x="9.863281" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">e</tspan> 443 + <tspan x="16.015625" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">c</tspan> 444 + <tspan x="21.513672" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">u</tspan> 445 + <tspan x="27.851562" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">e</tspan> 446 + <tspan x="34.003906" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">n</tspan> 447 + <tspan x="40.341797" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">c</tspan> 448 + <tspan x="45.839844" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">i</tspan> 449 + <tspan x="48.618164" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">a</tspan> 450 + <tspan x="54.746094" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 451 + <tspan x="57.924805" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">n</tspan> 452 + <tspan x="64.262695" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">a</tspan> 453 + <tspan x="70.390625" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">t</tspan> 454 + <tspan x="74.311523" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">u</tspan> 455 + <tspan x="80.649414" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">r</tspan> 456 + <tspan x="84.760742" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">a</tspan> 457 + <tspan x="90.888672" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">l</tspan> 458 + <tspan x="93.666992" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 459 + <tspan x="105.093262" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'"> </tspan> 460 + <tspan x="108.271973" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">[</tspan> 461 + <tspan x="112.17334" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">H</tspan> 462 + <tspan x="119.692871" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">z</tspan> 463 + <tspan x="124.941895" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'">]</tspan> 464 + <tspan x="96.845703" y="-0.40625" style="font-style: oblique; font-size: 10px; font-family: 'DejaVu Sans'">f</tspan> 465 + <tspan x="100.366211" y="1.093745" style="font-size: 7px; font-family: 'DejaVu Sans'">0</tspan> 466 + </text> 467 + </g> 468 + </g> 469 + </g> 470 + <g id="line2d_49"> 471 + <path d="M 323.546468 398.433438 472 + L 323.546468 334.077721 473 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #e0e0e0"/> 474 + </g> 475 + <g id="line2d_50"> 476 + <path d="M 77.226101 334.077721 477 + L 323.546468 334.077721 478 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #e0e0e0"/> 479 + </g> 480 + <g id="line2d_51"> 481 + <path d="M 77.226101 348.583714 482 + L 97.250353 345.213591 483 + L 117.274605 341.615627 484 + L 137.298858 337.774422 485 + L 155.320685 334.095795 486 + L 173.342512 330.19408 487 + L 191.364339 326.055749 488 + L 209.386166 321.666451 489 + L 225.405567 317.541882 490 + L 241.424969 313.195706 491 + L 257.444371 308.616017 492 + L 273.463773 303.790268 493 + L 289.483175 298.70524 494 + L 303.500151 294.032216 495 + L 317.517128 289.140226 496 + L 331.534104 284.019009 497 + L 345.551081 278.657824 498 + L 359.568057 273.045426 499 + L 373.585034 267.170046 500 + L 387.602011 261.019359 501 + L 399.616562 255.518457 502 + L 411.631113 249.797347 503 + L 423.645665 243.847211 504 + L 435.660216 237.658882 505 + L 447.674767 231.222824 506 + L 459.689319 224.529121 507 + L 471.70387 217.567458 508 + L 483.718421 210.32711 509 + L 495.732973 202.796918 510 + L 507.747524 194.965281 511 + L 519.762075 186.820132 512 + L 529.774202 179.783979 513 + L 539.786328 172.513874 514 + L 549.798454 165.002037 515 + L 559.81058 157.240431 516 + L 569.822706 149.220752 517 + L 579.834832 140.934418 518 + L 589.846958 132.372563 519 + L 599.859084 123.526025 520 + L 609.87121 114.38534 521 + L 619.883337 104.940727 522 + L 629.895463 95.18208 523 + L 639.907589 85.098957 524 + L 649.919715 74.68057 525 + L 659.931841 63.915771 526 + L 669.943967 52.793042 527 + L 675.951243 45.942664 528 + L 675.951243 45.942664 529 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke: #d62728; stroke-width: 2.2; stroke-linecap: square"/> 530 + </g> 531 + <g id="line2d_52"> 532 + <path d="M 77.226101 369.652686 533 + L 103.257629 367.097964 534 + L 129.289157 364.316473 535 + L 153.318259 361.530288 536 + L 177.347362 358.516568 537 + L 199.37404 355.538264 538 + L 221.400717 352.337741 539 + L 243.427394 348.898418 540 + L 263.451647 345.54957 541 + L 283.475899 341.97432 542 + L 303.500151 338.157364 543 + L 321.521978 334.501961 544 + L 339.543805 330.624878 545 + L 357.565632 326.512672 546 + L 375.587459 322.151084 547 + L 391.606861 318.052554 548 + L 407.626263 313.733815 549 + L 423.645665 309.183038 550 + L 439.665066 304.387754 551 + L 455.684468 299.334828 552 + L 469.701445 294.691305 553 + L 483.718421 289.830198 554 + L 497.735398 284.741312 555 + L 511.752375 279.413972 556 + L 525.769351 273.837006 557 + L 539.786328 267.998717 558 + L 553.803304 261.886859 559 + L 565.817856 256.420685 560 + L 577.832407 250.735692 561 + L 589.846958 244.82312 562 + L 601.86151 238.673858 563 + L 613.876061 232.278431 564 + L 625.890612 225.626986 565 + L 637.905164 218.709273 566 + L 649.919715 211.514632 567 + L 661.934266 204.031979 568 + L 673.948818 196.249784 569 + L 675.951243 194.922794 570 + L 675.951243 194.922794 571 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke: #1f77b4; stroke-width: 2.2; stroke-linecap: square"/> 572 + </g> 573 + <g id="patch_3"> 574 + <path d="M 47.289844 398.433438 575 + L 47.289844 28.318125 576 + " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 577 + </g> 578 + <g id="patch_4"> 579 + <path d="M 705.8875 398.433438 580 + L 705.8875 28.318125 581 + " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 582 + </g> 583 + <g id="patch_5"> 584 + <path d="M 47.289844 398.433438 585 + L 705.8875 398.433438 586 + " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 587 + </g> 588 + <g id="patch_6"> 589 + <path d="M 47.289844 28.318125 590 + L 705.8875 28.318125 591 + " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 592 + </g> 593 + <g id="text_11"> 594 + <g id="patch_7"> 595 + <path d="M 483.447598 392.329978 596 + L 696.008535 392.329978 597 + Q 701.008535 392.329978 701.008535 387.329978 598 + L 701.008535 339.319041 599 + Q 701.008535 334.319041 696.008535 334.319041 600 + L 483.447598 334.319041 601 + Q 478.447598 334.319041 478.447598 339.319041 602 + L 478.447598 387.329978 603 + Q 478.447598 392.329978 483.447598 392.329978 604 + z 605 + " style="fill: #f0f2f5; stroke: #e0e0e0; stroke-linejoin: miter"/> 606 + </g> 607 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif" transform="translate(519.846035 347.918455)">f0 = (1/2pi) sqrt(s'/m') (Formula 2)</text> 608 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif" transform="translate(564.091348 359.921189)">s' = s't + s'a (clause 8,2)</text> 609 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif" transform="translate(526.71166 371.923923)">s't = 4 pi^2 m't fr^2 (Formula 4)</text> 610 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif" transform="translate(483.447598 383.926658)">s'a = p0/(d eps) ~ 111/d MN/m^3 (NOTE)</text> 611 + </g> 612 + <g id="text_12"> 613 + <text style="font-weight: 700; font-size: 12px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: middle" x="376.588672" y="16.318125" transform="rotate(-0 376.588672 16.318125)">Resonancia de suelo flotante EN 29052-1</text> 614 + </g> 615 + <g id="legend_1"> 616 + <g id="patch_8"> 617 + <path d="M 54.289844 81.320469 618 + L 254.019531 81.320469 619 + Q 256.019531 81.320469 256.019531 79.320469 620 + L 256.019531 35.318125 621 + Q 256.019531 33.318125 254.019531 33.318125 622 + L 54.289844 33.318125 623 + Q 52.289844 33.318125 52.289844 35.318125 624 + L 52.289844 79.320469 625 + Q 52.289844 81.320469 54.289844 81.320469 626 + z 627 + " style="fill: #ffffff; opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter"/> 628 + </g> 629 + <g id="line2d_53"> 630 + <path d="M 56.289844 41.416562 631 + L 66.289844 41.416562 632 + L 76.289844 41.416562 633 + " style="fill: none; stroke: #d62728; stroke-width: 2.2; stroke-linecap: square"/> 634 + </g> 635 + <g id="text_13"> 636 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: start" x="84.289844" y="44.916562" transform="rotate(-0 84.289844 44.916562)">m' = 40 kg/m^2</text> 637 + </g> 638 + <g id="line2d_54"> 639 + <path d="M 56.289844 56.417344 640 + L 66.289844 56.417344 641 + L 76.289844 56.417344 642 + " style="fill: none; stroke: #1f77b4; stroke-width: 2.2; stroke-linecap: square"/> 643 + </g> 644 + <g id="text_14"> 645 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: start" x="84.289844" y="59.917344" transform="rotate(-0 84.289844 59.917344)">m' = 120 kg/m^2</text> 646 + </g> 647 + <g id="PathCollection_1"> 648 + <defs> 649 + <path id="m221fa3c9a5" d="M 0 4.743416 650 + C 1.257969 4.743416 2.464584 4.24362 3.354102 3.354102 651 + C 4.24362 2.464584 4.743416 1.257969 4.743416 0 652 + C 4.743416 -1.257969 4.24362 -2.464584 3.354102 -3.354102 653 + C 2.464584 -4.24362 1.257969 -4.743416 0 -4.743416 654 + C -1.257969 -4.743416 -2.464584 -4.24362 -3.354102 -3.354102 655 + C -4.24362 -2.464584 -4.743416 -1.257969 -4.743416 0 656 + C -4.743416 1.257969 -4.24362 2.464584 -3.354102 3.354102 657 + C -2.464584 4.24362 -1.257969 4.743416 0 4.743416 658 + z 659 + " style="stroke: #2ca02c"/> 660 + </defs> 661 + <g> 662 + <use xlink:href="#m221fa3c9a5" x="66.289844" y="72.293125" style="fill: #2ca02c; stroke: #2ca02c"/> 663 + </g> 664 + </g> 665 + <g id="text_15"> 666 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: start" x="84.289844" y="74.918125" transform="rotate(-0 84.289844 74.918125)">design point (10 MN/m^3, 46 Hz)</text> 667 + </g> 668 + </g> 669 + <g id="PathCollection_2"> 670 + <g clip-path="url(#p2990b744a2)"> 671 + <use xlink:href="#m221fa3c9a5" x="323.546468" y="334.077721" style="fill: #2ca02c; stroke: #2ca02c"/> 672 + </g> 673 + </g> 674 + </g> 675 + </g> 676 + <defs> 677 + <clipPath id="p2990b744a2"> 678 + <rect x="47.289844" y="28.318125" width="658.597656" height="370.115313"/> 679 + </clipPath> 680 + </defs> 681 + </svg>
+681
.github/images/dynamic_stiffness_es_dark.svg
··· 1 + <?xml version="1.0" encoding="utf-8" standalone="no"?> 2 + <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 3 + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 + <svg xmlns:xlink="http://www.w3.org/1999/xlink" width="713.0875pt" height="438.938125pt" viewBox="0 0 713.0875 438.938125" xmlns="http://www.w3.org/2000/svg" version="1.1"> 5 + <metadata> 6 + <rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 7 + <cc:Work> 8 + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> 9 + <dc:format>image/svg+xml</dc:format> 10 + <dc:creator> 11 + <cc:Agent> 12 + <dc:title>Matplotlib v3.11.0, https://matplotlib.org/</dc:title> 13 + </cc:Agent> 14 + </dc:creator> 15 + </cc:Work> 16 + </rdf:RDF> 17 + </metadata> 18 + <defs> 19 + <style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style> 20 + </defs> 21 + <g id="figure_1"> 22 + <g id="patch_1"> 23 + <path d="M 0 438.938125 24 + L 713.0875 438.938125 25 + L 713.0875 0 26 + L 0 0 27 + z 28 + "/> 29 + </g> 30 + <g id="axes_1"> 31 + <g id="patch_2"> 32 + <path d="M 47.289844 398.433438 33 + L 705.8875 398.433438 34 + L 705.8875 28.318125 35 + L 47.289844 28.318125 36 + z 37 + "/> 38 + </g> 39 + <g id="matplotlib.axis_1"> 40 + <g id="xtick_1"> 41 + <g id="line2d_1"> 42 + <path d="M 323.546468 398.433438 43 + L 323.546468 28.318125 44 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 45 + </g> 46 + <g id="line2d_2"> 47 + <defs> 48 + <path id="m8d14ee1197" d="M 0 0 49 + L 0 3.5 50 + " style="stroke: #ffffff; stroke-width: 0.8"/> 51 + </defs> 52 + <g> 53 + <use xlink:href="#m8d14ee1197" x="323.546468" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 54 + </g> 55 + </g> 56 + <g id="text_1"> 57 + <!-- $\mathdefault{10^{1}}$ --> 58 + <g style="fill: #ffffff" transform="translate(314.746468 414.733438)"> 59 + <text> 60 + <tspan x="0" y="-0.762187" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">1</tspan> 61 + <tspan x="6.362305" y="-0.762187" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">0</tspan> 62 + <tspan x="12.820312" y="-4.892187" style="font-size: 7px; font-family: 'DejaVu Sans'; fill: #ffffff">1</tspan> 63 + </text> 64 + </g> 65 + </g> 66 + </g> 67 + <g id="xtick_2"> 68 + <g id="line2d_3"> 69 + <path d="M 675.951243 398.433438 70 + L 675.951243 28.318125 71 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 72 + </g> 73 + <g id="line2d_4"> 74 + <g> 75 + <use xlink:href="#m8d14ee1197" x="675.951243" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 76 + </g> 77 + </g> 78 + <g id="text_2"> 79 + <!-- $\mathdefault{10^{2}}$ --> 80 + <g style="fill: #ffffff" transform="translate(667.151243 414.833438)"> 81 + <text> 82 + <tspan x="0" y="-0.674688" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">1</tspan> 83 + <tspan x="6.362305" y="-0.674688" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">0</tspan> 84 + <tspan x="12.820312" y="-4.804688" style="font-size: 7px; font-family: 'DejaVu Sans'; fill: #ffffff">2</tspan> 85 + </text> 86 + </g> 87 + </g> 88 + </g> 89 + <g id="xtick_3"> 90 + <g id="line2d_5"> 91 + <path d="M 77.226101 398.433438 92 + L 77.226101 28.318125 93 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 94 + </g> 95 + <g id="line2d_6"> 96 + <defs> 97 + <path id="m1caa325441" d="M 0 0 98 + L 0 2 99 + " style="stroke: #ffffff; stroke-width: 0.6"/> 100 + </defs> 101 + <g> 102 + <use xlink:href="#m1caa325441" x="77.226101" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 103 + </g> 104 + </g> 105 + </g> 106 + <g id="xtick_4"> 107 + <g id="line2d_7"> 108 + <path d="M 139.281501 398.433438 109 + L 139.281501 28.318125 110 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 111 + </g> 112 + <g id="line2d_8"> 113 + <g> 114 + <use xlink:href="#m1caa325441" x="139.281501" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 115 + </g> 116 + </g> 117 + </g> 118 + <g id="xtick_5"> 119 + <g id="line2d_9"> 120 + <path d="M 183.310509 398.433438 121 + L 183.310509 28.318125 122 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 123 + </g> 124 + <g id="line2d_10"> 125 + <g> 126 + <use xlink:href="#m1caa325441" x="183.310509" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 127 + </g> 128 + </g> 129 + </g> 130 + <g id="xtick_6"> 131 + <g id="line2d_11"> 132 + <path d="M 217.46206 398.433438 133 + L 217.46206 28.318125 134 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 135 + </g> 136 + <g id="line2d_12"> 137 + <g> 138 + <use xlink:href="#m1caa325441" x="217.46206" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 139 + </g> 140 + </g> 141 + </g> 142 + <g id="xtick_7"> 143 + <g id="line2d_13"> 144 + <path d="M 245.365909 398.433438 145 + L 245.365909 28.318125 146 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 147 + </g> 148 + <g id="line2d_14"> 149 + <g> 150 + <use xlink:href="#m1caa325441" x="245.365909" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 151 + </g> 152 + </g> 153 + </g> 154 + <g id="xtick_8"> 155 + <g id="line2d_15"> 156 + <path d="M 268.958278 398.433438 157 + L 268.958278 28.318125 158 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 159 + </g> 160 + <g id="line2d_16"> 161 + <g> 162 + <use xlink:href="#m1caa325441" x="268.958278" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 163 + </g> 164 + </g> 165 + </g> 166 + <g id="xtick_9"> 167 + <g id="line2d_17"> 168 + <path d="M 289.394917 398.433438 169 + L 289.394917 28.318125 170 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 171 + </g> 172 + <g id="line2d_18"> 173 + <g> 174 + <use xlink:href="#m1caa325441" x="289.394917" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 175 + </g> 176 + </g> 177 + </g> 178 + <g id="xtick_10"> 179 + <g id="line2d_19"> 180 + <path d="M 307.42131 398.433438 181 + L 307.42131 28.318125 182 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 183 + </g> 184 + <g id="line2d_20"> 185 + <g> 186 + <use xlink:href="#m1caa325441" x="307.42131" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 187 + </g> 188 + </g> 189 + </g> 190 + <g id="xtick_11"> 191 + <g id="line2d_21"> 192 + <path d="M 429.630876 398.433438 193 + L 429.630876 28.318125 194 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 195 + </g> 196 + <g id="line2d_22"> 197 + <g> 198 + <use xlink:href="#m1caa325441" x="429.630876" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 199 + </g> 200 + </g> 201 + </g> 202 + <g id="xtick_12"> 203 + <g id="line2d_23"> 204 + <path d="M 491.686276 398.433438 205 + L 491.686276 28.318125 206 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 207 + </g> 208 + <g id="line2d_24"> 209 + <g> 210 + <use xlink:href="#m1caa325441" x="491.686276" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 211 + </g> 212 + </g> 213 + </g> 214 + <g id="xtick_13"> 215 + <g id="line2d_25"> 216 + <path d="M 535.715284 398.433438 217 + L 535.715284 28.318125 218 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 219 + </g> 220 + <g id="line2d_26"> 221 + <g> 222 + <use xlink:href="#m1caa325441" x="535.715284" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 223 + </g> 224 + </g> 225 + </g> 226 + <g id="xtick_14"> 227 + <g id="line2d_27"> 228 + <path d="M 569.866835 398.433438 229 + L 569.866835 28.318125 230 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 231 + </g> 232 + <g id="line2d_28"> 233 + <g> 234 + <use xlink:href="#m1caa325441" x="569.866835" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 235 + </g> 236 + </g> 237 + </g> 238 + <g id="xtick_15"> 239 + <g id="line2d_29"> 240 + <path d="M 597.770684 398.433438 241 + L 597.770684 28.318125 242 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 243 + </g> 244 + <g id="line2d_30"> 245 + <g> 246 + <use xlink:href="#m1caa325441" x="597.770684" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 247 + </g> 248 + </g> 249 + </g> 250 + <g id="xtick_16"> 251 + <g id="line2d_31"> 252 + <path d="M 621.363053 398.433438 253 + L 621.363053 28.318125 254 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 255 + </g> 256 + <g id="line2d_32"> 257 + <g> 258 + <use xlink:href="#m1caa325441" x="621.363053" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 259 + </g> 260 + </g> 261 + </g> 262 + <g id="xtick_17"> 263 + <g id="line2d_33"> 264 + <path d="M 641.799692 398.433438 265 + L 641.799692 28.318125 266 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 267 + </g> 268 + <g id="line2d_34"> 269 + <g> 270 + <use xlink:href="#m1caa325441" x="641.799692" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 271 + </g> 272 + </g> 273 + </g> 274 + <g id="xtick_18"> 275 + <g id="line2d_35"> 276 + <path d="M 659.826085 398.433438 277 + L 659.826085 28.318125 278 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 279 + </g> 280 + <g id="line2d_36"> 281 + <g> 282 + <use xlink:href="#m1caa325441" x="659.826085" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.6"/> 283 + </g> 284 + </g> 285 + </g> 286 + <g id="text_3"> 287 + <!-- Rigidez dinámica por unidad de área $s'$ [MN/m³] --> 288 + <g style="fill: #ffffff" transform="translate(256.988672 429.335781)"> 289 + <text> 290 + <tspan x="0" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">R</tspan> 291 + <tspan x="6.948242" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 292 + <tspan x="9.726562" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">g</tspan> 293 + <tspan x="16.074219" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 294 + <tspan x="18.852539" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">d</tspan> 295 + <tspan x="25.200195" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">e</tspan> 296 + <tspan x="31.352539" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">z</tspan> 297 + <tspan x="36.601562" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 298 + <tspan x="39.780273" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">d</tspan> 299 + <tspan x="46.12793" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 300 + <tspan x="48.90625" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">n</tspan> 301 + <tspan x="55.244141" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">á</tspan> 302 + <tspan x="61.37207" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">m</tspan> 303 + <tspan x="71.113281" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 304 + <tspan x="73.891602" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">c</tspan> 305 + <tspan x="79.389648" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 306 + <tspan x="85.517578" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 307 + <tspan x="88.696289" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">p</tspan> 308 + <tspan x="95.043945" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">o</tspan> 309 + <tspan x="101.162109" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">r</tspan> 310 + <tspan x="105.273438" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 311 + <tspan x="108.452148" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">u</tspan> 312 + <tspan x="114.790039" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">n</tspan> 313 + <tspan x="121.12793" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 314 + <tspan x="123.90625" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">d</tspan> 315 + <tspan x="130.253906" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 316 + <tspan x="136.381836" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">d</tspan> 317 + <tspan x="142.729492" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 318 + <tspan x="145.908203" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">d</tspan> 319 + <tspan x="152.255859" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">e</tspan> 320 + <tspan x="158.408203" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 321 + <tspan x="161.586914" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">á</tspan> 322 + <tspan x="167.714844" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">r</tspan> 323 + <tspan x="171.826172" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">e</tspan> 324 + <tspan x="177.978516" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 325 + <tspan x="184.106445" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 326 + <tspan x="195.156986" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 327 + <tspan x="198.335697" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">[</tspan> 328 + <tspan x="202.237064" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">M</tspan> 329 + <tspan x="210.864993" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">N</tspan> 330 + <tspan x="218.345462" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">/</tspan> 331 + <tspan x="221.714603" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">m</tspan> 332 + <tspan x="231.455814" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">³</tspan> 333 + <tspan x="235.464603" y="-0.954375" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">]</tspan> 334 + <tspan x="187.285156" y="-0.954375" style="font-style: oblique; font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 335 + <tspan x="192.959232" y="-5.084375" style="font-size: 7px; font-family: 'cmsy10'; fill: #ffffff">0</tspan> 336 + </text> 337 + </g> 338 + </g> 339 + </g> 340 + <g id="matplotlib.axis_2"> 341 + <g id="ytick_1"> 342 + <g id="line2d_37"> 343 + <path d="M 47.289844 398.433438 344 + L 705.8875 398.433438 345 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 346 + </g> 347 + <g id="line2d_38"> 348 + <defs> 349 + <path id="m5e07181663" d="M 0 0 350 + L -3.5 0 351 + " style="stroke: #ffffff; stroke-width: 0.8"/> 352 + </defs> 353 + <g> 354 + <use xlink:href="#m5e07181663" x="47.289844" y="398.433438" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 355 + </g> 356 + </g> 357 + <g id="text_4"> 358 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end; fill: #ffffff" x="40.289844" y="402.232266" transform="rotate(-0 40.289844 402.232266)">0</text> 359 + </g> 360 + </g> 361 + <g id="ytick_2"> 362 + <g id="line2d_39"> 363 + <path d="M 47.289844 328.396423 364 + L 705.8875 328.396423 365 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 366 + </g> 367 + <g id="line2d_40"> 368 + <g> 369 + <use xlink:href="#m5e07181663" x="47.289844" y="328.396423" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 370 + </g> 371 + </g> 372 + <g id="text_5"> 373 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end; fill: #ffffff" x="40.289844" y="332.195252" transform="rotate(-0 40.289844 332.195252)">50</text> 374 + </g> 375 + </g> 376 + <g id="ytick_3"> 377 + <g id="line2d_41"> 378 + <path d="M 47.289844 258.359409 379 + L 705.8875 258.359409 380 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 381 + </g> 382 + <g id="line2d_42"> 383 + <g> 384 + <use xlink:href="#m5e07181663" x="47.289844" y="258.359409" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 385 + </g> 386 + </g> 387 + <g id="text_6"> 388 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end; fill: #ffffff" x="40.289844" y="262.158237" transform="rotate(-0 40.289844 262.158237)">100</text> 389 + </g> 390 + </g> 391 + <g id="ytick_4"> 392 + <g id="line2d_43"> 393 + <path d="M 47.289844 188.322395 394 + L 705.8875 188.322395 395 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 396 + </g> 397 + <g id="line2d_44"> 398 + <g> 399 + <use xlink:href="#m5e07181663" x="47.289844" y="188.322395" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 400 + </g> 401 + </g> 402 + <g id="text_7"> 403 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end; fill: #ffffff" x="40.289844" y="192.121223" transform="rotate(-0 40.289844 192.121223)">150</text> 404 + </g> 405 + </g> 406 + <g id="ytick_5"> 407 + <g id="line2d_45"> 408 + <path d="M 47.289844 118.285381 409 + L 705.8875 118.285381 410 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 411 + </g> 412 + <g id="line2d_46"> 413 + <g> 414 + <use xlink:href="#m5e07181663" x="47.289844" y="118.285381" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 415 + </g> 416 + </g> 417 + <g id="text_8"> 418 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end; fill: #ffffff" x="40.289844" y="122.084209" transform="rotate(-0 40.289844 122.084209)">200</text> 419 + </g> 420 + </g> 421 + <g id="ytick_6"> 422 + <g id="line2d_47"> 423 + <path d="M 47.289844 48.248367 424 + L 705.8875 48.248367 425 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 426 + </g> 427 + <g id="line2d_48"> 428 + <g> 429 + <use xlink:href="#m5e07181663" x="47.289844" y="48.248367" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 430 + </g> 431 + </g> 432 + <g id="text_9"> 433 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: end; fill: #ffffff" x="40.289844" y="52.047195" transform="rotate(-0 40.289844 52.047195)">250</text> 434 + </g> 435 + </g> 436 + <g id="text_10"> 437 + <!-- Frecuencia natural $f_0$ [Hz] --> 438 + <g style="fill: #ffffff" transform="translate(14.8 277.375781) rotate(-90)"> 439 + <text> 440 + <tspan x="0" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">F</tspan> 441 + <tspan x="5.751953" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">r</tspan> 442 + <tspan x="9.863281" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">e</tspan> 443 + <tspan x="16.015625" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">c</tspan> 444 + <tspan x="21.513672" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">u</tspan> 445 + <tspan x="27.851562" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">e</tspan> 446 + <tspan x="34.003906" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">n</tspan> 447 + <tspan x="40.341797" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">c</tspan> 448 + <tspan x="45.839844" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 449 + <tspan x="48.618164" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 450 + <tspan x="54.746094" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 451 + <tspan x="57.924805" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">n</tspan> 452 + <tspan x="64.262695" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 453 + <tspan x="70.390625" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">t</tspan> 454 + <tspan x="74.311523" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">u</tspan> 455 + <tspan x="80.649414" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">r</tspan> 456 + <tspan x="84.760742" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 457 + <tspan x="90.888672" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">l</tspan> 458 + <tspan x="93.666992" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 459 + <tspan x="105.093262" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 460 + <tspan x="108.271973" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">[</tspan> 461 + <tspan x="112.17334" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">H</tspan> 462 + <tspan x="119.692871" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">z</tspan> 463 + <tspan x="124.941895" y="-0.40625" style="font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">]</tspan> 464 + <tspan x="96.845703" y="-0.40625" style="font-style: oblique; font-size: 10px; font-family: 'DejaVu Sans'; fill: #ffffff">f</tspan> 465 + <tspan x="100.366211" y="1.093745" style="font-size: 7px; font-family: 'DejaVu Sans'; fill: #ffffff">0</tspan> 466 + </text> 467 + </g> 468 + </g> 469 + </g> 470 + <g id="line2d_49"> 471 + <path d="M 323.546468 398.433438 472 + L 323.546468 334.077721 473 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #555555"/> 474 + </g> 475 + <g id="line2d_50"> 476 + <path d="M 77.226101 334.077721 477 + L 323.546468 334.077721 478 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #555555"/> 479 + </g> 480 + <g id="line2d_51"> 481 + <path d="M 77.226101 348.583714 482 + L 97.250353 345.213591 483 + L 117.274605 341.615627 484 + L 137.298858 337.774422 485 + L 155.320685 334.095795 486 + L 173.342512 330.19408 487 + L 191.364339 326.055749 488 + L 209.386166 321.666451 489 + L 225.405567 317.541882 490 + L 241.424969 313.195706 491 + L 257.444371 308.616017 492 + L 273.463773 303.790268 493 + L 289.483175 298.70524 494 + L 303.500151 294.032216 495 + L 317.517128 289.140226 496 + L 331.534104 284.019009 497 + L 345.551081 278.657824 498 + L 359.568057 273.045426 499 + L 373.585034 267.170046 500 + L 387.602011 261.019359 501 + L 399.616562 255.518457 502 + L 411.631113 249.797347 503 + L 423.645665 243.847211 504 + L 435.660216 237.658882 505 + L 447.674767 231.222824 506 + L 459.689319 224.529121 507 + L 471.70387 217.567458 508 + L 483.718421 210.32711 509 + L 495.732973 202.796918 510 + L 507.747524 194.965281 511 + L 519.762075 186.820132 512 + L 529.774202 179.783979 513 + L 539.786328 172.513874 514 + L 549.798454 165.002037 515 + L 559.81058 157.240431 516 + L 569.822706 149.220752 517 + L 579.834832 140.934418 518 + L 589.846958 132.372563 519 + L 599.859084 123.526025 520 + L 609.87121 114.38534 521 + L 619.883337 104.940727 522 + L 629.895463 95.18208 523 + L 639.907589 85.098957 524 + L 649.919715 74.68057 525 + L 659.931841 63.915771 526 + L 669.943967 52.793042 527 + L 675.951243 45.942664 528 + L 675.951243 45.942664 529 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke: #d62728; stroke-width: 2.2; stroke-linecap: square"/> 530 + </g> 531 + <g id="line2d_52"> 532 + <path d="M 77.226101 369.652686 533 + L 103.257629 367.097964 534 + L 129.289157 364.316473 535 + L 153.318259 361.530288 536 + L 177.347362 358.516568 537 + L 199.37404 355.538264 538 + L 221.400717 352.337741 539 + L 243.427394 348.898418 540 + L 263.451647 345.54957 541 + L 283.475899 341.97432 542 + L 303.500151 338.157364 543 + L 321.521978 334.501961 544 + L 339.543805 330.624878 545 + L 357.565632 326.512672 546 + L 375.587459 322.151084 547 + L 391.606861 318.052554 548 + L 407.626263 313.733815 549 + L 423.645665 309.183038 550 + L 439.665066 304.387754 551 + L 455.684468 299.334828 552 + L 469.701445 294.691305 553 + L 483.718421 289.830198 554 + L 497.735398 284.741312 555 + L 511.752375 279.413972 556 + L 525.769351 273.837006 557 + L 539.786328 267.998717 558 + L 553.803304 261.886859 559 + L 565.817856 256.420685 560 + L 577.832407 250.735692 561 + L 589.846958 244.82312 562 + L 601.86151 238.673858 563 + L 613.876061 232.278431 564 + L 625.890612 225.626986 565 + L 637.905164 218.709273 566 + L 649.919715 211.514632 567 + L 661.934266 204.031979 568 + L 673.948818 196.249784 569 + L 675.951243 194.922794 570 + L 675.951243 194.922794 571 + " clip-path="url(#p2990b744a2)" style="fill: none; stroke: #1f77b4; stroke-width: 2.2; stroke-linecap: square"/> 572 + </g> 573 + <g id="patch_3"> 574 + <path d="M 47.289844 398.433438 575 + L 47.289844 28.318125 576 + " style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 577 + </g> 578 + <g id="patch_4"> 579 + <path d="M 705.8875 398.433438 580 + L 705.8875 28.318125 581 + " style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 582 + </g> 583 + <g id="patch_5"> 584 + <path d="M 47.289844 398.433438 585 + L 705.8875 398.433438 586 + " style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 587 + </g> 588 + <g id="patch_6"> 589 + <path d="M 47.289844 28.318125 590 + L 705.8875 28.318125 591 + " style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 592 + </g> 593 + <g id="text_11"> 594 + <g id="patch_7"> 595 + <path d="M 483.447598 392.329978 596 + L 696.008535 392.329978 597 + Q 701.008535 392.329978 701.008535 387.329978 598 + L 701.008535 339.319041 599 + Q 701.008535 334.319041 696.008535 334.319041 600 + L 483.447598 334.319041 601 + Q 478.447598 334.319041 478.447598 339.319041 602 + L 478.447598 387.329978 603 + Q 478.447598 392.329978 483.447598 392.329978 604 + z 605 + " style="fill: #1c2128; stroke: #555555; stroke-linejoin: miter"/> 606 + </g> 607 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; fill: #ffffff" transform="translate(519.846035 347.918455)">f0 = (1/2pi) sqrt(s'/m') (Formula 2)</text> 608 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; fill: #ffffff" transform="translate(564.091348 359.921189)">s' = s't + s'a (clause 8,2)</text> 609 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; fill: #ffffff" transform="translate(526.71166 371.923923)">s't = 4 pi^2 m't fr^2 (Formula 4)</text> 610 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; fill: #ffffff" transform="translate(483.447598 383.926658)">s'a = p0/(d eps) ~ 111/d MN/m^3 (NOTE)</text> 611 + </g> 612 + <g id="text_12"> 613 + <text style="font-weight: 700; font-size: 12px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: middle; fill: #ffffff" x="376.588672" y="16.318125" transform="rotate(-0 376.588672 16.318125)">Resonancia de suelo flotante EN 29052-1</text> 614 + </g> 615 + <g id="legend_1"> 616 + <g id="patch_8"> 617 + <path d="M 54.289844 81.320469 618 + L 254.019531 81.320469 619 + Q 256.019531 81.320469 256.019531 79.320469 620 + L 256.019531 35.318125 621 + Q 256.019531 33.318125 254.019531 33.318125 622 + L 54.289844 33.318125 623 + Q 52.289844 33.318125 52.289844 35.318125 624 + L 52.289844 79.320469 625 + Q 52.289844 81.320469 54.289844 81.320469 626 + z 627 + " style="opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter"/> 628 + </g> 629 + <g id="line2d_53"> 630 + <path d="M 56.289844 41.416562 631 + L 66.289844 41.416562 632 + L 76.289844 41.416562 633 + " style="fill: none; stroke: #d62728; stroke-width: 2.2; stroke-linecap: square"/> 634 + </g> 635 + <g id="text_13"> 636 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: start; fill: #ffffff" x="84.289844" y="44.916562" transform="rotate(-0 84.289844 44.916562)">m' = 40 kg/m^2</text> 637 + </g> 638 + <g id="line2d_54"> 639 + <path d="M 56.289844 56.417344 640 + L 66.289844 56.417344 641 + L 76.289844 56.417344 642 + " style="fill: none; stroke: #1f77b4; stroke-width: 2.2; stroke-linecap: square"/> 643 + </g> 644 + <g id="text_14"> 645 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: start; fill: #ffffff" x="84.289844" y="59.917344" transform="rotate(-0 84.289844 59.917344)">m' = 120 kg/m^2</text> 646 + </g> 647 + <g id="PathCollection_1"> 648 + <defs> 649 + <path id="m221fa3c9a5" d="M 0 4.743416 650 + C 1.257969 4.743416 2.464584 4.24362 3.354102 3.354102 651 + C 4.24362 2.464584 4.743416 1.257969 4.743416 0 652 + C 4.743416 -1.257969 4.24362 -2.464584 3.354102 -3.354102 653 + C 2.464584 -4.24362 1.257969 -4.743416 0 -4.743416 654 + C -1.257969 -4.743416 -2.464584 -4.24362 -3.354102 -3.354102 655 + C -4.24362 -2.464584 -4.743416 -1.257969 -4.743416 0 656 + C -4.743416 1.257969 -4.24362 2.464584 -3.354102 3.354102 657 + C -2.464584 4.24362 -1.257969 4.743416 0 4.743416 658 + z 659 + " style="stroke: #2ca02c"/> 660 + </defs> 661 + <g> 662 + <use xlink:href="#m221fa3c9a5" x="66.289844" y="72.293125" style="fill: #2ca02c; stroke: #2ca02c"/> 663 + </g> 664 + </g> 665 + <g id="text_15"> 666 + <text style="font-size: 10px; font-family: 'DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', sans-serif; text-anchor: start; fill: #ffffff" x="84.289844" y="74.918125" transform="rotate(-0 84.289844 74.918125)">design point (10 MN/m^3, 46 Hz)</text> 667 + </g> 668 + </g> 669 + <g id="PathCollection_2"> 670 + <g clip-path="url(#p2990b744a2)"> 671 + <use xlink:href="#m221fa3c9a5" x="323.546468" y="334.077721" style="fill: #2ca02c; stroke: #2ca02c"/> 672 + </g> 673 + </g> 674 + </g> 675 + </g> 676 + <defs> 677 + <clipPath id="p2990b744a2"> 678 + <rect x="47.289844" y="28.318125" width="658.597656" height="370.115313"/> 679 + </clipPath> 680 + </defs> 681 + </svg>
+5 -2
docs/CONFORMANCE.md
··· 15 15 16 16 ## Numerical conformance report 17 17 18 - &#9989; **120/120 conformance checks pass** across 23 domains and 74 standards - filters class 1 - weightings within IEC 61672-1 class 1. 18 + &#9989; **123/123 conformance checks pass** across 23 domains and 75 standards - filters class 1 - weightings within IEC 61672-1 class 1. 19 19 20 20 ### Numerical validation - filters &amp; weightings 21 21 ··· 122 122 </details> 123 123 124 124 <details> 125 - <summary>&#9989; <b>Room &amp; building acoustics</b> — 100% (18/18)</summary> 125 + <summary>&#9989; <b>Room &amp; building acoustics</b> — 100% (21/21)</summary> 126 126 127 127 | Standard | Quantity | Expected (norm) | Computed | &#916; | Status | 128 128 |:---|:---|:---|:---|:---|:---:| ··· 144 144 | ISO 10848-1:2006 Formula (14) | Flanking Kij (simplified) matches closed form | Kij = 1.9897 dB | Kij = 1.9897 dB | exact | &#9989; | 145 145 | ISO 10848-1:2006 Formula (12) | Flanking equivalent absorption length aj at f_ref | aj = 1.2661 m | aj = 1.2661 m | exact | &#9989; | 146 146 | ISO 10848-1:2006 Clause 7.3.1 | Flanking total loss factor η = 2,2/(f·Ts) | η = 0.0044 | η = 0.0044 | exact | &#9989; | 147 + | EN 29052-1:1992 Formula 4 | Apparent dynamic stiffness s't = 4π²·m't·fr² (m't=200 kg/m², fr=25 Hz) | 4.934802 MN/m³ (+/-0.000001 MN/m³) | 4.934802 MN/m³ | 0 MN/m³ | &#9989; | 148 + | EN 29052-1:1992 clause 8.2 NOTE | Enclosed-gas stiffness s'a·d = 111 MN·mm/m³ (p₀=0,1 MPa, ε=0,9) | 5.55556 MN/m³ (+/-0.0001 MN/m³) | 5.55556 MN/m³ | 0 MN/m³ | &#9989; | 149 + | EN 29052-1:1992 Formula 2 | Floating-floor natural frequency f0 = (1/2π)√(s'/m') (s'=10 MN/m³, m'=100 kg/m²) | 50.32921 Hz (+/-0 Hz) | 50.32921 Hz | 0 Hz | &#9989; | 147 150 148 151 </details> 149 152
+1
docs/README.md
··· 25 25 - [Room Acoustics](room-acoustics.md) — impulse-response acquisition (ISO 18233), reverberation and room parameters (ISO 3382-1/2), open-plan speech metrics (ISO 3382-3), reverberation-room sound absorption (ISO 354) 26 26 - [Sound absorption in enclosed spaces](enclosed-space-absorption.md) — the EN 12354-6:2003 prediction of a room's total equivalent absorption area and reverberation time from its surfaces and objects (Clause 4) 27 27 - [Reverberation-time prediction](reverberation-prediction.md) — the reverberation time from a room's volume and surface absorption by five statistical models (Sabine, Eyring, Millington-Sette, Fitzroy, Arau-Puchades), with the air-absorption term 28 + - [Dynamic stiffness of resilient materials](dynamic-stiffness.md) — the EN 29052-1:1992 dynamic stiffness per unit area of floating-floor resilient layers from the load-plate resonance, and the floating-floor natural frequency 28 29 - [Room-noise criteria](room-noise.md) — the ANSI/ASA S12.2-2019 room-noise ratings: the NC tangency method (Table 1) and the RC Mark II rating with its rumble/hiss/neutral spectral tag (Annex D) 29 30 - [Acoustic Materials](materials.md) — sound-absorption rating α_w and classes (ISO 11654), airflow resistance static and alternating methods (ISO 9053-1/-2), and impedance-tube measurement of absorption, surface impedance and transmission loss (ISO 10534-1/-2, ASTM E2611) 30 31 - [Surface Scattering, Diffusion and In-situ Absorption](surface-scattering.md) — random-incidence scattering (ISO 17497-1), free-field diffusion coefficient (ISO 17497-2), and in-situ road-surface absorption by the extended-surface subtraction technique (ISO 13472-1) and the spot method (ISO 13472-2)
+7 -1
docs/api-reference.md
··· 269 269 | `mean_absorption` | `function` | **Area-weighted mean absorption ᾱ = ΣSᵢαᵢ / ΣSᵢ.**<br>• `surfaces`: (area, α) pairs | `mean_absorption([(90.0, 0.1), (10.0, 0.9)]) # 0.18` | 270 270 | `reverberation_time_models` | `function` | **All five RT models for a shoebox room, per band.**<br>• `dimensions` (Lx, Ly, Lz) [m]<br>• `absorptions`: (αx, αy, αz) wall-pair means (scalar or per band)<br>• `air_attenuation` [Np/m], `frequencies` [Hz], `speed_of_sound` | `res = reverberation_time_models((10,7,3.5), (ax, ay, az), frequencies=f)`<br><br>• `ReverberationModelResult` | 271 271 | `ReverberationModelResult` | `dataclass` | **Five-model RT comparison.**<br>• `frequencies` [Hz]<br>• `sabine`/`eyring`/`millington_sette`/`fitzroy`/`arau_puchades`: T per band [s]<br>• `volume` [m³], `surface_area` [m²]<br>• `.models`: dict keyed by name<br>• `.plot()` | `res.arau_puchades, res.models['Fitzroy']` | 272 + | `apparent_dynamic_stiffness` | `function` | **Apparent dynamic stiffness s't (EN 29052-1 Formula 4).**<br>• `resonant_frequency` fr [Hz] (scalar/array)<br>• `total_mass_per_area` m't [kg/m²]<br>s't = 4π²·m't·fr² [N/m³] | `apparent_dynamic_stiffness(25.0, 200.0) # 4.935e6 N/m³` | 273 + | `enclosed_gas_stiffness` | `function` | **Enclosed-gas dynamic stiffness s'a (EN 29052-1 Formula 7).**<br>• `thickness` d [m]<br>• `porosity` ε (0-1)<br>• `atmospheric_pressure` p₀ [Pa] (Default: 1e5 = 0,1 MPa)<br>s'a = p₀/(d·ε); NOTE ≈ 111/d MN/m³ (d in mm) | `enclosed_gas_stiffness(0.020, 0.9) # 5.56e6 N/m³` | 274 + | `installed_dynamic_stiffness` | `function` | **Installed s' by airflow resistivity (EN 29052-1 clause 8.2).**<br>• `apparent_stiffness` s't [N/m³]<br>• `airflow_resistivity` r [kPa·s/m²]<br>• `gas_stiffness` s'a [N/m³]<br>r≥100 → s't · 10≤r<100 → s't+s'a · r<10 → s't if s'a negligible else nan (warns) | `installed_dynamic_stiffness(20e6, 50.0, gas_stiffness=3e6) # 23e6` | 275 + | `natural_frequency` | `function` | **Floating-floor natural frequency f0 (EN 29052-1 Formula 2).**<br>• `dynamic_stiffness` s' [N/m³] (scalar/array)<br>• `mass_per_area` m' [kg/m²]<br>f0 = (1/2π)√(s'/m') | `natural_frequency(10e6, 120.0) # 45.9 Hz` | 276 + | `floating_floor_resonance` | `function` | **Full EN 29052-1 chain → result.**<br>• `resonant_frequency`, `total_mass_per_area`, `floor_mass_per_area`<br>• `airflow_resistivity` (Default: inf), `thickness`, `porosity`, `atmospheric_pressure` | `res = floating_floor_resonance(25.0, 200.0, 120.0)`<br><br>• `DynamicStiffnessResult` | 277 + | `DynamicStiffnessResult` | `dataclass` | **Dynamic-stiffness measurement result.**<br>• `apparent_stiffness`/`gas_stiffness`/`dynamic_stiffness` [N/m³]<br>• `resonant_frequency` [Hz], `floor_mass_per_area` [kg/m²]<br>• `natural_frequency` [Hz]<br>• `.plot()` | `res.dynamic_stiffness, res.natural_frequency` | 272 278 | `combine_uncertainty` | `function` | **GUM law of propagation of uncertainty (ISO/IEC Guide 98-3 clause 5).**<br>• `model`: measurement function f(x1…xN)<br>• `quantities`: input `Quantity` objects, in argument order<br>• `correlation`: optional N×N matrix r_ij (Default: None → uncorrelated) | `u = combine_uncertainty(lambda a, b: a*b, [Quantity(10.0, 0.1), Quantity(5.0, 0.2)])`<br><br>• `UncertaintyResult`; uc = 2.062 | 273 279 | `monte_carlo` | `function` | **Monte Carlo propagation (Guide 98-3-1, Supplement 1).**<br>• `model`: vectorised f(x1…xN)<br>• `quantities`: input `Quantity` objects<br>• `trials`: M (Default: 1000000)<br>• `coverage`: interval probability (Default: 0.95)<br>• `seed`: reproducibility (Default: None) | `mc = monte_carlo(model, quantities, seed=1)`<br><br>• `MonteCarloResult` (mean, u, coverage interval) | 274 280 | `rectangular` | `function` | **Type B quantity, rectangular PDF (GUM 4.3.7).**<br>• `value`, `half_width` a, `name` | `rectangular(20.0, 0.5)`<br><br>• `Quantity` with u = a/√3 = 0.289 | ··· 422 428 | `TonalityWarning` | `warning class` | **Tonality advisory.**<br>Emitted for biased tonality estimates (e.g. coarse FFT resolution) | `warnings.simplefilter('error', TonalityWarning)` | 423 429 | `STIWarning` | `warning class` | **STI/STIPA advisory.**<br>Emitted for suspect speech-intelligibility measurements or inputs | `warnings.simplefilter('error', STIWarning)` | 424 430 | `__version__` | `str` | **Package version string.**<br>(no parameters) | `phonometry.__version__ # '3.0.0'` | 425 - | `.plot()` | `method` | **One-line canonical figure on every result object (soft matplotlib dependency).**<br>Available on `ZwickerLoudness`, `MooreGlasbergLoudness`, `MooreGlasbergTimeVaryingLoudness`, `EcmaLoudness`, `EcmaTonality`, `EcmaRoughness`, `STIResult`, `SIIResult`, `NCResult`, `RCResult`, `AgeThresholdResult`, `NiptsResult`, `HtlanResult`, `ImpulseProminenceResult`, `MultipleShockResult`, `ImpulseResponseResult`, `DecayCurve`, `RoomAcousticsResult`, `ReverberationResult`, `ReverberationModelResult`, `WeightedRatingResult`, `ImpactRatingResult`, `FacadeInsulationResult`, `LabAirborneInsulationResult`, `LabImpactInsulationResult`, `SoundPowerResult`, `ReverberationSoundPowerResult`, `SoundPowerIntensityResult`, `PrecisionSoundPowerResult`, `PrecisionIntensityResult`, `IntensityResult`, `UncertaintyResult`, `AbsorptionRatingResult`, `ScatteringResult`, `DiffusionResult`, `InsituAbsorptionResult`, `WeightingResponse`, `WeightedSpectrum` and `DailyVibrationExposure`.<br>• `ax`: existing Axes, or None to build a fresh figure (Default: None)<br>• returns the Matplotlib `Axes` (an array of Axes for multi-panel figures); never calls `plt.show()`<br>• needs matplotlib (`pip install phonometry[plot]`) | `res.plot()`<br>`decay_curve(ir, fs).plot()` | 431 + | `.plot()` | `method` | **One-line canonical figure on every result object (soft matplotlib dependency).**<br>Available on `ZwickerLoudness`, `MooreGlasbergLoudness`, `MooreGlasbergTimeVaryingLoudness`, `EcmaLoudness`, `EcmaTonality`, `EcmaRoughness`, `STIResult`, `SIIResult`, `NCResult`, `RCResult`, `AgeThresholdResult`, `NiptsResult`, `HtlanResult`, `ImpulseProminenceResult`, `MultipleShockResult`, `ImpulseResponseResult`, `DecayCurve`, `RoomAcousticsResult`, `ReverberationResult`, `ReverberationModelResult`, `DynamicStiffnessResult`, `WeightedRatingResult`, `ImpactRatingResult`, `FacadeInsulationResult`, `LabAirborneInsulationResult`, `LabImpactInsulationResult`, `SoundPowerResult`, `ReverberationSoundPowerResult`, `SoundPowerIntensityResult`, `PrecisionSoundPowerResult`, `PrecisionIntensityResult`, `IntensityResult`, `UncertaintyResult`, `AbsorptionRatingResult`, `ScatteringResult`, `DiffusionResult`, `InsituAbsorptionResult`, `WeightingResponse`, `WeightedSpectrum` and `DailyVibrationExposure`.<br>• `ax`: existing Axes, or None to build a fresh figure (Default: None)<br>• returns the Matplotlib `Axes` (an array of Axes for multi-panel figures); never calls `plt.show()`<br>• needs matplotlib (`pip install phonometry[plot]`) | `res.plot()`<br>`decay_curve(ir, fs).plot()` | 426 432 427 433 ## Notes 428 434
+108
docs/dynamic-stiffness.md
··· 1 + ← [Documentation index](README.md) 2 + 3 + # Dynamic stiffness of resilient materials (EN 29052-1) 4 + 5 + A **floating floor** is a heavy floating slab resting on a resilient layer; the 6 + two form a mass-spring system whose **natural frequency** governs how much the 7 + floor improves impact and airborne insulation. **EN 29052-1:1992** (identical to 8 + ISO 9052-1:1989) measures the **dynamic stiffness per unit area** `s'` of the 9 + resilient layer from the resonance of a standard load plate on a 10 + 200 mm × 200 mm specimen. `s'` is the input to the floating-floor impact 11 + improvement (ISO 16251) covered in [Building acoustics](building-acoustics.md) 12 + and to the EN 12354-2 impact model. 13 + 14 + <picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/dynamic_stiffness_dark.svg"><img src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/dynamic_stiffness.svg" alt="Floating-floor natural frequency as a function of the resilient layer's dynamic stiffness per unit area, for a light 40 kg/m² and a heavy 120 kg/m² floating floor, on a logarithmic stiffness axis, with a worked design point at 10 MN/m³ marked" width="82%"></picture> 15 + 16 + ## 1. Dynamic stiffness and resonance 17 + 18 + The dynamic stiffness per unit area is a dynamic force per area divided by the 19 + resulting change in thickness (Formula 1): `s' = (F/S)/Δd`. The resiliently 20 + supported floor is a resonator whose natural frequency (Formula 2) and, 21 + in the laboratory arrangement, measured resonant frequency (Formula 3) are 22 + 23 + $$ 24 + f_0 = \frac{1}{2\pi}\sqrt{\frac{s'}{m'}}, \qquad 25 + f_r = \frac{1}{2\pi}\sqrt{\frac{s'_t}{m'_t}}, 26 + $$ 27 + 28 + so the **apparent** dynamic stiffness follows from the resonance (Formula 4): 29 + 30 + $$ 31 + s'_t = 4\pi^2\,m'_t\,f_r^2 . 32 + $$ 33 + 34 + ```python 35 + import phonometry as ph 36 + 37 + # Standard 8 kg load plate on the 0.04 m2 specimen -> m't = 200 kg/m2; 38 + # the fundamental resonance is measured at 25 Hz. 39 + s_t = ph.apparent_dynamic_stiffness(resonant_frequency=25.0, total_mass_per_area=200.0) 40 + print(round(s_t / 1e6, 3)) # 4.935 MN/m3 41 + 42 + # Installed on a 120 kg/m2 floating screed with s' = 10 MN/m3: 43 + print(round(ph.natural_frequency(10e6, 120.0), 1)) # 45.9 Hz 44 + ``` 45 + 46 + ## 2. The enclosed-gas term and airflow resistivity 47 + 48 + For an air-permeable material the enclosed pore air adds a parallel stiffness 49 + from its isothermal compression (Formula 7): `s'a = p₀/(d·ε)`, with `p₀` the 50 + atmospheric pressure, `d` the loaded thickness and `ε` the porosity. The 51 + standard's worked NOTE (`p₀ = 0.1 MPa`, `ε = 0.9`) is `s'a = 111/d` MN/m³ for 52 + `d` in millimetres: 53 + 54 + ```python 55 + import phonometry as ph 56 + 57 + print(round(ph.enclosed_gas_stiffness(thickness=0.020, porosity=0.9) / 1e6, 2)) 58 + # 5.56 MN/m3 (the NOTE's 111/20 = 5.55 MN/m3) 59 + ``` 60 + 61 + The dynamic stiffness of the *installed* material is then set by the lateral 62 + airflow resistivity `r` (clause 8.2): `s' = s't` for `r ≥ 100 kPa·s/m²`, 63 + `s' = s't + s'a` for `10 ≤ r < 100 kPa·s/m²`, and for `r < 10 kPa·s/m²` the 64 + method only resolves `s' = s't` when the gas term is negligible. `floating_floor_resonance` 65 + chains the whole determination: 66 + 67 + ```python 68 + import phonometry as ph 69 + 70 + res = ph.floating_floor_resonance( 71 + resonant_frequency=25.0, total_mass_per_area=200.0, 72 + floor_mass_per_area=120.0, 73 + airflow_resistivity=50.0, thickness=0.020, porosity=0.9, 74 + ) 75 + print(round(res.dynamic_stiffness / 1e6, 2), round(res.natural_frequency, 1)) 76 + # 10.49 47.1 77 + ``` 78 + 79 + <details> 80 + <summary>Show the code for this figure</summary> 81 + 82 + ```python 83 + import matplotlib.pyplot as plt 84 + import numpy as np 85 + import phonometry as ph 86 + 87 + s = np.logspace(np.log10(2.0), np.log10(100.0), 300) # MN/m3 88 + for m in (40.0, 120.0): 89 + plt.semilogx(s, ph.natural_frequency(s * 1e6, m), label=f"m' = {m:g} kg/m²") 90 + plt.xlabel("Dynamic stiffness s' [MN/m³]"); plt.ylabel("Natural frequency f₀ [Hz]") 91 + plt.legend(); plt.show() 92 + ``` 93 + 94 + </details> 95 + 96 + The `DynamicStiffnessResult` carries the apparent, enclosed-gas and installed 97 + stiffnesses, the test resonance and the installed-floor natural frequency, and 98 + its `.plot()` draws the `f₀(s')` design curve. 99 + 100 + --- 101 + 102 + **Standards.** EN 29052-1:1992 (= ISO 9052-1:1989), *Acoustics — Determination 103 + of dynamic stiffness — Part 1: Materials used under floating floors in 104 + dwellings* — the dynamic stiffness per unit area (Formula 1), the resonance 105 + relations (Formulae 2-4), the enclosed-gas term (Formula 7, clause 8.2 NOTE 106 + `s'a = 111/d` MN/m³) and the airflow-resistivity regimes (clause 8.2, Formulae 107 + 5-6). Conformance is anchored on the standard's own numeric NOTE plus 108 + hand-computed closed-form values of the resonance relations.
+34
scripts/conformance_report.py
··· 1236 1236 ) 1237 1237 1238 1238 1239 + # --- Dynamic stiffness of resilient materials (EN 29052-1:1992) --- 1240 + @register( 1241 + "Room & building acoustics", 1242 + "EN 29052-1:1992 Formula 4", 1243 + "Apparent dynamic stiffness s't = 4π²·m't·fr² (m't=200 kg/m², fr=25 Hz)", 1244 + ) 1245 + def _chk_en29052_apparent() -> Outcome: 1246 + computed = float(ph.apparent_dynamic_stiffness(25.0, 200.0)) / 1e6 1247 + expected = 4.0 * math.pi**2 * 200.0 * 25.0**2 / 1e6 1248 + return numeric(expected, computed, 1e-6, unit="MN/m³", places=6) 1249 + 1250 + 1251 + @register( 1252 + "Room & building acoustics", 1253 + "EN 29052-1:1992 clause 8.2 NOTE", 1254 + "Enclosed-gas stiffness s'a·d = 111 MN·mm/m³ (p₀=0,1 MPa, ε=0,9)", 1255 + ) 1256 + def _chk_en29052_enclosed_gas() -> Outcome: 1257 + # NOTE: s'a = 111/d MN/m3 for d in mm; the closed form gives 100/0,9 = 111.11. 1258 + sa_mn = float(ph.enclosed_gas_stiffness(0.020, 0.9)) / 1e6 # d = 20 mm 1259 + return numeric(111.111111 / 20.0, sa_mn, 1e-4, unit="MN/m³", places=5) 1260 + 1261 + 1262 + @register( 1263 + "Room & building acoustics", 1264 + "EN 29052-1:1992 Formula 2", 1265 + "Floating-floor natural frequency f0 = (1/2π)√(s'/m') (s'=10 MN/m³, m'=100 kg/m²)", 1266 + ) 1267 + def _chk_en29052_resonance() -> Outcome: 1268 + computed = float(ph.natural_frequency(10.0e6, 100.0)) 1269 + expected = math.sqrt(10.0e6 / 100.0) / (2.0 * math.pi) 1270 + return numeric(expected, computed, 1e-6, unit="Hz", places=5) 1271 + 1272 + 1239 1273 # =========================================================================== 1240 1274 # Domain 7 - Building prediction & uncertainty 1241 1275 # ===========================================================================
+54
scripts/generate_graphs.py
··· 206 206 # reverberation_models figure (Sabine / Eyring / Millington / Fitzroy / Arau) 207 207 "Reverberation-time prediction models": 208 208 "Modelos de predicción del tiempo de reverberación", 209 + # dynamic_stiffness figure (EN 29052-1) 210 + "EN 29052-1 Floating-Floor Resonance": 211 + "Resonancia de suelo flotante EN 29052-1", 212 + r"Dynamic stiffness per unit area $s'$ [MN/m³]": 213 + r"Rigidez dinámica por unidad de área $s'$ [MN/m³]", 214 + r"Natural frequency $f_0$ [Hz]": r"Frecuencia natural $f_0$ [Hz]", 215 + "design point": "punto de diseño", 209 216 # facade_prediction figure (EN 12354-3 Annex F) 210 217 "EN 12354-3 Façade Sound Insulation (Annex F example)": 211 218 "Aislamiento acústico de fachada EN 12354-3 (ejemplo del Anexo F)", ··· 3301 3308 plt.close() 3302 3309 3303 3310 3311 + def generate_dynamic_stiffness(output_dir: str) -> None: 3312 + """EN 29052-1 floating-floor natural frequency f0(s') for typical floors.""" 3313 + print("Generating dynamic_stiffness...") 3314 + from phonometry import natural_frequency 3315 + 3316 + s_mn = np.logspace(np.log10(2.0), np.log10(100.0), 300) # MN/m3 3317 + fig, ax = plt.subplots(figsize=(10, 6.2)) 3318 + # Two typical floating-floor masses per unit area (light vs heavy screed). 3319 + for m, color, label in ((40.0, COLOR_SECONDARY, "m' = 40 kg/m^2"), 3320 + (120.0, COLOR_PRIMARY, "m' = 120 kg/m^2")): 3321 + f0 = np.asarray(natural_frequency(s_mn * 1e6, m), dtype=float) 3322 + ax.plot(s_mn, f0, color=color, linewidth=2.2, label=label) 3323 + 3324 + # A worked design point: s' = 10 MN/m3 on the 120 kg/m2 floor. 3325 + s0, m0 = 10.0, 120.0 3326 + f00 = float(natural_frequency(s0 * 1e6, m0)) 3327 + ax.scatter([s0], [f00], color=COLOR_TERTIARY, s=90, zorder=6, 3328 + label=f"design point ({s0:g} MN/m^3, {f00:.0f} Hz)") 3329 + ax.plot([s0, s0], [0, f00], color=COLOR_GRID, ls=":", lw=1.0, zorder=1) 3330 + ax.plot([s_mn[0], s0], [f00, f00], color=COLOR_GRID, ls=":", lw=1.0, zorder=1) 3331 + 3332 + ax.set_xscale("log") 3333 + ax.set_xlabel(r"Dynamic stiffness per unit area $s'$ [MN/m³]") 3334 + ax.set_ylabel(r"Natural frequency $f_0$ [Hz]") 3335 + ax.set_title("EN 29052-1 Floating-Floor Resonance", fontweight="bold", pad=12) 3336 + ax.set_ylim(bottom=0.0) 3337 + ax.grid(which="both", color=COLOR_GRID, linestyle="--", alpha=0.5) 3338 + ax.set_axisbelow(True) 3339 + ax.legend(loc="upper left", fontsize=10) 3340 + 3341 + panel = "#f0f2f5" if COLOR_FG == "black" else "#1c2128" 3342 + info = [ 3343 + "f0 = (1/2pi) sqrt(s'/m') (Formula 2)", 3344 + "s' = s't + s'a (clause 8.2)", 3345 + "s't = 4 pi^2 m't fr^2 (Formula 4)", 3346 + "s'a = p0/(d eps) ~ 111/d MN/m^3 (NOTE)", 3347 + ] 3348 + ax.text(0.985, 0.03, "\n".join(info), transform=ax.transAxes, 3349 + va="bottom", ha="right", fontsize=10, color=COLOR_FG, 3350 + bbox={"boxstyle": "round,pad=0.5", "facecolor": panel, 3351 + "edgecolor": COLOR_GRID}) 3352 + plt.tight_layout() 3353 + save_figure(output_dir, "dynamic_stiffness.svg") 3354 + plt.close() 3355 + 3356 + 3304 3357 def generate_absorption_uncertainty(output_dir: str) -> None: 3305 3358 """ISO 12999-2 absorption-coefficient uncertainty: alpha_s with a +/-U ribbon.""" 3306 3359 print("Generating absorption_uncertainty...") ··· 4799 4852 generate_floor_covering_improvement(img_dir) 4800 4853 generate_flanking_transmission(img_dir) 4801 4854 generate_reverberation_models(img_dir) 4855 + generate_dynamic_stiffness(img_dir) 4802 4856 generate_absorption_uncertainty(img_dir) 4803 4857 generate_insulation_uncertainty_demo(img_dir) 4804 4858
+1 -1
site/astro.config.mjs
··· 337 337 { 338 338 label: 'Building acoustics & insulation', 339 339 translations: { es: 'Acústica de la edificación y aislamiento' }, 340 - items: ['guides/building-acoustics'], 340 + items: ['guides/building-acoustics', 'guides/dynamic-stiffness'], 341 341 }, 342 342 { 343 343 label: 'Environmental acoustics',
+112
site/src/content/docs/es/guides/dynamic-stiffness.md
··· 1 + --- 2 + title: "Rigidez dinámica de materiales resilientes (EN 29052-1)" 3 + description: "La determinación según EN 29052-1:1992 de la rigidez dinámica por unidad de área de materiales resilientes bajo suelos flotantes a partir de la resonancia de la placa de carga: la rigidez aparente de la Fórmula 4, el término del gas encerrado de la Fórmula 7, los regímenes por resistividad al flujo de la cláusula 8.2 y la frecuencia natural del suelo flotante de la Fórmula 2." 4 + --- 5 + 6 + Un **suelo flotante** es una losa pesada que descansa sobre una capa resiliente; 7 + ambos forman un sistema masa-resorte cuya **frecuencia natural** determina cuánto 8 + mejora el suelo el aislamiento a impacto y aéreo. **EN 29052-1:1992** (idéntica a 9 + ISO 9052-1:1989) mide la **rigidez dinámica por unidad de área** `s'` de la capa 10 + resiliente a partir de la resonancia de una placa de carga normalizada sobre una 11 + probeta de 200 mm × 200 mm. `s'` es la entrada a la mejora a impacto del suelo 12 + flotante (ISO 16251) tratada en 13 + [Acústica de la edificación](/phonometry/es/guides/building-acoustics/) y al 14 + modelo de impacto de EN 12354-2. 15 + 16 + <img class="light-only" src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/dynamic_stiffness_es.svg" alt="Frecuencia natural del suelo flotante frente a la rigidez dinámica por unidad de área de la capa resiliente para un suelo flotante ligero y uno pesado, con un punto de diseño" style="width:82%"><img class="dark-only" src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/dynamic_stiffness_es_dark.svg" alt="Frecuencia natural del suelo flotante frente a la rigidez dinámica por unidad de área de la capa resiliente para un suelo flotante ligero y uno pesado, con un punto de diseño" style="width:82%"> 17 + 18 + ## 1. Rigidez dinámica y resonancia 19 + 20 + La rigidez dinámica por unidad de área es una fuerza dinámica por área dividida 21 + entre el cambio de espesor resultante (Fórmula 1): `s' = (F/S)/Δd`. El suelo 22 + soportado resilientemente es un resonador cuya frecuencia natural (Fórmula 2) y, 23 + en la disposición de laboratorio, la frecuencia de resonancia medida (Fórmula 3) 24 + son 25 + 26 + $$ 27 + f_0 = \frac{1}{2\pi}\sqrt{\frac{s'}{m'}}, \qquad 28 + f_r = \frac{1}{2\pi}\sqrt{\frac{s'_t}{m'_t}}, 29 + $$ 30 + 31 + por lo que la rigidez dinámica **aparente** se obtiene de la resonancia 32 + (Fórmula 4): 33 + 34 + $$ 35 + s'_t = 4\pi^2\,m'_t\,f_r^2 . 36 + $$ 37 + 38 + ```python 39 + import phonometry as ph 40 + 41 + # Placa de carga normalizada de 8 kg sobre la probeta de 0,04 m2 -> m't = 200 kg/m2; 42 + # la resonancia fundamental se mide en 25 Hz. 43 + s_t = ph.apparent_dynamic_stiffness(resonant_frequency=25.0, total_mass_per_area=200.0) 44 + print(round(s_t / 1e6, 3)) # 4.935 MN/m3 45 + 46 + # Instalada sobre una losa flotante de 120 kg/m2 con s' = 10 MN/m3: 47 + print(round(ph.natural_frequency(10e6, 120.0), 1)) # 45.9 Hz 48 + ``` 49 + 50 + ## 2. El término del gas encerrado y la resistividad al flujo 51 + 52 + En un material permeable al aire, el aire de los poros añade una rigidez en 53 + paralelo por su compresión isoterma (Fórmula 7): `s'a = p₀/(d·ε)`, con `p₀` la 54 + presión atmosférica, `d` el espesor bajo carga y `ε` la porosidad. La NOTA 55 + resuelta de la norma (`p₀ = 0,1 MPa`, `ε = 0,9`) es `s'a = 111/d` MN/m³ con `d` 56 + en milímetros: 57 + 58 + ```python 59 + import phonometry as ph 60 + 61 + print(round(ph.enclosed_gas_stiffness(thickness=0.020, porosity=0.9) / 1e6, 2)) 62 + # 5.56 MN/m3 (los 111/20 = 5.55 MN/m3 de la NOTA) 63 + ``` 64 + 65 + La rigidez dinámica del material *instalado* la fija entonces la resistividad 66 + lateral al flujo `r` (cláusula 8.2): `s' = s't` para `r ≥ 100 kPa·s/m²`, 67 + `s' = s't + s'a` para `10 ≤ r < 100 kPa·s/m²`, y para `r < 10 kPa·s/m²` el método 68 + solo resuelve `s' = s't` cuando el término del gas es despreciable. 69 + `floating_floor_resonance` encadena toda la determinación: 70 + 71 + ```python 72 + import phonometry as ph 73 + 74 + res = ph.floating_floor_resonance( 75 + resonant_frequency=25.0, total_mass_per_area=200.0, 76 + floor_mass_per_area=120.0, 77 + airflow_resistivity=50.0, thickness=0.020, porosity=0.9, 78 + ) 79 + print(round(res.dynamic_stiffness / 1e6, 2), round(res.natural_frequency, 1)) 80 + # 10.49 47.1 81 + ``` 82 + 83 + <details> 84 + <summary>Mostrar el código de esta figura</summary> 85 + 86 + ```python 87 + import matplotlib.pyplot as plt 88 + import numpy as np 89 + import phonometry as ph 90 + 91 + s = np.logspace(np.log10(2.0), np.log10(100.0), 300) # MN/m3 92 + for m in (40.0, 120.0): 93 + plt.semilogx(s, ph.natural_frequency(s * 1e6, m), label=f"m' = {m:g} kg/m²") 94 + plt.xlabel("Rigidez dinámica s' [MN/m³]"); plt.ylabel("Frecuencia natural f₀ [Hz]") 95 + plt.legend(); plt.show() 96 + ``` 97 + 98 + </details> 99 + 100 + El `DynamicStiffnessResult` contiene las rigideces aparente, del gas encerrado e 101 + instalada, la resonancia del ensayo y la frecuencia natural del suelo instalado, 102 + y su `.plot()` dibuja la curva de diseño `f₀(s')`. 103 + 104 + --- 105 + 106 + **Normas.** EN 29052-1:1992 (= ISO 9052-1:1989), *Acoustics — Determination of 107 + dynamic stiffness — Part 1: Materials used under floating floors in dwellings*: 108 + la rigidez dinámica por unidad de área (Fórmula 1), las relaciones de resonancia 109 + (Fórmulas 2-4), el término del gas encerrado (Fórmula 7, NOTA de la cláusula 8.2 110 + `s'a = 111/d` MN/m³) y los regímenes por resistividad al flujo (Fórmulas 5-6). La 111 + conformidad se ancla en la NOTA numérica de la propia norma más valores en forma 112 + cerrada calculados a mano de las relaciones de resonancia.
+110
site/src/content/docs/guides/dynamic-stiffness.md
··· 1 + --- 2 + title: "Dynamic stiffness of resilient materials (EN 29052-1)" 3 + description: "The EN 29052-1:1992 determination of the dynamic stiffness per unit area of resilient materials under floating floors from the load-plate resonance: the apparent stiffness of Formula 4, the enclosed-gas term of Formula 7, the airflow-resistivity regimes of clause 8.2, and the floating-floor natural frequency of Formula 2." 4 + --- 5 + 6 + A **floating floor** is a heavy floating slab resting on a resilient layer; the 7 + two form a mass-spring system whose **natural frequency** governs how much the 8 + floor improves impact and airborne insulation. **EN 29052-1:1992** (identical to 9 + ISO 9052-1:1989) measures the **dynamic stiffness per unit area** `s'` of the 10 + resilient layer from the resonance of a standard load plate on a 11 + 200 mm × 200 mm specimen. `s'` is the input to the floating-floor impact 12 + improvement (ISO 16251) covered in 13 + [Building acoustics](/phonometry/guides/building-acoustics/) and to the 14 + EN 12354-2 impact model. 15 + 16 + <img class="light-only" src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/dynamic_stiffness.svg" alt="Floating-floor natural frequency versus the resilient layer's dynamic stiffness per unit area for a light and a heavy floating floor, with a worked design point" style="width:82%"><img class="dark-only" src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/dynamic_stiffness_dark.svg" alt="Floating-floor natural frequency versus the resilient layer's dynamic stiffness per unit area for a light and a heavy floating floor, with a worked design point" style="width:82%"> 17 + 18 + ## 1. Dynamic stiffness and resonance 19 + 20 + The dynamic stiffness per unit area is a dynamic force per area divided by the 21 + resulting change in thickness (Formula 1): `s' = (F/S)/Δd`. The resiliently 22 + supported floor is a resonator whose natural frequency (Formula 2) and, in the 23 + laboratory arrangement, measured resonant frequency (Formula 3) are 24 + 25 + $$ 26 + f_0 = \frac{1}{2\pi}\sqrt{\frac{s'}{m'}}, \qquad 27 + f_r = \frac{1}{2\pi}\sqrt{\frac{s'_t}{m'_t}}, 28 + $$ 29 + 30 + so the **apparent** dynamic stiffness follows from the resonance (Formula 4): 31 + 32 + $$ 33 + s'_t = 4\pi^2\,m'_t\,f_r^2 . 34 + $$ 35 + 36 + ```python 37 + import phonometry as ph 38 + 39 + # Standard 8 kg load plate on the 0.04 m2 specimen -> m't = 200 kg/m2; 40 + # the fundamental resonance is measured at 25 Hz. 41 + s_t = ph.apparent_dynamic_stiffness(resonant_frequency=25.0, total_mass_per_area=200.0) 42 + print(round(s_t / 1e6, 3)) # 4.935 MN/m3 43 + 44 + # Installed on a 120 kg/m2 floating screed with s' = 10 MN/m3: 45 + print(round(ph.natural_frequency(10e6, 120.0), 1)) # 45.9 Hz 46 + ``` 47 + 48 + ## 2. The enclosed-gas term and airflow resistivity 49 + 50 + For an air-permeable material the enclosed pore air adds a parallel stiffness 51 + from its isothermal compression (Formula 7): `s'a = p₀/(d·ε)`, with `p₀` the 52 + atmospheric pressure, `d` the loaded thickness and `ε` the porosity. The 53 + standard's worked NOTE (`p₀ = 0.1 MPa`, `ε = 0.9`) is `s'a = 111/d` MN/m³ for 54 + `d` in millimetres: 55 + 56 + ```python 57 + import phonometry as ph 58 + 59 + print(round(ph.enclosed_gas_stiffness(thickness=0.020, porosity=0.9) / 1e6, 2)) 60 + # 5.56 MN/m3 (the NOTE's 111/20 = 5.55 MN/m3) 61 + ``` 62 + 63 + The dynamic stiffness of the *installed* material is then set by the lateral 64 + airflow resistivity `r` (clause 8.2): `s' = s't` for `r ≥ 100 kPa·s/m²`, 65 + `s' = s't + s'a` for `10 ≤ r < 100 kPa·s/m²`, and for `r < 10 kPa·s/m²` the 66 + method only resolves `s' = s't` when the gas term is negligible. 67 + `floating_floor_resonance` chains the whole determination: 68 + 69 + ```python 70 + import phonometry as ph 71 + 72 + res = ph.floating_floor_resonance( 73 + resonant_frequency=25.0, total_mass_per_area=200.0, 74 + floor_mass_per_area=120.0, 75 + airflow_resistivity=50.0, thickness=0.020, porosity=0.9, 76 + ) 77 + print(round(res.dynamic_stiffness / 1e6, 2), round(res.natural_frequency, 1)) 78 + # 10.49 47.1 79 + ``` 80 + 81 + <details> 82 + <summary>Show the code for this figure</summary> 83 + 84 + ```python 85 + import matplotlib.pyplot as plt 86 + import numpy as np 87 + import phonometry as ph 88 + 89 + s = np.logspace(np.log10(2.0), np.log10(100.0), 300) # MN/m3 90 + for m in (40.0, 120.0): 91 + plt.semilogx(s, ph.natural_frequency(s * 1e6, m), label=f"m' = {m:g} kg/m²") 92 + plt.xlabel("Dynamic stiffness s' [MN/m³]"); plt.ylabel("Natural frequency f₀ [Hz]") 93 + plt.legend(); plt.show() 94 + ``` 95 + 96 + </details> 97 + 98 + The `DynamicStiffnessResult` carries the apparent, enclosed-gas and installed 99 + stiffnesses, the test resonance and the installed-floor natural frequency, and 100 + its `.plot()` draws the `f₀(s')` design curve. 101 + 102 + --- 103 + 104 + **Standards.** EN 29052-1:1992 (= ISO 9052-1:1989), *Acoustics — Determination 105 + of dynamic stiffness — Part 1: Materials used under floating floors in 106 + dwellings*: the dynamic stiffness per unit area (Formula 1), the resonance 107 + relations (Formulae 2-4), the enclosed-gas term (Formula 7, clause 8.2 NOTE 108 + `s'a = 111/d` MN/m³) and the airflow-resistivity regimes (Formulae 5-6). 109 + Conformance is anchored on the standard's own numeric NOTE plus hand-computed 110 + closed-form values of the resonance relations.
+16
src/phonometry/__init__.py
··· 97 97 reverberation_time_models, 98 98 sabine_reverberation_time, 99 99 ) 100 + from .dynamic_stiffness import ( 101 + DynamicStiffnessResult, 102 + DynamicStiffnessWarning, 103 + apparent_dynamic_stiffness, 104 + enclosed_gas_stiffness, 105 + floating_floor_resonance, 106 + installed_dynamic_stiffness, 107 + natural_frequency, 108 + ) 100 109 from .multiple_shock_vibration import ( 101 110 MultipleShockResult, 102 111 acceleration_dose, ··· 624 633 "arau_puchades_reverberation_time", 625 634 "reverberation_time_models", 626 635 "ReverberationModelResult", 636 + "apparent_dynamic_stiffness", 637 + "enclosed_gas_stiffness", 638 + "installed_dynamic_stiffness", 639 + "natural_frequency", 640 + "floating_floor_resonance", 641 + "DynamicStiffnessResult", 642 + "DynamicStiffnessWarning", 627 643 "combine_uncertainty", 628 644 "monte_carlo", 629 645 "rectangular",
+38
src/phonometry/_plotting.py
··· 40 40 from .flanking_transmission import VibrationReductionResult 41 41 from .floor_covering_improvement import FloorCoveringImprovementResult 42 42 from .reverberation_prediction import ReverberationModelResult 43 + from .dynamic_stiffness import DynamicStiffnessResult 43 44 from .impedance_tube import ImpedanceTubeResult 44 45 from .insulation import ( 45 46 AirborneInsulationResult, ··· 2006 2007 ) 2007 2008 ax.set_ylim(bottom=0.0) 2008 2009 ax.legend(loc="best", fontsize="small") 2010 + ax.grid(True, which="both", alpha=0.3) 2011 + return ax 2012 + 2013 + 2014 + def plot_dynamic_stiffness( 2015 + result: "DynamicStiffnessResult", ax: Axes | None = None, **kwargs: Any 2016 + ) -> Axes: 2017 + """Floating-floor natural frequency ``f0(s')`` with the design point marked. 2018 + 2019 + :param result: A 2020 + :class:`~phonometry.dynamic_stiffness.DynamicStiffnessResult`. 2021 + :param ax: Existing axes, or ``None`` to create a figure. 2022 + :param kwargs: Forwarded to the design-point ``scatter``. 2023 + :return: The axes. 2024 + """ 2025 + ax = ax if ax is not None else _new_axes() 2026 + m = result.floor_mass_per_area 2027 + s_mn = result.dynamic_stiffness / 1e6 2028 + grid = np.logspace(np.log10(max(s_mn * 0.2, 1e-2)), np.log10(s_mn * 5.0), 240) 2029 + f0 = np.sqrt(grid * 1e6 / m) / (2.0 * np.pi) 2030 + ax.plot(grid, f0, color=_C_PRIMARY, 2031 + label=rf"$f_0 = \frac{{1}}{{2\pi}}\sqrt{{s'/m'}}$, $m'$ = {m:g} kg/m²") 2032 + ax.axhline(result.natural_frequency, color=_C_MUTED, ls=":", lw=0.8) 2033 + ax.plot([s_mn, s_mn], [0.0, result.natural_frequency], color=_C_MUTED, ls=":", lw=0.8) 2034 + 2035 + kwargs.setdefault("color", _C_REFERENCE) 2036 + kwargs.setdefault("zorder", 5) 2037 + kwargs.setdefault("s", 80) 2038 + ax.scatter([s_mn], [result.natural_frequency], 2039 + label=f"$s'$ = {s_mn:.2f} MN/m³, $f_0$ = {result.natural_frequency:.1f} Hz", 2040 + **kwargs) 2041 + ax.set_xscale("log") 2042 + ax.set_xlabel("Dynamic stiffness per unit area $s'$ [MN/m³]") 2043 + ax.set_ylabel("Natural frequency $f_0$ [Hz]") 2044 + ax.set_title("EN 29052-1 floating-floor resonance") 2045 + ax.set_ylim(bottom=0.0) 2046 + ax.legend(loc="upper left", fontsize="small") 2009 2047 ax.grid(True, which="both", alpha=0.3) 2010 2048 return ax 2011 2049
+313
src/phonometry/dynamic_stiffness.py
··· 1 + # Copyright (c) 2026. Jose M. Requena-Plens 2 + """ 3 + Dynamic stiffness of resilient materials under floating floors (EN 29052-1:1992). 4 + 5 + A floating floor is a heavy floating slab resting on a resilient layer; the 6 + combination is a mass-spring system whose natural frequency governs the impact 7 + and airborne improvement of the floor. EN 29052-1 (identical to ISO 9052-1:1989) 8 + measures the **dynamic stiffness per unit area** ``s'`` of the resilient layer 9 + from the resonance of a standard load plate on a 200 mm x 200 mm specimen. 10 + 11 + The dynamic stiffness per unit area is the ratio of a dynamic force per area to 12 + the resulting change in thickness (Formula 1):: 13 + 14 + s' = (F / S) / dd [N/m3] 15 + 16 + The resiliently supported floor is a mass-spring resonator; its natural 17 + frequency (Formula 2) and, in the laboratory arrangement, the measured resonant 18 + frequency (Formula 3) are:: 19 + 20 + f0 = (1 / 2pi) * sqrt(s' / m' ) (installed floor) 21 + fr = (1 / 2pi) * sqrt(s't / m't) (test arrangement) 22 + 23 + so the *apparent* dynamic stiffness follows from the resonance (Formula 4):: 24 + 25 + s't = 4 * pi**2 * m't * fr**2 26 + 27 + With an air-permeable resilient material the enclosed gas adds a parallel 28 + stiffness (Formula 7), from the isothermal compression of the pore air:: 29 + 30 + s'a = p0 / (d * epsilon) 31 + 32 + (``s'a = 111 / d`` MN/m3 for ``p0 = 0,1 MPa``, ``epsilon = 0,9`` and ``d`` in mm, 33 + the standard's worked NOTE). The dynamic stiffness of the installed material is 34 + then obtained by airflow resistivity ``r`` (clause 8.2):: 35 + 36 + r >= 100 kPa.s/m2 s' = s't (Formula 5) 37 + 10 <= r < 100 kPa.s/m2 s' = s't + s'a (Formula 6) 38 + r < 10 kPa.s/m2 s'a from Formula 7; the method only applies when 39 + s't >> s'a, otherwise s' cannot be resolved. 40 + 41 + This module is the resilient-layer characterisation feeding the floating-floor 42 + impact improvement of :mod:`phonometry.floor_covering_improvement` (ISO 16251) 43 + and the EN 12354-2 impact model. 44 + """ 45 + 46 + from __future__ import annotations 47 + 48 + import warnings 49 + from dataclasses import dataclass 50 + from typing import TYPE_CHECKING, Any 51 + 52 + import numpy as np 53 + 54 + if TYPE_CHECKING: 55 + from matplotlib.axes import Axes 56 + 57 + from numpy.typing import ArrayLike 58 + 59 + from ._types import as_float_or_array 60 + from ._validation import require_positive 61 + from ._warnings import PhonometryWarning 62 + 63 + # --------------------------------------------------------------------------- 64 + # Constants. 65 + # --------------------------------------------------------------------------- 66 + 67 + #: Atmospheric pressure ``p0`` used by EN 29052-1 for the enclosed-gas term 68 + #: (clause 8.2 NOTE: ``p0 = 0,1 MPa``), in pascals. The standard rounds one 69 + #: atmosphere to 0,1 MPa; pass the true 101 325 Pa explicitly if preferred. 70 + STANDARD_ATMOSPHERIC_PRESSURE = 1.0e5 71 + 72 + #: Airflow-resistivity thresholds of clause 8.2, in kPa.s/m2. 73 + _HIGH_RESISTIVITY = 100.0 74 + _LOW_RESISTIVITY = 10.0 75 + 76 + #: ``2*pi`` and ``4*pi**2`` for the resonance relations. 77 + _TWO_PI = 2.0 * np.pi 78 + _FOUR_PI_SQ = 4.0 * np.pi**2 79 + 80 + 81 + class DynamicStiffnessWarning(PhonometryWarning): 82 + """Advisory when the enclosed-gas term makes ``s'`` unresolvable (clause 8.2).""" 83 + 84 + 85 + # --------------------------------------------------------------------------- 86 + # Resonance relations (clauses 3, 8.1). 87 + # --------------------------------------------------------------------------- 88 + 89 + 90 + def apparent_dynamic_stiffness( 91 + resonant_frequency: ArrayLike, total_mass_per_area: float 92 + ) -> np.ndarray | float: 93 + """Apparent dynamic stiffness per unit area ``s't`` (Formula 4). 94 + 95 + Inverts the test resonance ``fr = (1/2pi) sqrt(s't/m't)`` to 96 + ``s't = 4 pi**2 m't fr**2``. 97 + 98 + :param resonant_frequency: Extrapolated resonant frequency ``fr``, in hertz 99 + (scalar or array). 100 + :param total_mass_per_area: Total mass per unit area used during the test 101 + ``m't``, in kg/m2 (the load plate plus fittings over the 0,04 m2 102 + specimen; the standard's plate gives ``m't = 8 kg / 0,04 m2 = 200 103 + kg/m2``). 104 + :return: The apparent dynamic stiffness per unit area ``s't``, in N/m3 105 + (numerically MN/m3 when divided by 1e6). 106 + """ 107 + total_mass_per_area = require_positive(total_mass_per_area, "total_mass_per_area") 108 + fr = np.asarray(resonant_frequency, dtype=np.float64) 109 + if np.any(fr <= 0.0): 110 + raise ValueError("'resonant_frequency' must be positive.") 111 + return as_float_or_array(_FOUR_PI_SQ * total_mass_per_area * fr**2) 112 + 113 + 114 + def enclosed_gas_stiffness( 115 + thickness: ArrayLike, 116 + porosity: float, 117 + *, 118 + atmospheric_pressure: float = STANDARD_ATMOSPHERIC_PRESSURE, 119 + ) -> np.ndarray | float: 120 + """Enclosed-gas dynamic stiffness per unit area ``s'a`` (Formula 7). 121 + 122 + The isothermal compression of the pore air adds a stiffness in parallel with 123 + the material's structure: ``s'a = p0 / (d * epsilon)``. 124 + 125 + :param thickness: Thickness ``d`` of the specimen under the static load, in 126 + **metres** (scalar or array). 127 + :param porosity: Porosity ``epsilon`` of the specimen (0-1). 128 + :param atmospheric_pressure: Atmospheric pressure ``p0``, in pascals 129 + (default :data:`STANDARD_ATMOSPHERIC_PRESSURE`, the standard's 0,1 MPa). 130 + :return: The enclosed-gas dynamic stiffness per unit area ``s'a``, in N/m3. 131 + 132 + .. note:: 133 + With the standard's ``p0 = 0,1 MPa`` and ``epsilon = 0,9`` this reduces 134 + to ``s'a = 111 / d`` MN/m3 for ``d`` in millimetres (clause 8.2 NOTE). 135 + """ 136 + atmospheric_pressure = require_positive(atmospheric_pressure, "atmospheric_pressure") 137 + if not 0.0 < porosity <= 1.0: 138 + raise ValueError("'porosity' must be in the range (0, 1].") 139 + d = np.asarray(thickness, dtype=np.float64) 140 + if np.any(d <= 0.0): 141 + raise ValueError("'thickness' must be positive.") 142 + return as_float_or_array(atmospheric_pressure / (d * porosity)) 143 + 144 + 145 + def installed_dynamic_stiffness( 146 + apparent_stiffness: float, 147 + airflow_resistivity: float, 148 + *, 149 + gas_stiffness: float = 0.0, 150 + ) -> float: 151 + """Dynamic stiffness per unit area ``s'`` of the installed material (clause 8.2). 152 + 153 + Combines the apparent stiffness with the enclosed-gas term according to the 154 + lateral airflow resistivity ``r``: 155 + 156 + * ``r >= 100 kPa.s/m2`` -> ``s' = s't`` (Formula 5); 157 + * ``10 <= r < 100 kPa.s/m2`` -> ``s' = s't + s'a`` (Formula 6); 158 + * ``r < 10 kPa.s/m2`` -> the standard only requires the qualitative 159 + criterion ``s't >> s'a`` (clause 8.2). This implementation applies its own 160 + engineering threshold: ``s'a`` below 10 % of ``s't`` is treated as 161 + negligible and ``s' = s't`` (a :class:`DynamicStiffnessWarning` is 162 + emitted); above it the result is ``nan`` — the method cannot resolve 163 + ``s'``. 164 + 165 + :param apparent_stiffness: Apparent dynamic stiffness ``s't``, in N/m3. 166 + :param airflow_resistivity: Lateral airflow resistivity ``r``, in kPa.s/m2 167 + (ISO 9053). 168 + :param gas_stiffness: Enclosed-gas dynamic stiffness ``s'a``, in N/m3 (see 169 + :func:`enclosed_gas_stiffness`); needed for ``r < 100 kPa.s/m2``. 170 + :return: The installed dynamic stiffness per unit area ``s'``, in N/m3 171 + (``nan`` when the method cannot resolve it). 172 + """ 173 + apparent_stiffness = require_positive(apparent_stiffness, "apparent_stiffness") 174 + if airflow_resistivity <= 0.0: 175 + raise ValueError("'airflow_resistivity' must be positive.") 176 + if gas_stiffness < 0.0: 177 + raise ValueError("'gas_stiffness' must be non-negative.") 178 + 179 + if airflow_resistivity >= _HIGH_RESISTIVITY: 180 + return apparent_stiffness 181 + if airflow_resistivity >= _LOW_RESISTIVITY: 182 + return apparent_stiffness + gas_stiffness 183 + # r < 10 kPa.s/m2: the enclosed gas is only negligible for a firm structure. 184 + if gas_stiffness > 0.1 * apparent_stiffness: 185 + warnings.warn( 186 + "for airflow resistivity below 10 kPa.s/m2 with a non-negligible " 187 + "enclosed-gas stiffness, EN 29052-1 cannot resolve s' (clause 8.2); " 188 + "returning nan.", 189 + DynamicStiffnessWarning, 190 + stacklevel=2, 191 + ) 192 + return float("nan") 193 + warnings.warn( 194 + "airflow resistivity below 10 kPa.s/m2: s' is taken as s't with the " 195 + "enclosed-gas term disregarded; state the estimated error (clause 8.2).", 196 + DynamicStiffnessWarning, 197 + stacklevel=2, 198 + ) 199 + return apparent_stiffness 200 + 201 + 202 + def natural_frequency( 203 + dynamic_stiffness: ArrayLike, mass_per_area: float 204 + ) -> np.ndarray | float: 205 + """Natural frequency ``f0`` of the resiliently supported floor (Formula 2). 206 + 207 + ``f0 = (1 / 2pi) sqrt(s' / m')``. 208 + 209 + :param dynamic_stiffness: Dynamic stiffness per unit area ``s'``, in N/m3 210 + (scalar or array). 211 + :param mass_per_area: Mass per unit area of the supported floor ``m'``, in 212 + kg/m2. 213 + :return: The natural frequency ``f0``, in hertz. 214 + """ 215 + mass_per_area = require_positive(mass_per_area, "mass_per_area") 216 + s = np.asarray(dynamic_stiffness, dtype=np.float64) 217 + if np.any(s <= 0.0): 218 + raise ValueError("'dynamic_stiffness' must be positive.") 219 + return as_float_or_array(np.sqrt(s / mass_per_area) / _TWO_PI) 220 + 221 + 222 + # --------------------------------------------------------------------------- 223 + # Bundled measurement result. 224 + # --------------------------------------------------------------------------- 225 + 226 + 227 + @dataclass(frozen=True) 228 + class DynamicStiffnessResult: 229 + """Dynamic stiffness of a resilient layer and the floating-floor resonance. 230 + 231 + :ivar apparent_stiffness: Apparent dynamic stiffness ``s't``, in N/m3. 232 + :ivar gas_stiffness: Enclosed-gas dynamic stiffness ``s'a``, in N/m3. 233 + :ivar dynamic_stiffness: Installed dynamic stiffness ``s'``, in N/m3. 234 + :ivar resonant_frequency: Measured test resonant frequency ``fr``, in hertz. 235 + :ivar floor_mass_per_area: Supported-floor mass per unit area ``m'``, kg/m2. 236 + :ivar natural_frequency: Installed-floor natural frequency ``f0``, in hertz. 237 + """ 238 + 239 + apparent_stiffness: float 240 + gas_stiffness: float 241 + dynamic_stiffness: float 242 + resonant_frequency: float 243 + floor_mass_per_area: float 244 + natural_frequency: float 245 + 246 + def plot(self, ax: "Axes | None" = None, **kwargs: Any) -> "Axes": 247 + """Plot ``f0(s')`` with this design point marked. 248 + 249 + Requires matplotlib (``pip install phonometry[plot]``); returns the 250 + :class:`~matplotlib.axes.Axes`. 251 + """ 252 + from ._plotting import plot_dynamic_stiffness 253 + 254 + return plot_dynamic_stiffness(self, ax=ax, **kwargs) 255 + 256 + 257 + def floating_floor_resonance( 258 + resonant_frequency: float, 259 + total_mass_per_area: float, 260 + floor_mass_per_area: float, 261 + *, 262 + airflow_resistivity: float = float("inf"), 263 + thickness: float | None = None, 264 + porosity: float | None = None, 265 + atmospheric_pressure: float = STANDARD_ATMOSPHERIC_PRESSURE, 266 + ) -> DynamicStiffnessResult: 267 + """Full EN 29052-1 chain: measured resonance -> installed ``s'`` and ``f0``. 268 + 269 + Chains the apparent dynamic stiffness (Formula 4), the enclosed-gas term 270 + (Formula 7, when ``thickness`` and ``porosity`` are given), the airflow 271 + resistivity combination (clause 8.2) and the installed-floor natural 272 + frequency (Formula 2). 273 + 274 + :param resonant_frequency: Measured resonant frequency ``fr``, in hertz. 275 + :param total_mass_per_area: Test total mass per unit area ``m't``, kg/m2. 276 + :param floor_mass_per_area: Supported-floor mass per unit area ``m'``, kg/m2. 277 + :param airflow_resistivity: Lateral airflow resistivity ``r``, in kPa.s/m2 278 + (default ``inf`` -> the high-resistivity case ``s' = s't``). 279 + :param thickness: Specimen thickness ``d`` under load, in metres (required 280 + for the enclosed-gas term when ``r < 100 kPa.s/m2``). 281 + :param porosity: Specimen porosity ``epsilon`` (required with ``thickness``). 282 + :param atmospheric_pressure: Atmospheric pressure ``p0``, in pascals. 283 + :return: The :class:`DynamicStiffnessResult`. 284 + """ 285 + s_apparent = float(apparent_dynamic_stiffness(resonant_frequency, total_mass_per_area)) 286 + s_gas = 0.0 287 + if airflow_resistivity < _HIGH_RESISTIVITY: 288 + if thickness is None or porosity is None: 289 + raise ValueError( 290 + "'thickness' and 'porosity' are required for the enclosed-gas " 291 + "term when airflow_resistivity < 100 kPa.s/m2." 292 + ) 293 + s_gas = float( 294 + enclosed_gas_stiffness( 295 + thickness, porosity, atmospheric_pressure=atmospheric_pressure 296 + ) 297 + ) 298 + s_installed = installed_dynamic_stiffness( 299 + s_apparent, airflow_resistivity, gas_stiffness=s_gas 300 + ) 301 + f0 = ( 302 + float(natural_frequency(s_installed, floor_mass_per_area)) 303 + if np.isfinite(s_installed) 304 + else float("nan") 305 + ) 306 + return DynamicStiffnessResult( 307 + apparent_stiffness=s_apparent, 308 + gas_stiffness=s_gas, 309 + dynamic_stiffness=s_installed, 310 + resonant_frequency=float(resonant_frequency), 311 + floor_mass_per_area=float(floor_mass_per_area), 312 + natural_frequency=f0, 313 + )
+173
tests/test_dynamic_stiffness.py
··· 1 + # Copyright (c) 2026. Jose M. Requena-Plens 2 + """Tests for EN 29052-1:1992 dynamic stiffness of resilient materials. 3 + 4 + Anchored on hand-computed closed-form values of the resonance relations 5 + (Formulae 2-4) and on the standard's own worked NOTE for the enclosed-gas term 6 + (``s'a = 111 / d`` MN/m3 for ``p0 = 0,1 MPa``, ``epsilon = 0,9``, clause 8.2) -- 7 + a genuine published numeric oracle. 8 + """ 9 + 10 + from __future__ import annotations 11 + 12 + import math 13 + 14 + import numpy as np 15 + import pytest 16 + 17 + from phonometry import ( 18 + DynamicStiffnessResult, 19 + apparent_dynamic_stiffness, 20 + enclosed_gas_stiffness, 21 + floating_floor_resonance, 22 + installed_dynamic_stiffness, 23 + natural_frequency, 24 + ) 25 + from phonometry.dynamic_stiffness import DynamicStiffnessWarning 26 + 27 + 28 + # --------------------------------------------------------------------------- 29 + # Apparent dynamic stiffness (Formula 4) and its resonance inverse (Formula 3) 30 + # --------------------------------------------------------------------------- 31 + def test_apparent_stiffness_hand_value() -> None: 32 + """s't = 4 pi^2 m't fr^2: 4 pi^2 * 200 * 25^2 = 4.934802 MN/m3.""" 33 + st = apparent_dynamic_stiffness(25.0, 200.0) 34 + assert st == pytest.approx(4_934_802.200545, rel=1e-9) 35 + assert st == pytest.approx(4.0 * math.pi**2 * 200.0 * 25.0**2, rel=1e-12) 36 + 37 + 38 + def test_apparent_stiffness_inverts_the_resonance() -> None: 39 + """Recovering fr from s't via Formula 3 returns the input frequency.""" 40 + st = apparent_dynamic_stiffness(25.0, 200.0) 41 + assert natural_frequency(st, 200.0) == pytest.approx(25.0, rel=1e-12) 42 + 43 + 44 + def test_apparent_stiffness_vectorised() -> None: 45 + st = apparent_dynamic_stiffness([20.0, 25.0, 30.0], 200.0) 46 + assert isinstance(st, np.ndarray) 47 + assert st.shape == (3,) 48 + assert np.all(np.diff(st) > 0.0) # rises with fr^2 49 + 50 + 51 + # --------------------------------------------------------------------------- 52 + # Enclosed-gas stiffness (Formula 7) -- standard's 111/d NOTE oracle 53 + # --------------------------------------------------------------------------- 54 + def test_enclosed_gas_matches_standard_note() -> None: 55 + """s'a = p0/(d eps); with p0=0,1 MPa, eps=0,9 the NOTE gives ~111/d MN/m3. 56 + 57 + The closed form yields 100000/(0,9) = 111.11.../d MN/m3 (d in mm); the 58 + standard rounds the printed coefficient to 111. 59 + """ 60 + for d_mm in (10.0, 20.0, 50.0): 61 + sa = enclosed_gas_stiffness(d_mm / 1000.0, 0.9) # thickness in metres 62 + assert sa == pytest.approx(1.0e5 / ((d_mm / 1000.0) * 0.9), rel=1e-12) 63 + # cross-check against the standard's printed 111/d relationship 64 + assert sa / 1e6 == pytest.approx(111.0 / d_mm, rel=2e-3) 65 + 66 + 67 + def test_enclosed_gas_true_atmosphere() -> None: 68 + """A real 101 325 Pa can be passed instead of the standard's 0,1 MPa.""" 69 + sa = enclosed_gas_stiffness(0.02, 0.9, atmospheric_pressure=101_325.0) 70 + assert sa == pytest.approx(101_325.0 / (0.02 * 0.9), rel=1e-12) 71 + 72 + 73 + def test_enclosed_gas_bad_porosity_raises() -> None: 74 + with pytest.raises(ValueError, match="porosity"): 75 + enclosed_gas_stiffness(0.02, 0.0) 76 + with pytest.raises(ValueError, match="porosity"): 77 + enclosed_gas_stiffness(0.02, 1.5) 78 + 79 + 80 + # --------------------------------------------------------------------------- 81 + # Natural frequency (Formula 2) 82 + # --------------------------------------------------------------------------- 83 + def test_natural_frequency_hand_value() -> None: 84 + """f0 = (1/2pi) sqrt(s'/m'): sqrt(10e6/100)/(2pi) = 50.329 Hz.""" 85 + assert natural_frequency(10.0e6, 100.0) == pytest.approx(50.3292121, rel=1e-6) 86 + 87 + 88 + def test_natural_frequency_scales() -> None: 89 + """f0 scales with sqrt(s') and 1/sqrt(m').""" 90 + base = float(natural_frequency(10.0e6, 100.0)) 91 + assert natural_frequency(40.0e6, 100.0) == pytest.approx(2.0 * base, rel=1e-9) 92 + assert natural_frequency(10.0e6, 400.0) == pytest.approx(base / 2.0, rel=1e-9) 93 + 94 + 95 + # --------------------------------------------------------------------------- 96 + # Airflow-resistivity combination (clause 8.2) 97 + # --------------------------------------------------------------------------- 98 + def test_high_resistivity_uses_apparent_only() -> None: 99 + assert installed_dynamic_stiffness(20e6, 150.0, gas_stiffness=3e6) == 20e6 100 + 101 + 102 + def test_intermediate_resistivity_adds_gas() -> None: 103 + assert installed_dynamic_stiffness(20e6, 50.0, gas_stiffness=3e6) == 23e6 104 + # boundary at 10 kPa.s/m2 is inclusive of the intermediate branch 105 + assert installed_dynamic_stiffness(20e6, 10.0, gas_stiffness=3e6) == 23e6 106 + 107 + 108 + def test_low_resistivity_negligible_gas_warns_and_uses_apparent() -> None: 109 + with pytest.warns(DynamicStiffnessWarning, match="disregarded"): 110 + s = installed_dynamic_stiffness(20e6, 5.0, gas_stiffness=1e6) # 5 % of s't 111 + assert s == 20e6 112 + 113 + 114 + def test_low_resistivity_significant_gas_is_unresolvable() -> None: 115 + with pytest.warns(DynamicStiffnessWarning, match="cannot resolve"): 116 + s = installed_dynamic_stiffness(20e6, 5.0, gas_stiffness=5e6) # 25 % of s't 117 + assert math.isnan(s) 118 + 119 + 120 + # --------------------------------------------------------------------------- 121 + # Full chain 122 + # --------------------------------------------------------------------------- 123 + def test_floating_floor_resonance_chain() -> None: 124 + res = floating_floor_resonance( 125 + 25.0, 200.0, 100.0, airflow_resistivity=50.0, thickness=0.02, porosity=0.9 126 + ) 127 + assert isinstance(res, DynamicStiffnessResult) 128 + assert res.apparent_stiffness == pytest.approx(4_934_802.2, rel=1e-6) 129 + assert res.gas_stiffness == pytest.approx(1.0e5 / (0.02 * 0.9), rel=1e-9) 130 + assert res.dynamic_stiffness == pytest.approx( 131 + res.apparent_stiffness + res.gas_stiffness, rel=1e-12 132 + ) 133 + assert res.natural_frequency == pytest.approx( 134 + math.sqrt(res.dynamic_stiffness / 100.0) / (2.0 * math.pi), rel=1e-9 135 + ) 136 + 137 + 138 + def test_chain_high_resistivity_ignores_gas() -> None: 139 + """With r >= 100 kPa.s/m2 the gas term is not needed.""" 140 + res = floating_floor_resonance(25.0, 200.0, 100.0) # default r = inf 141 + assert res.gas_stiffness == 0.0 142 + assert res.dynamic_stiffness == res.apparent_stiffness 143 + 144 + 145 + def test_chain_requires_gas_inputs_below_100() -> None: 146 + with pytest.raises(ValueError, match="thickness.*porosity"): 147 + floating_floor_resonance(25.0, 200.0, 100.0, airflow_resistivity=50.0) 148 + 149 + 150 + # --------------------------------------------------------------------------- 151 + # Validation 152 + # --------------------------------------------------------------------------- 153 + def test_non_positive_inputs_raise() -> None: 154 + with pytest.raises(ValueError, match="resonant_frequency"): 155 + apparent_dynamic_stiffness(0.0, 200.0) 156 + with pytest.raises(ValueError, match="total_mass_per_area"): 157 + apparent_dynamic_stiffness(25.0, 0.0) 158 + with pytest.raises(ValueError, match="mass_per_area"): 159 + natural_frequency(10e6, 0.0) 160 + with pytest.raises(ValueError, match="airflow_resistivity"): 161 + installed_dynamic_stiffness(20e6, 0.0) 162 + 163 + 164 + # --------------------------------------------------------------------------- 165 + # Plotting 166 + # --------------------------------------------------------------------------- 167 + def test_plot_returns_axes() -> None: 168 + pytest.importorskip("matplotlib") 169 + import matplotlib 170 + 171 + matplotlib.use("Agg") 172 + res = floating_floor_resonance(25.0, 200.0, 100.0) 173 + assert res.plot() is not None