[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: installed structure-borne sound from equipment (EN 12354-5) (#140)

Add the EN 12354-5:2009 prediction of the receiving-room sound pressure
level from building service equipment that injects structure-borne sound
into the building. Final PR of the structural vibroacoustics series (#16),
closing the chain source (EN 15657) -> coupling (ISO 10846 / ISO 7626
mobilities) -> building transmission.

New module `installed_structure_borne`:
- `coupling_term` DC = 10 lg(|Ys+Yi+Yk|^2/(|Ys| Re{Yi})) (Formula 19b/e),
with force-source (19c) and velocity-source (19d) limits.
- `installed_structure_borne_power_level` LWs,inst = LWs,c - DC (18b).
- `structure_borne_pressure_level_path` Ln,s,ij = LWs,inst - Dsa - Rij,ref
- 10 lg(Si/S0) - 10 lg(A0/4) (18a, S0 = A0 = 10 m2) and
`total_structure_borne_pressure_level` energetic path sum (17).
- `InstalledSourceResult` (`.overall_level`, `.plot()`) and
`installed_source_prediction` for a multi-path prediction.

The source and receiver mobilities/impedances are those of
mechanical_mobility and transfer_stiffness; LWs,c comes from EN 15657.

Conformance is anchored on the coupling-term force-source limit, the
installed-power identity and the area/absorption terms of Formula 18a;
Dsa and Rij,ref are inputs (measurement / EN 12354-1 / Annexes D, F)
(137/137).

Adds the cascade figure (characteristic -> installed -> paths -> total),
the EN/ES guides, the docs index and api-reference rows, and the sidebar
entry.

authored by

José M. Requena Plens and committed by
GitHub
(Jul 11, 2026, 8:14 PM +0200) da1ece15 dcc0034a

+3366 -3
+601
.github/images/installed_structure_borne.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="712.703125pt" height="439.116562pt" viewBox="0 0 712.703125 439.116562" 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 439.116562 24 + L 712.703125 439.116562 25 + L 712.703125 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 49.305469 400.915781 33 + L 705.503125 400.915781 34 + L 705.503125 28.318125 35 + L 49.305469 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 79.132635 400.915781 43 + L 79.132635 28.318125 44 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #b0b0b0; 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="79.132635" y="400.915781" style="stroke: #000000; stroke-width: 0.8"/> 54 + </g> 55 + </g> 56 + <g id="text_1"> 57 + <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: middle" x="79.132635" y="415.513438" transform="rotate(-0 79.132635 415.513438)">63</text> 58 + </g> 59 + </g> 60 + <g id="xtick_2"> 61 + <g id="line2d_3"> 62 + <path d="M 178.556522 400.915781 63 + L 178.556522 28.318125 64 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #b0b0b0; stroke-opacity: 0.5; stroke-width: 0.8"/> 65 + </g> 66 + <g id="line2d_4"> 67 + <g> 68 + <use xlink:href="#m3d27035b55" x="178.556522" y="400.915781" style="stroke: #000000; stroke-width: 0.8"/> 69 + </g> 70 + </g> 71 + <g id="text_2"> 72 + <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: middle" x="178.556522" y="415.513438" transform="rotate(-0 178.556522 415.513438)">125</text> 73 + </g> 74 + </g> 75 + <g id="xtick_3"> 76 + <g id="line2d_5"> 77 + <path d="M 277.98041 400.915781 78 + L 277.98041 28.318125 79 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #b0b0b0; stroke-opacity: 0.5; stroke-width: 0.8"/> 80 + </g> 81 + <g id="line2d_6"> 82 + <g> 83 + <use xlink:href="#m3d27035b55" x="277.98041" y="400.915781" style="stroke: #000000; stroke-width: 0.8"/> 84 + </g> 85 + </g> 86 + <g id="text_3"> 87 + <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: middle" x="277.98041" y="415.513438" transform="rotate(-0 277.98041 415.513438)">250</text> 88 + </g> 89 + </g> 90 + <g id="xtick_4"> 91 + <g id="line2d_7"> 92 + <path d="M 377.404297 400.915781 93 + L 377.404297 28.318125 94 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #b0b0b0; stroke-opacity: 0.5; stroke-width: 0.8"/> 95 + </g> 96 + <g id="line2d_8"> 97 + <g> 98 + <use xlink:href="#m3d27035b55" x="377.404297" y="400.915781" style="stroke: #000000; stroke-width: 0.8"/> 99 + </g> 100 + </g> 101 + <g id="text_4"> 102 + <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: middle" x="377.404297" y="415.513438" transform="rotate(-0 377.404297 415.513438)">500</text> 103 + </g> 104 + </g> 105 + <g id="xtick_5"> 106 + <g id="line2d_9"> 107 + <path d="M 476.828184 400.915781 108 + L 476.828184 28.318125 109 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #b0b0b0; stroke-opacity: 0.5; stroke-width: 0.8"/> 110 + </g> 111 + <g id="line2d_10"> 112 + <g> 113 + <use xlink:href="#m3d27035b55" x="476.828184" y="400.915781" style="stroke: #000000; stroke-width: 0.8"/> 114 + </g> 115 + </g> 116 + <g id="text_5"> 117 + <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: middle" x="476.828184" y="415.513438" transform="rotate(-0 476.828184 415.513438)">1000</text> 118 + </g> 119 + </g> 120 + <g id="xtick_6"> 121 + <g id="line2d_11"> 122 + <path d="M 576.252071 400.915781 123 + L 576.252071 28.318125 124 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #b0b0b0; stroke-opacity: 0.5; stroke-width: 0.8"/> 125 + </g> 126 + <g id="line2d_12"> 127 + <g> 128 + <use xlink:href="#m3d27035b55" x="576.252071" y="400.915781" style="stroke: #000000; stroke-width: 0.8"/> 129 + </g> 130 + </g> 131 + <g id="text_6"> 132 + <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: middle" x="576.252071" y="415.513438" transform="rotate(-0 576.252071 415.513438)">2000</text> 133 + </g> 134 + </g> 135 + <g id="xtick_7"> 136 + <g id="line2d_13"> 137 + <path d="M 675.675959 400.915781 138 + L 675.675959 28.318125 139 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #b0b0b0; stroke-opacity: 0.5; stroke-width: 0.8"/> 140 + </g> 141 + <g id="line2d_14"> 142 + <g> 143 + <use xlink:href="#m3d27035b55" x="675.675959" y="400.915781" style="stroke: #000000; stroke-width: 0.8"/> 144 + </g> 145 + </g> 146 + <g id="text_7"> 147 + <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: middle" x="675.675959" y="415.513438" transform="rotate(-0 675.675959 415.513438)">4000</text> 148 + </g> 149 + </g> 150 + <g id="text_8"> 151 + <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: middle" x="377.404297" y="429.514219" transform="rotate(-0 377.404297 429.514219)">Frequency [Hz]</text> 152 + </g> 153 + </g> 154 + <g id="matplotlib.axis_2"> 155 + <g id="ytick_1"> 156 + <g id="line2d_15"> 157 + <path d="M 49.305469 356.004978 158 + L 705.503125 356.004978 159 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 160 + </g> 161 + <g id="line2d_16"> 162 + <defs> 163 + <path id="mef640d9f3a" d="M 0 0 164 + L -3.5 0 165 + " style="stroke: #000000; stroke-width: 0.8"/> 166 + </defs> 167 + <g> 168 + <use xlink:href="#mef640d9f3a" x="49.305469" y="356.004978" style="stroke: #000000; stroke-width: 0.8"/> 169 + </g> 170 + </g> 171 + <g id="text_9"> 172 + <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="42.305469" y="359.803806" transform="rotate(-0 42.305469 359.803806)">−20</text> 173 + </g> 174 + </g> 175 + <g id="ytick_2"> 176 + <g id="line2d_17"> 177 + <path d="M 49.305469 296.245248 178 + L 705.503125 296.245248 179 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 180 + </g> 181 + <g id="line2d_18"> 182 + <g> 183 + <use xlink:href="#mef640d9f3a" x="49.305469" y="296.245248" style="stroke: #000000; stroke-width: 0.8"/> 184 + </g> 185 + </g> 186 + <g id="text_10"> 187 + <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="42.305469" y="300.044076" transform="rotate(-0 42.305469 300.044076)">0</text> 188 + </g> 189 + </g> 190 + <g id="ytick_3"> 191 + <g id="line2d_19"> 192 + <path d="M 49.305469 236.485518 193 + L 705.503125 236.485518 194 + " clip-path="url(#p5253ba61f9)" 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_20"> 197 + <g> 198 + <use xlink:href="#mef640d9f3a" x="49.305469" y="236.485518" style="stroke: #000000; stroke-width: 0.8"/> 199 + </g> 200 + </g> 201 + <g id="text_11"> 202 + <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="42.305469" y="240.284346" transform="rotate(-0 42.305469 240.284346)">20</text> 203 + </g> 204 + </g> 205 + <g id="ytick_4"> 206 + <g id="line2d_21"> 207 + <path d="M 49.305469 176.725788 208 + L 705.503125 176.725788 209 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 210 + </g> 211 + <g id="line2d_22"> 212 + <g> 213 + <use xlink:href="#mef640d9f3a" x="49.305469" y="176.725788" style="stroke: #000000; stroke-width: 0.8"/> 214 + </g> 215 + </g> 216 + <g id="text_12"> 217 + <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="42.305469" y="180.524616" transform="rotate(-0 42.305469 180.524616)">40</text> 218 + </g> 219 + </g> 220 + <g id="ytick_5"> 221 + <g id="line2d_23"> 222 + <path d="M 49.305469 116.966058 223 + L 705.503125 116.966058 224 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 225 + </g> 226 + <g id="line2d_24"> 227 + <g> 228 + <use xlink:href="#mef640d9f3a" x="49.305469" y="116.966058" style="stroke: #000000; stroke-width: 0.8"/> 229 + </g> 230 + </g> 231 + <g id="text_13"> 232 + <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="42.305469" y="120.764886" transform="rotate(-0 42.305469 120.764886)">60</text> 233 + </g> 234 + </g> 235 + <g id="ytick_6"> 236 + <g id="line2d_25"> 237 + <path d="M 49.305469 57.206328 238 + L 705.503125 57.206328 239 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 240 + </g> 241 + <g id="line2d_26"> 242 + <g> 243 + <use xlink:href="#mef640d9f3a" x="49.305469" y="57.206328" style="stroke: #000000; stroke-width: 0.8"/> 244 + </g> 245 + </g> 246 + <g id="text_14"> 247 + <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="42.305469" y="61.005156" transform="rotate(-0 42.305469 61.005156)">80</text> 248 + </g> 249 + </g> 250 + <g id="text_15"> 251 + <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: middle" x="14.798438" y="214.616953" transform="rotate(-90 14.798438 214.616953)">Level [dB]</text> 252 + </g> 253 + </g> 254 + <g id="line2d_27"> 255 + <path d="M 79.132635 63.182301 256 + L 178.556522 51.230355 257 + L 277.98041 45.254382 258 + L 377.404297 54.218342 259 + L 476.828184 66.170288 260 + L 576.252071 81.11022 261 + L 675.675959 99.038139 262 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke: #d62728; stroke-width: 2; stroke-linecap: square"/> 263 + <defs> 264 + <path id="mc99916e8d1" d="M 0 3 265 + C 0.795609 3 1.55874 2.683901 2.12132 2.12132 266 + C 2.683901 1.55874 3 0.795609 3 0 267 + C 3 -0.795609 2.683901 -1.55874 2.12132 -2.12132 268 + C 1.55874 -2.683901 0.795609 -3 0 -3 269 + C -0.795609 -3 -1.55874 -2.683901 -2.12132 -2.12132 270 + C -2.683901 -1.55874 -3 -0.795609 -3 0 271 + C -3 0.795609 -2.683901 1.55874 -2.12132 2.12132 272 + C -1.55874 2.683901 -0.795609 3 0 3 273 + z 274 + " style="stroke: #d62728"/> 275 + </defs> 276 + <g clip-path="url(#p5253ba61f9)"> 277 + <use xlink:href="#mc99916e8d1" x="79.132635" y="63.182301" style="fill: #d62728; stroke: #d62728"/> 278 + <use xlink:href="#mc99916e8d1" x="178.556522" y="51.230355" style="fill: #d62728; stroke: #d62728"/> 279 + <use xlink:href="#mc99916e8d1" x="277.98041" y="45.254382" style="fill: #d62728; stroke: #d62728"/> 280 + <use xlink:href="#mc99916e8d1" x="377.404297" y="54.218342" style="fill: #d62728; stroke: #d62728"/> 281 + <use xlink:href="#mc99916e8d1" x="476.828184" y="66.170288" style="fill: #d62728; stroke: #d62728"/> 282 + <use xlink:href="#mc99916e8d1" x="576.252071" y="81.11022" style="fill: #d62728; stroke: #d62728"/> 283 + <use xlink:href="#mc99916e8d1" x="675.675959" y="99.038139" style="fill: #d62728; stroke: #d62728"/> 284 + </g> 285 + </g> 286 + <g id="line2d_28"> 287 + <path d="M 79.132635 82.863104 288 + L 178.556522 74.721236 289 + L 277.98041 74.725105 290 + L 377.404297 91.036288 291 + L 476.828184 111.119004 292 + L 576.252071 134.610871 293 + L 675.675959 161.309316 294 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke: #2ca02c; stroke-width: 2; stroke-linecap: square"/> 295 + <defs> 296 + <path id="m17eb9bc728" d="M -3 3 297 + L 3 3 298 + L 3 -3 299 + L -3 -3 300 + z 301 + " style="stroke: #2ca02c; stroke-linejoin: miter"/> 302 + </defs> 303 + <g clip-path="url(#p5253ba61f9)"> 304 + <use xlink:href="#m17eb9bc728" x="79.132635" y="82.863104" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 305 + <use xlink:href="#m17eb9bc728" x="178.556522" y="74.721236" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 306 + <use xlink:href="#m17eb9bc728" x="277.98041" y="74.725105" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 307 + <use xlink:href="#m17eb9bc728" x="377.404297" y="91.036288" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 308 + <use xlink:href="#m17eb9bc728" x="476.828184" y="111.119004" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 309 + <use xlink:href="#m17eb9bc728" x="576.252071" y="134.610871" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 310 + <use xlink:href="#m17eb9bc728" x="675.675959" y="161.309316" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 311 + </g> 312 + </g> 313 + <g id="line2d_29"> 314 + <path d="M 79.132635 246.518748 315 + L 178.556522 247.340839 316 + L 277.98041 256.308668 317 + L 377.404297 281.583811 318 + L 476.828184 310.630486 319 + L 576.252071 343.086312 320 + L 675.675959 378.748717 321 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #e0e0e0"/> 322 + <defs> 323 + <path id="m4081adc7ff" d="M 0 1.5 324 + C 0.397805 1.5 0.77937 1.341951 1.06066 1.06066 325 + C 1.341951 0.77937 1.5 0.397805 1.5 0 326 + C 1.5 -0.397805 1.341951 -0.77937 1.06066 -1.06066 327 + C 0.77937 -1.341951 0.397805 -1.5 0 -1.5 328 + C -0.397805 -1.5 -0.77937 -1.341951 -1.06066 -1.06066 329 + C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0 330 + C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066 331 + C -0.77937 1.341951 -0.397805 1.5 0 1.5 332 + z 333 + " style="stroke: #e0e0e0"/> 334 + </defs> 335 + <g clip-path="url(#p5253ba61f9)"> 336 + <use xlink:href="#m4081adc7ff" x="79.132635" y="246.518748" style="fill: #e0e0e0; stroke: #e0e0e0"/> 337 + <use xlink:href="#m4081adc7ff" x="178.556522" y="247.340839" style="fill: #e0e0e0; stroke: #e0e0e0"/> 338 + <use xlink:href="#m4081adc7ff" x="277.98041" y="256.308668" style="fill: #e0e0e0; stroke: #e0e0e0"/> 339 + <use xlink:href="#m4081adc7ff" x="377.404297" y="281.583811" style="fill: #e0e0e0; stroke: #e0e0e0"/> 340 + <use xlink:href="#m4081adc7ff" x="476.828184" y="310.630486" style="fill: #e0e0e0; stroke: #e0e0e0"/> 341 + <use xlink:href="#m4081adc7ff" x="576.252071" y="343.086312" style="fill: #e0e0e0; stroke: #e0e0e0"/> 342 + <use xlink:href="#m4081adc7ff" x="675.675959" y="378.748717" style="fill: #e0e0e0; stroke: #e0e0e0"/> 343 + </g> 344 + </g> 345 + <g id="line2d_30"> 346 + <path d="M 79.132635 251.749554 347 + L 178.556522 252.571646 348 + L 277.98041 261.539475 349 + L 377.404297 286.814617 350 + L 476.828184 315.861293 351 + L 576.252071 348.317119 352 + L 675.675959 383.979524 353 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #e0e0e0"/> 354 + <g clip-path="url(#p5253ba61f9)"> 355 + <use xlink:href="#m4081adc7ff" x="79.132635" y="251.749554" style="fill: #e0e0e0; stroke: #e0e0e0"/> 356 + <use xlink:href="#m4081adc7ff" x="178.556522" y="252.571646" style="fill: #e0e0e0; stroke: #e0e0e0"/> 357 + <use xlink:href="#m4081adc7ff" x="277.98041" y="261.539475" style="fill: #e0e0e0; stroke: #e0e0e0"/> 358 + <use xlink:href="#m4081adc7ff" x="377.404297" y="286.814617" style="fill: #e0e0e0; stroke: #e0e0e0"/> 359 + <use xlink:href="#m4081adc7ff" x="476.828184" y="315.861293" style="fill: #e0e0e0; stroke: #e0e0e0"/> 360 + <use xlink:href="#m4081adc7ff" x="576.252071" y="348.317119" style="fill: #e0e0e0; stroke: #e0e0e0"/> 361 + <use xlink:href="#m4081adc7ff" x="675.675959" y="383.979524" style="fill: #e0e0e0; stroke: #e0e0e0"/> 362 + </g> 363 + </g> 364 + <g id="line2d_31"> 365 + <path d="M 79.132635 239.877618 366 + L 178.556522 240.699709 367 + L 277.98041 249.667538 368 + L 377.404297 274.942681 369 + L 476.828184 303.989356 370 + L 576.252071 336.445183 371 + L 675.675959 372.107587 372 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke: #1f77b4; stroke-width: 2.4; stroke-linecap: square"/> 373 + <defs> 374 + <path id="mda33bb53f1" d="M -0 4.242641 375 + L 4.242641 0 376 + L 0 -4.242641 377 + L -4.242641 -0 378 + z 379 + " style="stroke: #1f77b4; stroke-linejoin: miter"/> 380 + </defs> 381 + <g clip-path="url(#p5253ba61f9)"> 382 + <use xlink:href="#mda33bb53f1" x="79.132635" y="239.877618" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 383 + <use xlink:href="#mda33bb53f1" x="178.556522" y="240.699709" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 384 + <use xlink:href="#mda33bb53f1" x="277.98041" y="249.667538" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 385 + <use xlink:href="#mda33bb53f1" x="377.404297" y="274.942681" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 386 + <use xlink:href="#mda33bb53f1" x="476.828184" y="303.989356" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 387 + <use xlink:href="#mda33bb53f1" x="576.252071" y="336.445183" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 388 + <use xlink:href="#mda33bb53f1" x="675.675959" y="372.107587" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 389 + </g> 390 + </g> 391 + <g id="patch_3"> 392 + <path d="M 49.305469 400.915781 393 + L 49.305469 28.318125 394 + " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 395 + </g> 396 + <g id="patch_4"> 397 + <path d="M 705.503125 400.915781 398 + L 705.503125 28.318125 399 + " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 400 + </g> 401 + <g id="patch_5"> 402 + <path d="M 49.305469 400.915781 403 + L 705.503125 400.915781 404 + " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 405 + </g> 406 + <g id="patch_6"> 407 + <path d="M 49.305469 28.318125 408 + L 705.503125 28.318125 409 + " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 410 + </g> 411 + <g id="text_16"> 412 + <g id="patch_7"> 413 + <path d="M 59.148434 397.713828 414 + L 361.067105 397.713828 415 + Q 365.317105 397.713828 365.317105 393.463828 416 + L 365.317105 362.721387 417 + Q 365.317105 358.471387 361.067105 358.471387 418 + L 59.148434 358.471387 419 + Q 54.898434 358.471387 54.898434 362.721387 420 + L 54.898434 393.463828 421 + Q 54.898434 397.713828 59.148434 397.713828 422 + z 423 + " style="fill: #f0f2f5; stroke: #e0e0e0; stroke-linejoin: miter"/> 424 + </g> 425 + <text style="font-size: 8.5px; font-family: 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Computer Modern Typewriter', 'Andale Mono', 'Nimbus Mono L', 'Courier New', 'Courier', 'Fixed', 'Terminal', monospace" transform="translate(59.148434 370.076045)">DC = 10 lg(|Ys+Yi|^2 / (|Ys| Re Yi))</text> 426 + <text style="font-size: 8.5px; font-family: 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Computer Modern Typewriter', 'Andale Mono', 'Nimbus Mono L', 'Courier New', 'Courier', 'Fixed', 'Terminal', monospace" transform="translate(59.148434 380.323525)">Ln,s,ij = LWs,inst - Dsa - Rij - 10 lg(Si/S0) - 10 lg(A0/4)</text> 427 + <text style="font-size: 8.5px; font-family: 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Computer Modern Typewriter', 'Andale Mono', 'Nimbus Mono L', 'Courier New', 'Courier', 'Fixed', 'Terminal', monospace" transform="translate(59.148434 390.571006)">Ln,s = 10 lg(sum 10^(Ln,s,ij/10)), S0 = A0 = 10 m2</text> 428 + </g> 429 + <g id="text_17"> 430 + <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="377.404297" y="16.318125" transform="rotate(-0 377.404297 16.318125)">EN 12354-5 Installed Structure-Borne Sound</text> 431 + </g> 432 + <g id="legend_1"> 433 + <g id="patch_8"> 434 + <path d="M 530.993125 90.064453 435 + L 699.203125 90.064453 436 + Q 701.003125 90.064453 701.003125 88.264453 437 + L 701.003125 34.618125 438 + Q 701.003125 32.818125 699.203125 32.818125 439 + L 530.993125 32.818125 440 + Q 529.193125 32.818125 529.193125 34.618125 441 + L 529.193125 88.264453 442 + Q 529.193125 90.064453 530.993125 90.064453 443 + z 444 + " style="fill: #ffffff; opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter"/> 445 + </g> 446 + <g id="line2d_32"> 447 + <path d="M 532.793125 40.108125 448 + L 541.793125 40.108125 449 + L 550.793125 40.108125 450 + " style="fill: none; stroke: #d62728; stroke-width: 2; stroke-linecap: square"/> 451 + <g> 452 + <use xlink:href="#mc99916e8d1" x="541.793125" y="40.108125" style="fill: #d62728; stroke: #d62728"/> 453 + </g> 454 + </g> 455 + <g id="text_18"> 456 + <!-- characteristic $L_{Ws,c}$ (EN 15657) --> 457 + <g transform="translate(557.993125 43.258125)"> 458 + <text> 459 + <tspan x="0" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">c</tspan> 460 + <tspan x="4.948242" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">h</tspan> 461 + <tspan x="10.652344" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">a</tspan> 462 + <tspan x="16.16748" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">r</tspan> 463 + <tspan x="19.867676" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">a</tspan> 464 + <tspan x="25.382812" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">c</tspan> 465 + <tspan x="30.331055" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">t</tspan> 466 + <tspan x="33.859863" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">e</tspan> 467 + <tspan x="39.396973" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">r</tspan> 468 + <tspan x="43.097168" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">i</tspan> 469 + <tspan x="45.597656" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">s</tspan> 470 + <tspan x="50.286621" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">t</tspan> 471 + <tspan x="53.81543" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">i</tspan> 472 + <tspan x="56.315918" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">c</tspan> 473 + <tspan x="61.26416" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'"> </tspan> 474 + <tspan x="85.590527" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'"> </tspan> 475 + <tspan x="88.451367" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">(</tspan> 476 + <tspan x="91.962598" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">E</tspan> 477 + <tspan x="97.649121" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">N</tspan> 478 + <tspan x="104.381543" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'"> </tspan> 479 + <tspan x="107.242383" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">1</tspan> 480 + <tspan x="112.968457" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">5</tspan> 481 + <tspan x="118.694531" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">6</tspan> 482 + <tspan x="124.420605" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">5</tspan> 483 + <tspan x="130.14668" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">7</tspan> 484 + <tspan x="135.872754" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">)</tspan> 485 + <tspan x="64.125" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'">L</tspan> 486 + <tspan x="69.13916" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">W</tspan> 487 + <tspan x="75.368408" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">s</tspan> 488 + <tspan x="81.880664" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">c</tspan> 489 + <tspan x="78.650684" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'">,</tspan> 490 + </text> 491 + </g> 492 + </g> 493 + <g id="line2d_33"> 494 + <path d="M 532.793125 53.610234 495 + L 541.793125 53.610234 496 + L 550.793125 53.610234 497 + " style="fill: none; stroke: #2ca02c; stroke-width: 2; stroke-linecap: square"/> 498 + <g> 499 + <use xlink:href="#m17eb9bc728" x="541.793125" y="53.610234" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 500 + </g> 501 + </g> 502 + <g id="text_19"> 503 + <!-- installed $L_{Ws,inst}$ = $L_{Ws,c}-D_C$ --> 504 + <g transform="translate(557.993125 56.760234)"> 505 + <text> 506 + <tspan x="0" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">i</tspan> 507 + <tspan x="2.500488" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">n</tspan> 508 + <tspan x="8.20459" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">s</tspan> 509 + <tspan x="12.893555" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">t</tspan> 510 + <tspan x="16.422363" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">a</tspan> 511 + <tspan x="21.9375" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">l</tspan> 512 + <tspan x="24.437988" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">l</tspan> 513 + <tspan x="26.938477" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">e</tspan> 514 + <tspan x="32.475586" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">d</tspan> 515 + <tspan x="38.188477" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'"> </tspan> 516 + <tspan x="70.546729" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'"> </tspan> 517 + <tspan x="73.407568" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">=</tspan> 518 + <tspan x="80.948584" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'"> </tspan> 519 + <tspan x="107.028369" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">−</tspan> 520 + <tspan x="41.049316" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'">L</tspan> 521 + <tspan x="83.809424" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'">L</tspan> 522 + <tspan x="116.322803" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'">D</tspan> 523 + <tspan x="46.063477" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">W</tspan> 524 + <tspan x="52.292725" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">s</tspan> 525 + <tspan x="58.80498" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">i</tspan> 526 + <tspan x="60.555322" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">n</tspan> 527 + <tspan x="64.548193" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">s</tspan> 528 + <tspan x="67.830469" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">t</tspan> 529 + <tspan x="88.823584" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">W</tspan> 530 + <tspan x="95.052832" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">s</tspan> 531 + <tspan x="101.565088" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">c</tspan> 532 + <tspan x="123.252979" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">C</tspan> 533 + <tspan x="55.575" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'">,</tspan> 534 + <tspan x="98.335107" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'">,</tspan> 535 + </text> 536 + </g> 537 + </g> 538 + <g id="line2d_34"> 539 + <path d="M 532.793125 67.112344 540 + L 541.793125 67.112344 541 + L 550.793125 67.112344 542 + " style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #e0e0e0"/> 543 + <g> 544 + <use xlink:href="#m4081adc7ff" x="541.793125" y="67.112344" style="fill: #e0e0e0; stroke: #e0e0e0"/> 545 + </g> 546 + </g> 547 + <g id="text_20"> 548 + <!-- paths $L_{n,s,ij}$ --> 549 + <g transform="translate(557.993125 70.262344)"> 550 + <text> 551 + <tspan x="0" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">p</tspan> 552 + <tspan x="5.712891" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">a</tspan> 553 + <tspan x="11.228027" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">t</tspan> 554 + <tspan x="14.756836" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">h</tspan> 555 + <tspan x="20.460938" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">s</tspan> 556 + <tspan x="25.149902" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'"> </tspan> 557 + <tspan x="28.010742" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'">L</tspan> 558 + <tspan x="33.024902" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">n</tspan> 559 + <tspan x="40.247754" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">s</tspan> 560 + <tspan x="46.76001" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">i</tspan> 561 + <tspan x="48.510352" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">j</tspan> 562 + <tspan x="37.017773" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'">,</tspan> 563 + <tspan x="43.530029" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'">,</tspan> 564 + </text> 565 + </g> 566 + </g> 567 + <g id="line2d_35"> 568 + <path d="M 532.793125 81.152344 569 + L 541.793125 81.152344 570 + L 550.793125 81.152344 571 + " style="fill: none; stroke: #1f77b4; stroke-width: 2.4; stroke-linecap: square"/> 572 + <g> 573 + <use xlink:href="#mda33bb53f1" x="541.793125" y="81.152344" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 574 + </g> 575 + </g> 576 + <g id="text_21"> 577 + <!-- total $L_{n,s}$ --> 578 + <g transform="translate(557.993125 84.302344)"> 579 + <text> 580 + <tspan x="0" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">t</tspan> 581 + <tspan x="3.528809" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">o</tspan> 582 + <tspan x="9.035156" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">t</tspan> 583 + <tspan x="12.563965" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">a</tspan> 584 + <tspan x="18.079102" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">l</tspan> 585 + <tspan x="20.57959" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'"> </tspan> 586 + <tspan x="23.44043" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'">L</tspan> 587 + <tspan x="28.45459" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">n</tspan> 588 + <tspan x="35.677441" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">s</tspan> 589 + <tspan x="32.447461" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'">,</tspan> 590 + </text> 591 + </g> 592 + </g> 593 + </g> 594 + </g> 595 + </g> 596 + <defs> 597 + <clipPath id="p5253ba61f9"> 598 + <rect x="49.305469" y="28.318125" width="656.197656" height="372.597656"/> 599 + </clipPath> 600 + </defs> 601 + </svg>
+601
.github/images/installed_structure_borne_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="712.703125pt" height="439.116562pt" viewBox="0 0 712.703125 439.116562" 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 439.116562 24 + L 712.703125 439.116562 25 + L 712.703125 0 26 + L 0 0 27 + z 28 + "/> 29 + </g> 30 + <g id="axes_1"> 31 + <g id="patch_2"> 32 + <path d="M 49.305469 400.915781 33 + L 705.503125 400.915781 34 + L 705.503125 28.318125 35 + L 49.305469 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 79.132635 400.915781 43 + L 79.132635 28.318125 44 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #ffffff; 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="79.132635" y="400.915781" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 54 + </g> 55 + </g> 56 + <g id="text_1"> 57 + <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: middle; fill: #ffffff" x="79.132635" y="415.513438" transform="rotate(-0 79.132635 415.513438)">63</text> 58 + </g> 59 + </g> 60 + <g id="xtick_2"> 61 + <g id="line2d_3"> 62 + <path d="M 178.556522 400.915781 63 + L 178.556522 28.318125 64 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #ffffff; stroke-opacity: 0.5; stroke-width: 0.8"/> 65 + </g> 66 + <g id="line2d_4"> 67 + <g> 68 + <use xlink:href="#m8d14ee1197" x="178.556522" y="400.915781" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 69 + </g> 70 + </g> 71 + <g id="text_2"> 72 + <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: middle; fill: #ffffff" x="178.556522" y="415.513438" transform="rotate(-0 178.556522 415.513438)">125</text> 73 + </g> 74 + </g> 75 + <g id="xtick_3"> 76 + <g id="line2d_5"> 77 + <path d="M 277.98041 400.915781 78 + L 277.98041 28.318125 79 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #ffffff; stroke-opacity: 0.5; stroke-width: 0.8"/> 80 + </g> 81 + <g id="line2d_6"> 82 + <g> 83 + <use xlink:href="#m8d14ee1197" x="277.98041" y="400.915781" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 84 + </g> 85 + </g> 86 + <g id="text_3"> 87 + <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: middle; fill: #ffffff" x="277.98041" y="415.513438" transform="rotate(-0 277.98041 415.513438)">250</text> 88 + </g> 89 + </g> 90 + <g id="xtick_4"> 91 + <g id="line2d_7"> 92 + <path d="M 377.404297 400.915781 93 + L 377.404297 28.318125 94 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #ffffff; stroke-opacity: 0.5; stroke-width: 0.8"/> 95 + </g> 96 + <g id="line2d_8"> 97 + <g> 98 + <use xlink:href="#m8d14ee1197" x="377.404297" y="400.915781" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 99 + </g> 100 + </g> 101 + <g id="text_4"> 102 + <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: middle; fill: #ffffff" x="377.404297" y="415.513438" transform="rotate(-0 377.404297 415.513438)">500</text> 103 + </g> 104 + </g> 105 + <g id="xtick_5"> 106 + <g id="line2d_9"> 107 + <path d="M 476.828184 400.915781 108 + L 476.828184 28.318125 109 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #ffffff; stroke-opacity: 0.5; stroke-width: 0.8"/> 110 + </g> 111 + <g id="line2d_10"> 112 + <g> 113 + <use xlink:href="#m8d14ee1197" x="476.828184" y="400.915781" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 114 + </g> 115 + </g> 116 + <g id="text_5"> 117 + <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: middle; fill: #ffffff" x="476.828184" y="415.513438" transform="rotate(-0 476.828184 415.513438)">1000</text> 118 + </g> 119 + </g> 120 + <g id="xtick_6"> 121 + <g id="line2d_11"> 122 + <path d="M 576.252071 400.915781 123 + L 576.252071 28.318125 124 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #ffffff; stroke-opacity: 0.5; stroke-width: 0.8"/> 125 + </g> 126 + <g id="line2d_12"> 127 + <g> 128 + <use xlink:href="#m8d14ee1197" x="576.252071" y="400.915781" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 129 + </g> 130 + </g> 131 + <g id="text_6"> 132 + <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: middle; fill: #ffffff" x="576.252071" y="415.513438" transform="rotate(-0 576.252071 415.513438)">2000</text> 133 + </g> 134 + </g> 135 + <g id="xtick_7"> 136 + <g id="line2d_13"> 137 + <path d="M 675.675959 400.915781 138 + L 675.675959 28.318125 139 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #ffffff; stroke-opacity: 0.5; stroke-width: 0.8"/> 140 + </g> 141 + <g id="line2d_14"> 142 + <g> 143 + <use xlink:href="#m8d14ee1197" x="675.675959" y="400.915781" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 144 + </g> 145 + </g> 146 + <g id="text_7"> 147 + <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: middle; fill: #ffffff" x="675.675959" y="415.513438" transform="rotate(-0 675.675959 415.513438)">4000</text> 148 + </g> 149 + </g> 150 + <g id="text_8"> 151 + <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: middle; fill: #ffffff" x="377.404297" y="429.514219" transform="rotate(-0 377.404297 429.514219)">Frequency [Hz]</text> 152 + </g> 153 + </g> 154 + <g id="matplotlib.axis_2"> 155 + <g id="ytick_1"> 156 + <g id="line2d_15"> 157 + <path d="M 49.305469 356.004978 158 + L 705.503125 356.004978 159 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 160 + </g> 161 + <g id="line2d_16"> 162 + <defs> 163 + <path id="m5e07181663" d="M 0 0 164 + L -3.5 0 165 + " style="stroke: #ffffff; stroke-width: 0.8"/> 166 + </defs> 167 + <g> 168 + <use xlink:href="#m5e07181663" x="49.305469" y="356.004978" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 169 + </g> 170 + </g> 171 + <g id="text_9"> 172 + <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="42.305469" y="359.803806" transform="rotate(-0 42.305469 359.803806)">−20</text> 173 + </g> 174 + </g> 175 + <g id="ytick_2"> 176 + <g id="line2d_17"> 177 + <path d="M 49.305469 296.245248 178 + L 705.503125 296.245248 179 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 180 + </g> 181 + <g id="line2d_18"> 182 + <g> 183 + <use xlink:href="#m5e07181663" x="49.305469" y="296.245248" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 184 + </g> 185 + </g> 186 + <g id="text_10"> 187 + <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="42.305469" y="300.044076" transform="rotate(-0 42.305469 300.044076)">0</text> 188 + </g> 189 + </g> 190 + <g id="ytick_3"> 191 + <g id="line2d_19"> 192 + <path d="M 49.305469 236.485518 193 + L 705.503125 236.485518 194 + " clip-path="url(#p5253ba61f9)" 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_20"> 197 + <g> 198 + <use xlink:href="#m5e07181663" x="49.305469" y="236.485518" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 199 + </g> 200 + </g> 201 + <g id="text_11"> 202 + <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="42.305469" y="240.284346" transform="rotate(-0 42.305469 240.284346)">20</text> 203 + </g> 204 + </g> 205 + <g id="ytick_4"> 206 + <g id="line2d_21"> 207 + <path d="M 49.305469 176.725788 208 + L 705.503125 176.725788 209 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 210 + </g> 211 + <g id="line2d_22"> 212 + <g> 213 + <use xlink:href="#m5e07181663" x="49.305469" y="176.725788" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 214 + </g> 215 + </g> 216 + <g id="text_12"> 217 + <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="42.305469" y="180.524616" transform="rotate(-0 42.305469 180.524616)">40</text> 218 + </g> 219 + </g> 220 + <g id="ytick_5"> 221 + <g id="line2d_23"> 222 + <path d="M 49.305469 116.966058 223 + L 705.503125 116.966058 224 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 225 + </g> 226 + <g id="line2d_24"> 227 + <g> 228 + <use xlink:href="#m5e07181663" x="49.305469" y="116.966058" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 229 + </g> 230 + </g> 231 + <g id="text_13"> 232 + <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="42.305469" y="120.764886" transform="rotate(-0 42.305469 120.764886)">60</text> 233 + </g> 234 + </g> 235 + <g id="ytick_6"> 236 + <g id="line2d_25"> 237 + <path d="M 49.305469 57.206328 238 + L 705.503125 57.206328 239 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 240 + </g> 241 + <g id="line2d_26"> 242 + <g> 243 + <use xlink:href="#m5e07181663" x="49.305469" y="57.206328" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 244 + </g> 245 + </g> 246 + <g id="text_14"> 247 + <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="42.305469" y="61.005156" transform="rotate(-0 42.305469 61.005156)">80</text> 248 + </g> 249 + </g> 250 + <g id="text_15"> 251 + <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: middle; fill: #ffffff" x="14.798438" y="214.616953" transform="rotate(-90 14.798438 214.616953)">Level [dB]</text> 252 + </g> 253 + </g> 254 + <g id="line2d_27"> 255 + <path d="M 79.132635 63.182301 256 + L 178.556522 51.230355 257 + L 277.98041 45.254382 258 + L 377.404297 54.218342 259 + L 476.828184 66.170288 260 + L 576.252071 81.11022 261 + L 675.675959 99.038139 262 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke: #d62728; stroke-width: 2; stroke-linecap: square"/> 263 + <defs> 264 + <path id="mc99916e8d1" d="M 0 3 265 + C 0.795609 3 1.55874 2.683901 2.12132 2.12132 266 + C 2.683901 1.55874 3 0.795609 3 0 267 + C 3 -0.795609 2.683901 -1.55874 2.12132 -2.12132 268 + C 1.55874 -2.683901 0.795609 -3 0 -3 269 + C -0.795609 -3 -1.55874 -2.683901 -2.12132 -2.12132 270 + C -2.683901 -1.55874 -3 -0.795609 -3 0 271 + C -3 0.795609 -2.683901 1.55874 -2.12132 2.12132 272 + C -1.55874 2.683901 -0.795609 3 0 3 273 + z 274 + " style="stroke: #d62728"/> 275 + </defs> 276 + <g clip-path="url(#p5253ba61f9)"> 277 + <use xlink:href="#mc99916e8d1" x="79.132635" y="63.182301" style="fill: #d62728; stroke: #d62728"/> 278 + <use xlink:href="#mc99916e8d1" x="178.556522" y="51.230355" style="fill: #d62728; stroke: #d62728"/> 279 + <use xlink:href="#mc99916e8d1" x="277.98041" y="45.254382" style="fill: #d62728; stroke: #d62728"/> 280 + <use xlink:href="#mc99916e8d1" x="377.404297" y="54.218342" style="fill: #d62728; stroke: #d62728"/> 281 + <use xlink:href="#mc99916e8d1" x="476.828184" y="66.170288" style="fill: #d62728; stroke: #d62728"/> 282 + <use xlink:href="#mc99916e8d1" x="576.252071" y="81.11022" style="fill: #d62728; stroke: #d62728"/> 283 + <use xlink:href="#mc99916e8d1" x="675.675959" y="99.038139" style="fill: #d62728; stroke: #d62728"/> 284 + </g> 285 + </g> 286 + <g id="line2d_28"> 287 + <path d="M 79.132635 82.863104 288 + L 178.556522 74.721236 289 + L 277.98041 74.725105 290 + L 377.404297 91.036288 291 + L 476.828184 111.119004 292 + L 576.252071 134.610871 293 + L 675.675959 161.309316 294 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke: #2ca02c; stroke-width: 2; stroke-linecap: square"/> 295 + <defs> 296 + <path id="m17eb9bc728" d="M -3 3 297 + L 3 3 298 + L 3 -3 299 + L -3 -3 300 + z 301 + " style="stroke: #2ca02c; stroke-linejoin: miter"/> 302 + </defs> 303 + <g clip-path="url(#p5253ba61f9)"> 304 + <use xlink:href="#m17eb9bc728" x="79.132635" y="82.863104" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 305 + <use xlink:href="#m17eb9bc728" x="178.556522" y="74.721236" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 306 + <use xlink:href="#m17eb9bc728" x="277.98041" y="74.725105" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 307 + <use xlink:href="#m17eb9bc728" x="377.404297" y="91.036288" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 308 + <use xlink:href="#m17eb9bc728" x="476.828184" y="111.119004" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 309 + <use xlink:href="#m17eb9bc728" x="576.252071" y="134.610871" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 310 + <use xlink:href="#m17eb9bc728" x="675.675959" y="161.309316" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 311 + </g> 312 + </g> 313 + <g id="line2d_29"> 314 + <path d="M 79.132635 246.518748 315 + L 178.556522 247.340839 316 + L 277.98041 256.308668 317 + L 377.404297 281.583811 318 + L 476.828184 310.630486 319 + L 576.252071 343.086312 320 + L 675.675959 378.748717 321 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #555555"/> 322 + <defs> 323 + <path id="ma4d85e82af" d="M 0 1.5 324 + C 0.397805 1.5 0.77937 1.341951 1.06066 1.06066 325 + C 1.341951 0.77937 1.5 0.397805 1.5 0 326 + C 1.5 -0.397805 1.341951 -0.77937 1.06066 -1.06066 327 + C 0.77937 -1.341951 0.397805 -1.5 0 -1.5 328 + C -0.397805 -1.5 -0.77937 -1.341951 -1.06066 -1.06066 329 + C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0 330 + C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066 331 + C -0.77937 1.341951 -0.397805 1.5 0 1.5 332 + z 333 + " style="stroke: #555555"/> 334 + </defs> 335 + <g clip-path="url(#p5253ba61f9)"> 336 + <use xlink:href="#ma4d85e82af" x="79.132635" y="246.518748" style="fill: #555555; stroke: #555555"/> 337 + <use xlink:href="#ma4d85e82af" x="178.556522" y="247.340839" style="fill: #555555; stroke: #555555"/> 338 + <use xlink:href="#ma4d85e82af" x="277.98041" y="256.308668" style="fill: #555555; stroke: #555555"/> 339 + <use xlink:href="#ma4d85e82af" x="377.404297" y="281.583811" style="fill: #555555; stroke: #555555"/> 340 + <use xlink:href="#ma4d85e82af" x="476.828184" y="310.630486" style="fill: #555555; stroke: #555555"/> 341 + <use xlink:href="#ma4d85e82af" x="576.252071" y="343.086312" style="fill: #555555; stroke: #555555"/> 342 + <use xlink:href="#ma4d85e82af" x="675.675959" y="378.748717" style="fill: #555555; stroke: #555555"/> 343 + </g> 344 + </g> 345 + <g id="line2d_30"> 346 + <path d="M 79.132635 251.749554 347 + L 178.556522 252.571646 348 + L 277.98041 261.539475 349 + L 377.404297 286.814617 350 + L 476.828184 315.861293 351 + L 576.252071 348.317119 352 + L 675.675959 383.979524 353 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #555555"/> 354 + <g clip-path="url(#p5253ba61f9)"> 355 + <use xlink:href="#ma4d85e82af" x="79.132635" y="251.749554" style="fill: #555555; stroke: #555555"/> 356 + <use xlink:href="#ma4d85e82af" x="178.556522" y="252.571646" style="fill: #555555; stroke: #555555"/> 357 + <use xlink:href="#ma4d85e82af" x="277.98041" y="261.539475" style="fill: #555555; stroke: #555555"/> 358 + <use xlink:href="#ma4d85e82af" x="377.404297" y="286.814617" style="fill: #555555; stroke: #555555"/> 359 + <use xlink:href="#ma4d85e82af" x="476.828184" y="315.861293" style="fill: #555555; stroke: #555555"/> 360 + <use xlink:href="#ma4d85e82af" x="576.252071" y="348.317119" style="fill: #555555; stroke: #555555"/> 361 + <use xlink:href="#ma4d85e82af" x="675.675959" y="383.979524" style="fill: #555555; stroke: #555555"/> 362 + </g> 363 + </g> 364 + <g id="line2d_31"> 365 + <path d="M 79.132635 239.877618 366 + L 178.556522 240.699709 367 + L 277.98041 249.667538 368 + L 377.404297 274.942681 369 + L 476.828184 303.989356 370 + L 576.252071 336.445183 371 + L 675.675959 372.107587 372 + " clip-path="url(#p5253ba61f9)" style="fill: none; stroke: #1f77b4; stroke-width: 2.4; stroke-linecap: square"/> 373 + <defs> 374 + <path id="mda33bb53f1" d="M -0 4.242641 375 + L 4.242641 0 376 + L 0 -4.242641 377 + L -4.242641 -0 378 + z 379 + " style="stroke: #1f77b4; stroke-linejoin: miter"/> 380 + </defs> 381 + <g clip-path="url(#p5253ba61f9)"> 382 + <use xlink:href="#mda33bb53f1" x="79.132635" y="239.877618" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 383 + <use xlink:href="#mda33bb53f1" x="178.556522" y="240.699709" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 384 + <use xlink:href="#mda33bb53f1" x="277.98041" y="249.667538" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 385 + <use xlink:href="#mda33bb53f1" x="377.404297" y="274.942681" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 386 + <use xlink:href="#mda33bb53f1" x="476.828184" y="303.989356" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 387 + <use xlink:href="#mda33bb53f1" x="576.252071" y="336.445183" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 388 + <use xlink:href="#mda33bb53f1" x="675.675959" y="372.107587" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 389 + </g> 390 + </g> 391 + <g id="patch_3"> 392 + <path d="M 49.305469 400.915781 393 + L 49.305469 28.318125 394 + " style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 395 + </g> 396 + <g id="patch_4"> 397 + <path d="M 705.503125 400.915781 398 + L 705.503125 28.318125 399 + " style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 400 + </g> 401 + <g id="patch_5"> 402 + <path d="M 49.305469 400.915781 403 + L 705.503125 400.915781 404 + " style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 405 + </g> 406 + <g id="patch_6"> 407 + <path d="M 49.305469 28.318125 408 + L 705.503125 28.318125 409 + " style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 410 + </g> 411 + <g id="text_16"> 412 + <g id="patch_7"> 413 + <path d="M 59.148434 397.713828 414 + L 361.067105 397.713828 415 + Q 365.317105 397.713828 365.317105 393.463828 416 + L 365.317105 362.721387 417 + Q 365.317105 358.471387 361.067105 358.471387 418 + L 59.148434 358.471387 419 + Q 54.898434 358.471387 54.898434 362.721387 420 + L 54.898434 393.463828 421 + Q 54.898434 397.713828 59.148434 397.713828 422 + z 423 + " style="fill: #1c2128; stroke: #555555; stroke-linejoin: miter"/> 424 + </g> 425 + <text style="font-size: 8.5px; font-family: 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Computer Modern Typewriter', 'Andale Mono', 'Nimbus Mono L', 'Courier New', 'Courier', 'Fixed', 'Terminal', monospace; fill: #ffffff" transform="translate(59.148434 370.076045)">DC = 10 lg(|Ys+Yi|^2 / (|Ys| Re Yi))</text> 426 + <text style="font-size: 8.5px; font-family: 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Computer Modern Typewriter', 'Andale Mono', 'Nimbus Mono L', 'Courier New', 'Courier', 'Fixed', 'Terminal', monospace; fill: #ffffff" transform="translate(59.148434 380.323525)">Ln,s,ij = LWs,inst - Dsa - Rij - 10 lg(Si/S0) - 10 lg(A0/4)</text> 427 + <text style="font-size: 8.5px; font-family: 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Computer Modern Typewriter', 'Andale Mono', 'Nimbus Mono L', 'Courier New', 'Courier', 'Fixed', 'Terminal', monospace; fill: #ffffff" transform="translate(59.148434 390.571006)">Ln,s = 10 lg(sum 10^(Ln,s,ij/10)), S0 = A0 = 10 m2</text> 428 + </g> 429 + <g id="text_17"> 430 + <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="377.404297" y="16.318125" transform="rotate(-0 377.404297 16.318125)">EN 12354-5 Installed Structure-Borne Sound</text> 431 + </g> 432 + <g id="legend_1"> 433 + <g id="patch_8"> 434 + <path d="M 530.993125 90.064453 435 + L 699.203125 90.064453 436 + Q 701.003125 90.064453 701.003125 88.264453 437 + L 701.003125 34.618125 438 + Q 701.003125 32.818125 699.203125 32.818125 439 + L 530.993125 32.818125 440 + Q 529.193125 32.818125 529.193125 34.618125 441 + L 529.193125 88.264453 442 + Q 529.193125 90.064453 530.993125 90.064453 443 + z 444 + " style="opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter"/> 445 + </g> 446 + <g id="line2d_32"> 447 + <path d="M 532.793125 40.108125 448 + L 541.793125 40.108125 449 + L 550.793125 40.108125 450 + " style="fill: none; stroke: #d62728; stroke-width: 2; stroke-linecap: square"/> 451 + <g> 452 + <use xlink:href="#mc99916e8d1" x="541.793125" y="40.108125" style="fill: #d62728; stroke: #d62728"/> 453 + </g> 454 + </g> 455 + <g id="text_18"> 456 + <!-- characteristic $L_{Ws,c}$ (EN 15657) --> 457 + <g style="fill: #ffffff" transform="translate(557.993125 43.258125)"> 458 + <text> 459 + <tspan x="0" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">c</tspan> 460 + <tspan x="4.948242" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">h</tspan> 461 + <tspan x="10.652344" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 462 + <tspan x="16.16748" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">r</tspan> 463 + <tspan x="19.867676" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 464 + <tspan x="25.382812" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">c</tspan> 465 + <tspan x="30.331055" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">t</tspan> 466 + <tspan x="33.859863" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">e</tspan> 467 + <tspan x="39.396973" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">r</tspan> 468 + <tspan x="43.097168" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 469 + <tspan x="45.597656" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 470 + <tspan x="50.286621" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">t</tspan> 471 + <tspan x="53.81543" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 472 + <tspan x="56.315918" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">c</tspan> 473 + <tspan x="61.26416" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 474 + <tspan x="85.590527" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 475 + <tspan x="88.451367" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">(</tspan> 476 + <tspan x="91.962598" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">E</tspan> 477 + <tspan x="97.649121" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">N</tspan> 478 + <tspan x="104.381543" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 479 + <tspan x="107.242383" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">1</tspan> 480 + <tspan x="112.968457" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">5</tspan> 481 + <tspan x="118.694531" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">6</tspan> 482 + <tspan x="124.420605" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">5</tspan> 483 + <tspan x="130.14668" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">7</tspan> 484 + <tspan x="135.872754" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">)</tspan> 485 + <tspan x="64.125" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">L</tspan> 486 + <tspan x="69.13916" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">W</tspan> 487 + <tspan x="75.368408" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 488 + <tspan x="81.880664" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">c</tspan> 489 + <tspan x="78.650684" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">,</tspan> 490 + </text> 491 + </g> 492 + </g> 493 + <g id="line2d_33"> 494 + <path d="M 532.793125 53.610234 495 + L 541.793125 53.610234 496 + L 550.793125 53.610234 497 + " style="fill: none; stroke: #2ca02c; stroke-width: 2; stroke-linecap: square"/> 498 + <g> 499 + <use xlink:href="#m17eb9bc728" x="541.793125" y="53.610234" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 500 + </g> 501 + </g> 502 + <g id="text_19"> 503 + <!-- installed $L_{Ws,inst}$ = $L_{Ws,c}-D_C$ --> 504 + <g style="fill: #ffffff" transform="translate(557.993125 56.760234)"> 505 + <text> 506 + <tspan x="0" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 507 + <tspan x="2.500488" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">n</tspan> 508 + <tspan x="8.20459" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 509 + <tspan x="12.893555" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">t</tspan> 510 + <tspan x="16.422363" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 511 + <tspan x="21.9375" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">l</tspan> 512 + <tspan x="24.437988" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">l</tspan> 513 + <tspan x="26.938477" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">e</tspan> 514 + <tspan x="32.475586" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">d</tspan> 515 + <tspan x="38.188477" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 516 + <tspan x="70.546729" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 517 + <tspan x="73.407568" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">=</tspan> 518 + <tspan x="80.948584" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 519 + <tspan x="107.028369" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">−</tspan> 520 + <tspan x="41.049316" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">L</tspan> 521 + <tspan x="83.809424" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">L</tspan> 522 + <tspan x="116.322803" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">D</tspan> 523 + <tspan x="46.063477" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">W</tspan> 524 + <tspan x="52.292725" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 525 + <tspan x="58.80498" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 526 + <tspan x="60.555322" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">n</tspan> 527 + <tspan x="64.548193" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 528 + <tspan x="67.830469" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">t</tspan> 529 + <tspan x="88.823584" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">W</tspan> 530 + <tspan x="95.052832" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 531 + <tspan x="101.565088" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">c</tspan> 532 + <tspan x="123.252979" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">C</tspan> 533 + <tspan x="55.575" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">,</tspan> 534 + <tspan x="98.335107" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">,</tspan> 535 + </text> 536 + </g> 537 + </g> 538 + <g id="line2d_34"> 539 + <path d="M 532.793125 67.112344 540 + L 541.793125 67.112344 541 + L 550.793125 67.112344 542 + " style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #555555"/> 543 + <g> 544 + <use xlink:href="#ma4d85e82af" x="541.793125" y="67.112344" style="fill: #555555; stroke: #555555"/> 545 + </g> 546 + </g> 547 + <g id="text_20"> 548 + <!-- paths $L_{n,s,ij}$ --> 549 + <g style="fill: #ffffff" transform="translate(557.993125 70.262344)"> 550 + <text> 551 + <tspan x="0" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">p</tspan> 552 + <tspan x="5.712891" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 553 + <tspan x="11.228027" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">t</tspan> 554 + <tspan x="14.756836" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">h</tspan> 555 + <tspan x="20.460938" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 556 + <tspan x="25.149902" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 557 + <tspan x="28.010742" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">L</tspan> 558 + <tspan x="33.024902" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">n</tspan> 559 + <tspan x="40.247754" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 560 + <tspan x="46.76001" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 561 + <tspan x="48.510352" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">j</tspan> 562 + <tspan x="37.017773" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">,</tspan> 563 + <tspan x="43.530029" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">,</tspan> 564 + </text> 565 + </g> 566 + </g> 567 + <g id="line2d_35"> 568 + <path d="M 532.793125 81.152344 569 + L 541.793125 81.152344 570 + L 550.793125 81.152344 571 + " style="fill: none; stroke: #1f77b4; stroke-width: 2.4; stroke-linecap: square"/> 572 + <g> 573 + <use xlink:href="#mda33bb53f1" x="541.793125" y="81.152344" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 574 + </g> 575 + </g> 576 + <g id="text_21"> 577 + <!-- total $L_{n,s}$ --> 578 + <g style="fill: #ffffff" transform="translate(557.993125 84.302344)"> 579 + <text> 580 + <tspan x="0" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">t</tspan> 581 + <tspan x="3.528809" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">o</tspan> 582 + <tspan x="9.035156" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">t</tspan> 583 + <tspan x="12.563965" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 584 + <tspan x="18.079102" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">l</tspan> 585 + <tspan x="20.57959" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 586 + <tspan x="23.44043" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">L</tspan> 587 + <tspan x="28.45459" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">n</tspan> 588 + <tspan x="35.677441" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 589 + <tspan x="32.447461" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">,</tspan> 590 + </text> 591 + </g> 592 + </g> 593 + </g> 594 + </g> 595 + </g> 596 + <defs> 597 + <clipPath id="p5253ba61f9"> 598 + <rect x="49.305469" y="28.318125" width="656.197656" height="372.597656"/> 599 + </clipPath> 600 + </defs> 601 + </svg>
+603
.github/images/installed_structure_borne_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="707.93125pt" height="439.116562pt" viewBox="0 0 707.93125 439.116562" 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 439.116562 24 + L 707.93125 439.116562 25 + L 707.93125 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 44.533594 400.915781 33 + L 700.73125 400.915781 34 + L 700.73125 28.318125 35 + L 44.533594 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 74.36076 400.915781 43 + L 74.36076 28.318125 44 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #b0b0b0; 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="74.36076" y="400.915781" style="stroke: #000000; stroke-width: 0.8"/> 54 + </g> 55 + </g> 56 + <g id="text_1"> 57 + <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: middle" x="74.36076" y="415.513438" transform="rotate(-0 74.36076 415.513438)">63</text> 58 + </g> 59 + </g> 60 + <g id="xtick_2"> 61 + <g id="line2d_3"> 62 + <path d="M 173.784647 400.915781 63 + L 173.784647 28.318125 64 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #b0b0b0; stroke-opacity: 0.5; stroke-width: 0.8"/> 65 + </g> 66 + <g id="line2d_4"> 67 + <g> 68 + <use xlink:href="#m3d27035b55" x="173.784647" y="400.915781" style="stroke: #000000; stroke-width: 0.8"/> 69 + </g> 70 + </g> 71 + <g id="text_2"> 72 + <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: middle" x="173.784647" y="415.513438" transform="rotate(-0 173.784647 415.513438)">125</text> 73 + </g> 74 + </g> 75 + <g id="xtick_3"> 76 + <g id="line2d_5"> 77 + <path d="M 273.208535 400.915781 78 + L 273.208535 28.318125 79 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #b0b0b0; stroke-opacity: 0.5; stroke-width: 0.8"/> 80 + </g> 81 + <g id="line2d_6"> 82 + <g> 83 + <use xlink:href="#m3d27035b55" x="273.208535" y="400.915781" style="stroke: #000000; stroke-width: 0.8"/> 84 + </g> 85 + </g> 86 + <g id="text_3"> 87 + <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: middle" x="273.208535" y="415.513438" transform="rotate(-0 273.208535 415.513438)">250</text> 88 + </g> 89 + </g> 90 + <g id="xtick_4"> 91 + <g id="line2d_7"> 92 + <path d="M 372.632422 400.915781 93 + L 372.632422 28.318125 94 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #b0b0b0; stroke-opacity: 0.5; stroke-width: 0.8"/> 95 + </g> 96 + <g id="line2d_8"> 97 + <g> 98 + <use xlink:href="#m3d27035b55" x="372.632422" y="400.915781" style="stroke: #000000; stroke-width: 0.8"/> 99 + </g> 100 + </g> 101 + <g id="text_4"> 102 + <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: middle" x="372.632422" y="415.513438" transform="rotate(-0 372.632422 415.513438)">500</text> 103 + </g> 104 + </g> 105 + <g id="xtick_5"> 106 + <g id="line2d_9"> 107 + <path d="M 472.056309 400.915781 108 + L 472.056309 28.318125 109 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #b0b0b0; stroke-opacity: 0.5; stroke-width: 0.8"/> 110 + </g> 111 + <g id="line2d_10"> 112 + <g> 113 + <use xlink:href="#m3d27035b55" x="472.056309" y="400.915781" style="stroke: #000000; stroke-width: 0.8"/> 114 + </g> 115 + </g> 116 + <g id="text_5"> 117 + <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: middle" x="472.056309" y="415.513438" transform="rotate(-0 472.056309 415.513438)">1000</text> 118 + </g> 119 + </g> 120 + <g id="xtick_6"> 121 + <g id="line2d_11"> 122 + <path d="M 571.480196 400.915781 123 + L 571.480196 28.318125 124 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #b0b0b0; stroke-opacity: 0.5; stroke-width: 0.8"/> 125 + </g> 126 + <g id="line2d_12"> 127 + <g> 128 + <use xlink:href="#m3d27035b55" x="571.480196" y="400.915781" style="stroke: #000000; stroke-width: 0.8"/> 129 + </g> 130 + </g> 131 + <g id="text_6"> 132 + <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: middle" x="571.480196" y="415.513438" transform="rotate(-0 571.480196 415.513438)">2000</text> 133 + </g> 134 + </g> 135 + <g id="xtick_7"> 136 + <g id="line2d_13"> 137 + <path d="M 670.904084 400.915781 138 + L 670.904084 28.318125 139 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #b0b0b0; stroke-opacity: 0.5; stroke-width: 0.8"/> 140 + </g> 141 + <g id="line2d_14"> 142 + <g> 143 + <use xlink:href="#m3d27035b55" x="670.904084" y="400.915781" style="stroke: #000000; stroke-width: 0.8"/> 144 + </g> 145 + </g> 146 + <g id="text_7"> 147 + <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: middle" x="670.904084" y="415.513438" transform="rotate(-0 670.904084 415.513438)">4000</text> 148 + </g> 149 + </g> 150 + <g id="text_8"> 151 + <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: middle" x="372.632422" y="429.514219" transform="rotate(-0 372.632422 429.514219)">Frecuencia [Hz]</text> 152 + </g> 153 + </g> 154 + <g id="matplotlib.axis_2"> 155 + <g id="ytick_1"> 156 + <g id="line2d_15"> 157 + <path d="M 44.533594 356.004978 158 + L 700.73125 356.004978 159 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 160 + </g> 161 + <g id="line2d_16"> 162 + <defs> 163 + <path id="mef640d9f3a" d="M 0 0 164 + L -3.5 0 165 + " style="stroke: #000000; stroke-width: 0.8"/> 166 + </defs> 167 + <g> 168 + <use xlink:href="#mef640d9f3a" x="44.533594" y="356.004978" style="stroke: #000000; stroke-width: 0.8"/> 169 + </g> 170 + </g> 171 + <g id="text_9"> 172 + <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="37.533594" y="359.803806" transform="rotate(-0 37.533594 359.803806)">-20</text> 173 + </g> 174 + </g> 175 + <g id="ytick_2"> 176 + <g id="line2d_17"> 177 + <path d="M 44.533594 296.245248 178 + L 700.73125 296.245248 179 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 180 + </g> 181 + <g id="line2d_18"> 182 + <g> 183 + <use xlink:href="#mef640d9f3a" x="44.533594" y="296.245248" style="stroke: #000000; stroke-width: 0.8"/> 184 + </g> 185 + </g> 186 + <g id="text_10"> 187 + <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="37.533594" y="300.044076" transform="rotate(-0 37.533594 300.044076)">0</text> 188 + </g> 189 + </g> 190 + <g id="ytick_3"> 191 + <g id="line2d_19"> 192 + <path d="M 44.533594 236.485518 193 + L 700.73125 236.485518 194 + " clip-path="url(#pfd9d6b87fa)" 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_20"> 197 + <g> 198 + <use xlink:href="#mef640d9f3a" x="44.533594" y="236.485518" style="stroke: #000000; stroke-width: 0.8"/> 199 + </g> 200 + </g> 201 + <g id="text_11"> 202 + <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="37.533594" y="240.284346" transform="rotate(-0 37.533594 240.284346)">20</text> 203 + </g> 204 + </g> 205 + <g id="ytick_4"> 206 + <g id="line2d_21"> 207 + <path d="M 44.533594 176.725788 208 + L 700.73125 176.725788 209 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 210 + </g> 211 + <g id="line2d_22"> 212 + <g> 213 + <use xlink:href="#mef640d9f3a" x="44.533594" y="176.725788" style="stroke: #000000; stroke-width: 0.8"/> 214 + </g> 215 + </g> 216 + <g id="text_12"> 217 + <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="37.533594" y="180.524616" transform="rotate(-0 37.533594 180.524616)">40</text> 218 + </g> 219 + </g> 220 + <g id="ytick_5"> 221 + <g id="line2d_23"> 222 + <path d="M 44.533594 116.966058 223 + L 700.73125 116.966058 224 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 225 + </g> 226 + <g id="line2d_24"> 227 + <g> 228 + <use xlink:href="#mef640d9f3a" x="44.533594" y="116.966058" style="stroke: #000000; stroke-width: 0.8"/> 229 + </g> 230 + </g> 231 + <g id="text_13"> 232 + <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="37.533594" y="120.764886" transform="rotate(-0 37.533594 120.764886)">60</text> 233 + </g> 234 + </g> 235 + <g id="ytick_6"> 236 + <g id="line2d_25"> 237 + <path d="M 44.533594 57.206328 238 + L 700.73125 57.206328 239 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #e0e0e0; stroke-opacity: 0.5; stroke-width: 0.8"/> 240 + </g> 241 + <g id="line2d_26"> 242 + <g> 243 + <use xlink:href="#mef640d9f3a" x="44.533594" y="57.206328" style="stroke: #000000; stroke-width: 0.8"/> 244 + </g> 245 + </g> 246 + <g id="text_14"> 247 + <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="37.533594" y="61.005156" transform="rotate(-0 37.533594 61.005156)">80</text> 248 + </g> 249 + </g> 250 + <g id="text_15"> 251 + <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: middle" x="14.798438" y="214.616953" transform="rotate(-90 14.798438 214.616953)">Nivel [dB]</text> 252 + </g> 253 + </g> 254 + <g id="line2d_27"> 255 + <path d="M 74.36076 63.182301 256 + L 173.784647 51.230355 257 + L 273.208535 45.254382 258 + L 372.632422 54.218342 259 + L 472.056309 66.170288 260 + L 571.480196 81.11022 261 + L 670.904084 99.038139 262 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke: #d62728; stroke-width: 2; stroke-linecap: square"/> 263 + <defs> 264 + <path id="mc99916e8d1" d="M 0 3 265 + C 0.795609 3 1.55874 2.683901 2.12132 2.12132 266 + C 2.683901 1.55874 3 0.795609 3 0 267 + C 3 -0.795609 2.683901 -1.55874 2.12132 -2.12132 268 + C 1.55874 -2.683901 0.795609 -3 0 -3 269 + C -0.795609 -3 -1.55874 -2.683901 -2.12132 -2.12132 270 + C -2.683901 -1.55874 -3 -0.795609 -3 0 271 + C -3 0.795609 -2.683901 1.55874 -2.12132 2.12132 272 + C -1.55874 2.683901 -0.795609 3 0 3 273 + z 274 + " style="stroke: #d62728"/> 275 + </defs> 276 + <g clip-path="url(#pfd9d6b87fa)"> 277 + <use xlink:href="#mc99916e8d1" x="74.36076" y="63.182301" style="fill: #d62728; stroke: #d62728"/> 278 + <use xlink:href="#mc99916e8d1" x="173.784647" y="51.230355" style="fill: #d62728; stroke: #d62728"/> 279 + <use xlink:href="#mc99916e8d1" x="273.208535" y="45.254382" style="fill: #d62728; stroke: #d62728"/> 280 + <use xlink:href="#mc99916e8d1" x="372.632422" y="54.218342" style="fill: #d62728; stroke: #d62728"/> 281 + <use xlink:href="#mc99916e8d1" x="472.056309" y="66.170288" style="fill: #d62728; stroke: #d62728"/> 282 + <use xlink:href="#mc99916e8d1" x="571.480196" y="81.11022" style="fill: #d62728; stroke: #d62728"/> 283 + <use xlink:href="#mc99916e8d1" x="670.904084" y="99.038139" style="fill: #d62728; stroke: #d62728"/> 284 + </g> 285 + </g> 286 + <g id="line2d_28"> 287 + <path d="M 74.36076 82.863104 288 + L 173.784647 74.721236 289 + L 273.208535 74.725105 290 + L 372.632422 91.036288 291 + L 472.056309 111.119004 292 + L 571.480196 134.610871 293 + L 670.904084 161.309316 294 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke: #2ca02c; stroke-width: 2; stroke-linecap: square"/> 295 + <defs> 296 + <path id="m17eb9bc728" d="M -3 3 297 + L 3 3 298 + L 3 -3 299 + L -3 -3 300 + z 301 + " style="stroke: #2ca02c; stroke-linejoin: miter"/> 302 + </defs> 303 + <g clip-path="url(#pfd9d6b87fa)"> 304 + <use xlink:href="#m17eb9bc728" x="74.36076" y="82.863104" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 305 + <use xlink:href="#m17eb9bc728" x="173.784647" y="74.721236" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 306 + <use xlink:href="#m17eb9bc728" x="273.208535" y="74.725105" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 307 + <use xlink:href="#m17eb9bc728" x="372.632422" y="91.036288" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 308 + <use xlink:href="#m17eb9bc728" x="472.056309" y="111.119004" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 309 + <use xlink:href="#m17eb9bc728" x="571.480196" y="134.610871" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 310 + <use xlink:href="#m17eb9bc728" x="670.904084" y="161.309316" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 311 + </g> 312 + </g> 313 + <g id="line2d_29"> 314 + <path d="M 74.36076 246.518748 315 + L 173.784647 247.340839 316 + L 273.208535 256.308668 317 + L 372.632422 281.583811 318 + L 472.056309 310.630486 319 + L 571.480196 343.086312 320 + L 670.904084 378.748717 321 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #e0e0e0"/> 322 + <defs> 323 + <path id="m4081adc7ff" d="M 0 1.5 324 + C 0.397805 1.5 0.77937 1.341951 1.06066 1.06066 325 + C 1.341951 0.77937 1.5 0.397805 1.5 0 326 + C 1.5 -0.397805 1.341951 -0.77937 1.06066 -1.06066 327 + C 0.77937 -1.341951 0.397805 -1.5 0 -1.5 328 + C -0.397805 -1.5 -0.77937 -1.341951 -1.06066 -1.06066 329 + C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0 330 + C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066 331 + C -0.77937 1.341951 -0.397805 1.5 0 1.5 332 + z 333 + " style="stroke: #e0e0e0"/> 334 + </defs> 335 + <g clip-path="url(#pfd9d6b87fa)"> 336 + <use xlink:href="#m4081adc7ff" x="74.36076" y="246.518748" style="fill: #e0e0e0; stroke: #e0e0e0"/> 337 + <use xlink:href="#m4081adc7ff" x="173.784647" y="247.340839" style="fill: #e0e0e0; stroke: #e0e0e0"/> 338 + <use xlink:href="#m4081adc7ff" x="273.208535" y="256.308668" style="fill: #e0e0e0; stroke: #e0e0e0"/> 339 + <use xlink:href="#m4081adc7ff" x="372.632422" y="281.583811" style="fill: #e0e0e0; stroke: #e0e0e0"/> 340 + <use xlink:href="#m4081adc7ff" x="472.056309" y="310.630486" style="fill: #e0e0e0; stroke: #e0e0e0"/> 341 + <use xlink:href="#m4081adc7ff" x="571.480196" y="343.086312" style="fill: #e0e0e0; stroke: #e0e0e0"/> 342 + <use xlink:href="#m4081adc7ff" x="670.904084" y="378.748717" style="fill: #e0e0e0; stroke: #e0e0e0"/> 343 + </g> 344 + </g> 345 + <g id="line2d_30"> 346 + <path d="M 74.36076 251.749554 347 + L 173.784647 252.571646 348 + L 273.208535 261.539475 349 + L 372.632422 286.814617 350 + L 472.056309 315.861293 351 + L 571.480196 348.317119 352 + L 670.904084 383.979524 353 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #e0e0e0"/> 354 + <g clip-path="url(#pfd9d6b87fa)"> 355 + <use xlink:href="#m4081adc7ff" x="74.36076" y="251.749554" style="fill: #e0e0e0; stroke: #e0e0e0"/> 356 + <use xlink:href="#m4081adc7ff" x="173.784647" y="252.571646" style="fill: #e0e0e0; stroke: #e0e0e0"/> 357 + <use xlink:href="#m4081adc7ff" x="273.208535" y="261.539475" style="fill: #e0e0e0; stroke: #e0e0e0"/> 358 + <use xlink:href="#m4081adc7ff" x="372.632422" y="286.814617" style="fill: #e0e0e0; stroke: #e0e0e0"/> 359 + <use xlink:href="#m4081adc7ff" x="472.056309" y="315.861293" style="fill: #e0e0e0; stroke: #e0e0e0"/> 360 + <use xlink:href="#m4081adc7ff" x="571.480196" y="348.317119" style="fill: #e0e0e0; stroke: #e0e0e0"/> 361 + <use xlink:href="#m4081adc7ff" x="670.904084" y="383.979524" style="fill: #e0e0e0; stroke: #e0e0e0"/> 362 + </g> 363 + </g> 364 + <g id="line2d_31"> 365 + <path d="M 74.36076 239.877618 366 + L 173.784647 240.699709 367 + L 273.208535 249.667538 368 + L 372.632422 274.942681 369 + L 472.056309 303.989356 370 + L 571.480196 336.445183 371 + L 670.904084 372.107587 372 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke: #1f77b4; stroke-width: 2.4; stroke-linecap: square"/> 373 + <defs> 374 + <path id="mda33bb53f1" d="M -0 4.242641 375 + L 4.242641 0 376 + L 0 -4.242641 377 + L -4.242641 -0 378 + z 379 + " style="stroke: #1f77b4; stroke-linejoin: miter"/> 380 + </defs> 381 + <g clip-path="url(#pfd9d6b87fa)"> 382 + <use xlink:href="#mda33bb53f1" x="74.36076" y="239.877618" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 383 + <use xlink:href="#mda33bb53f1" x="173.784647" y="240.699709" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 384 + <use xlink:href="#mda33bb53f1" x="273.208535" y="249.667538" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 385 + <use xlink:href="#mda33bb53f1" x="372.632422" y="274.942681" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 386 + <use xlink:href="#mda33bb53f1" x="472.056309" y="303.989356" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 387 + <use xlink:href="#mda33bb53f1" x="571.480196" y="336.445183" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 388 + <use xlink:href="#mda33bb53f1" x="670.904084" y="372.107587" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 389 + </g> 390 + </g> 391 + <g id="patch_3"> 392 + <path d="M 44.533594 400.915781 393 + L 44.533594 28.318125 394 + " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 395 + </g> 396 + <g id="patch_4"> 397 + <path d="M 700.73125 400.915781 398 + L 700.73125 28.318125 399 + " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 400 + </g> 401 + <g id="patch_5"> 402 + <path d="M 44.533594 400.915781 403 + L 700.73125 400.915781 404 + " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 405 + </g> 406 + <g id="patch_6"> 407 + <path d="M 44.533594 28.318125 408 + L 700.73125 28.318125 409 + " style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 410 + </g> 411 + <g id="text_16"> 412 + <g id="patch_7"> 413 + <path d="M 54.376559 397.713828 414 + L 356.29523 397.713828 415 + Q 360.54523 397.713828 360.54523 393.463828 416 + L 360.54523 362.721387 417 + Q 360.54523 358.471387 356.29523 358.471387 418 + L 54.376559 358.471387 419 + Q 50.126559 358.471387 50.126559 362.721387 420 + L 50.126559 393.463828 421 + Q 50.126559 397.713828 54.376559 397.713828 422 + z 423 + " style="fill: #f0f2f5; stroke: #e0e0e0; stroke-linejoin: miter"/> 424 + </g> 425 + <text style="font-size: 8.5px; font-family: 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Computer Modern Typewriter', 'Andale Mono', 'Nimbus Mono L', 'Courier New', 'Courier', 'Fixed', 'Terminal', monospace" transform="translate(54.376559 370.076045)">DC = 10 lg(|Ys+Yi|^2 / (|Ys| Re Yi))</text> 426 + <text style="font-size: 8.5px; font-family: 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Computer Modern Typewriter', 'Andale Mono', 'Nimbus Mono L', 'Courier New', 'Courier', 'Fixed', 'Terminal', monospace" transform="translate(54.376559 380.323525)">Ln,s,ij = LWs,inst - Dsa - Rij - 10 lg(Si/S0) - 10 lg(A0/4)</text> 427 + <text style="font-size: 8.5px; font-family: 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Computer Modern Typewriter', 'Andale Mono', 'Nimbus Mono L', 'Courier New', 'Courier', 'Fixed', 'Terminal', monospace" transform="translate(54.376559 390.571006)">Ln,s = 10 lg(sum 10^(Ln,s,ij/10)), S0 = A0 = 10 m2</text> 428 + </g> 429 + <g id="text_17"> 430 + <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="372.632422" y="16.318125" transform="rotate(-0 372.632422 16.318125)">Ruido estructural instalado EN 12354-5</text> 431 + </g> 432 + <g id="legend_1"> 433 + <g id="patch_8"> 434 + <path d="M 526.40125 90.424453 435 + L 694.43125 90.424453 436 + Q 696.23125 90.424453 696.23125 88.624453 437 + L 696.23125 34.618125 438 + Q 696.23125 32.818125 694.43125 32.818125 439 + L 526.40125 32.818125 440 + Q 524.60125 32.818125 524.60125 34.618125 441 + L 524.60125 88.624453 442 + Q 524.60125 90.424453 526.40125 90.424453 443 + z 444 + " style="fill: #ffffff; opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter"/> 445 + </g> 446 + <g id="line2d_32"> 447 + <path d="M 528.20125 40.468125 448 + L 537.20125 40.468125 449 + L 546.20125 40.468125 450 + " style="fill: none; stroke: #d62728; stroke-width: 2; stroke-linecap: square"/> 451 + <g> 452 + <use xlink:href="#mc99916e8d1" x="537.20125" y="40.468125" style="fill: #d62728; stroke: #d62728"/> 453 + </g> 454 + </g> 455 + <g id="text_18"> 456 + <!-- característica $L_{Ws,c}$ (EN 15657) --> 457 + <g transform="translate(553.40125 43.618125)"> 458 + <text> 459 + <tspan x="0" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">c</tspan> 460 + <tspan x="4.948242" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">a</tspan> 461 + <tspan x="10.463379" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">r</tspan> 462 + <tspan x="14.163574" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">a</tspan> 463 + <tspan x="19.678711" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">c</tspan> 464 + <tspan x="24.626953" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">t</tspan> 465 + <tspan x="28.155762" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">e</tspan> 466 + <tspan x="33.692871" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">r</tspan> 467 + <tspan x="37.393066" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">í</tspan> 468 + <tspan x="39.893555" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">s</tspan> 469 + <tspan x="44.58252" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">t</tspan> 470 + <tspan x="48.111328" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">i</tspan> 471 + <tspan x="50.611816" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">c</tspan> 472 + <tspan x="55.560059" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">a</tspan> 473 + <tspan x="61.075195" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'"> </tspan> 474 + <tspan x="85.401562" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'"> </tspan> 475 + <tspan x="88.262402" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">(</tspan> 476 + <tspan x="91.773633" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">E</tspan> 477 + <tspan x="97.460156" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">N</tspan> 478 + <tspan x="104.192578" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'"> </tspan> 479 + <tspan x="107.053418" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">1</tspan> 480 + <tspan x="112.779492" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">5</tspan> 481 + <tspan x="118.505566" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">6</tspan> 482 + <tspan x="124.231641" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">5</tspan> 483 + <tspan x="129.957715" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">7</tspan> 484 + <tspan x="135.683789" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'">)</tspan> 485 + <tspan x="63.936035" y="-0.796875" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'">L</tspan> 486 + <tspan x="68.950195" y="0.553121" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">W</tspan> 487 + <tspan x="75.179443" y="0.553121" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">s</tspan> 488 + <tspan x="81.691699" y="0.553121" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">c</tspan> 489 + <tspan x="78.461719" y="0.553121" style="font-size: 6.3px; font-family: 'DejaVu Sans'">,</tspan> 490 + </text> 491 + </g> 492 + </g> 493 + <g id="line2d_33"> 494 + <path d="M 528.20125 53.970234 495 + L 537.20125 53.970234 496 + L 546.20125 53.970234 497 + " style="fill: none; stroke: #2ca02c; stroke-width: 2; stroke-linecap: square"/> 498 + <g> 499 + <use xlink:href="#m17eb9bc728" x="537.20125" y="53.970234" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 500 + </g> 501 + </g> 502 + <g id="text_19"> 503 + <!-- instalada $L_{Ws,inst}$ = $L_{Ws,c}-D_C$ --> 504 + <g transform="translate(553.40125 57.120234)"> 505 + <text> 506 + <tspan x="0" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">i</tspan> 507 + <tspan x="2.500488" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">n</tspan> 508 + <tspan x="8.20459" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">s</tspan> 509 + <tspan x="12.893555" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">t</tspan> 510 + <tspan x="16.422363" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">a</tspan> 511 + <tspan x="21.9375" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">l</tspan> 512 + <tspan x="24.437988" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">a</tspan> 513 + <tspan x="29.953125" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">d</tspan> 514 + <tspan x="35.666016" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">a</tspan> 515 + <tspan x="41.181152" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'"> </tspan> 516 + <tspan x="73.539404" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'"> </tspan> 517 + <tspan x="76.400244" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">=</tspan> 518 + <tspan x="83.94126" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'"> </tspan> 519 + <tspan x="110.021045" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">−</tspan> 520 + <tspan x="44.041992" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'">L</tspan> 521 + <tspan x="86.8021" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'">L</tspan> 522 + <tspan x="119.315479" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'">D</tspan> 523 + <tspan x="49.056152" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">W</tspan> 524 + <tspan x="55.2854" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">s</tspan> 525 + <tspan x="61.797656" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">i</tspan> 526 + <tspan x="63.547998" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">n</tspan> 527 + <tspan x="67.540869" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">s</tspan> 528 + <tspan x="70.823145" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">t</tspan> 529 + <tspan x="91.81626" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">W</tspan> 530 + <tspan x="98.045508" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">s</tspan> 531 + <tspan x="104.557764" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">c</tspan> 532 + <tspan x="126.245654" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">C</tspan> 533 + <tspan x="58.567676" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'">,</tspan> 534 + <tspan x="101.327783" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'">,</tspan> 535 + </text> 536 + </g> 537 + </g> 538 + <g id="line2d_34"> 539 + <path d="M 528.20125 67.472344 540 + L 537.20125 67.472344 541 + L 546.20125 67.472344 542 + " style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #e0e0e0"/> 543 + <g> 544 + <use xlink:href="#m4081adc7ff" x="537.20125" y="67.472344" style="fill: #e0e0e0; stroke: #e0e0e0"/> 545 + </g> 546 + </g> 547 + <g id="text_20"> 548 + <!-- caminos $L_{n,s,ij}$ --> 549 + <g transform="translate(553.40125 70.622344)"> 550 + <text> 551 + <tspan x="0" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">c</tspan> 552 + <tspan x="4.948242" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">a</tspan> 553 + <tspan x="10.463379" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">m</tspan> 554 + <tspan x="19.230469" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">i</tspan> 555 + <tspan x="21.730957" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">n</tspan> 556 + <tspan x="27.435059" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">o</tspan> 557 + <tspan x="32.941406" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">s</tspan> 558 + <tspan x="37.630371" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'"> </tspan> 559 + <tspan x="40.491211" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'">L</tspan> 560 + <tspan x="45.505371" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">n</tspan> 561 + <tspan x="52.728223" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">s</tspan> 562 + <tspan x="59.240479" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">i</tspan> 563 + <tspan x="60.99082" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">j</tspan> 564 + <tspan x="49.498242" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'">,</tspan> 565 + <tspan x="56.010498" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'">,</tspan> 566 + </text> 567 + </g> 568 + </g> 569 + <g id="line2d_35"> 570 + <path d="M 528.20125 81.512344 571 + L 537.20125 81.512344 572 + L 546.20125 81.512344 573 + " style="fill: none; stroke: #1f77b4; stroke-width: 2.4; stroke-linecap: square"/> 574 + <g> 575 + <use xlink:href="#mda33bb53f1" x="537.20125" y="81.512344" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 576 + </g> 577 + </g> 578 + <g id="text_21"> 579 + <!-- total $L_{n,s}$ --> 580 + <g transform="translate(553.40125 84.662344)"> 581 + <text> 582 + <tspan x="0" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">t</tspan> 583 + <tspan x="3.528809" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">o</tspan> 584 + <tspan x="9.035156" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">t</tspan> 585 + <tspan x="12.563965" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">a</tspan> 586 + <tspan x="18.079102" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'">l</tspan> 587 + <tspan x="20.57959" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'"> </tspan> 588 + <tspan x="23.44043" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'">L</tspan> 589 + <tspan x="28.45459" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">n</tspan> 590 + <tspan x="35.677441" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'">s</tspan> 591 + <tspan x="32.447461" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'">,</tspan> 592 + </text> 593 + </g> 594 + </g> 595 + </g> 596 + </g> 597 + </g> 598 + <defs> 599 + <clipPath id="pfd9d6b87fa"> 600 + <rect x="44.533594" y="28.318125" width="656.197656" height="372.597656"/> 601 + </clipPath> 602 + </defs> 603 + </svg>
+603
.github/images/installed_structure_borne_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="707.93125pt" height="439.116562pt" viewBox="0 0 707.93125 439.116562" 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 439.116562 24 + L 707.93125 439.116562 25 + L 707.93125 0 26 + L 0 0 27 + z 28 + "/> 29 + </g> 30 + <g id="axes_1"> 31 + <g id="patch_2"> 32 + <path d="M 44.533594 400.915781 33 + L 700.73125 400.915781 34 + L 700.73125 28.318125 35 + L 44.533594 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 74.36076 400.915781 43 + L 74.36076 28.318125 44 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #ffffff; 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="74.36076" y="400.915781" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 54 + </g> 55 + </g> 56 + <g id="text_1"> 57 + <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: middle; fill: #ffffff" x="74.36076" y="415.513438" transform="rotate(-0 74.36076 415.513438)">63</text> 58 + </g> 59 + </g> 60 + <g id="xtick_2"> 61 + <g id="line2d_3"> 62 + <path d="M 173.784647 400.915781 63 + L 173.784647 28.318125 64 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #ffffff; stroke-opacity: 0.5; stroke-width: 0.8"/> 65 + </g> 66 + <g id="line2d_4"> 67 + <g> 68 + <use xlink:href="#m8d14ee1197" x="173.784647" y="400.915781" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 69 + </g> 70 + </g> 71 + <g id="text_2"> 72 + <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: middle; fill: #ffffff" x="173.784647" y="415.513438" transform="rotate(-0 173.784647 415.513438)">125</text> 73 + </g> 74 + </g> 75 + <g id="xtick_3"> 76 + <g id="line2d_5"> 77 + <path d="M 273.208535 400.915781 78 + L 273.208535 28.318125 79 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #ffffff; stroke-opacity: 0.5; stroke-width: 0.8"/> 80 + </g> 81 + <g id="line2d_6"> 82 + <g> 83 + <use xlink:href="#m8d14ee1197" x="273.208535" y="400.915781" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 84 + </g> 85 + </g> 86 + <g id="text_3"> 87 + <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: middle; fill: #ffffff" x="273.208535" y="415.513438" transform="rotate(-0 273.208535 415.513438)">250</text> 88 + </g> 89 + </g> 90 + <g id="xtick_4"> 91 + <g id="line2d_7"> 92 + <path d="M 372.632422 400.915781 93 + L 372.632422 28.318125 94 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #ffffff; stroke-opacity: 0.5; stroke-width: 0.8"/> 95 + </g> 96 + <g id="line2d_8"> 97 + <g> 98 + <use xlink:href="#m8d14ee1197" x="372.632422" y="400.915781" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 99 + </g> 100 + </g> 101 + <g id="text_4"> 102 + <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: middle; fill: #ffffff" x="372.632422" y="415.513438" transform="rotate(-0 372.632422 415.513438)">500</text> 103 + </g> 104 + </g> 105 + <g id="xtick_5"> 106 + <g id="line2d_9"> 107 + <path d="M 472.056309 400.915781 108 + L 472.056309 28.318125 109 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #ffffff; stroke-opacity: 0.5; stroke-width: 0.8"/> 110 + </g> 111 + <g id="line2d_10"> 112 + <g> 113 + <use xlink:href="#m8d14ee1197" x="472.056309" y="400.915781" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 114 + </g> 115 + </g> 116 + <g id="text_5"> 117 + <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: middle; fill: #ffffff" x="472.056309" y="415.513438" transform="rotate(-0 472.056309 415.513438)">1000</text> 118 + </g> 119 + </g> 120 + <g id="xtick_6"> 121 + <g id="line2d_11"> 122 + <path d="M 571.480196 400.915781 123 + L 571.480196 28.318125 124 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #ffffff; stroke-opacity: 0.5; stroke-width: 0.8"/> 125 + </g> 126 + <g id="line2d_12"> 127 + <g> 128 + <use xlink:href="#m8d14ee1197" x="571.480196" y="400.915781" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 129 + </g> 130 + </g> 131 + <g id="text_6"> 132 + <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: middle; fill: #ffffff" x="571.480196" y="415.513438" transform="rotate(-0 571.480196 415.513438)">2000</text> 133 + </g> 134 + </g> 135 + <g id="xtick_7"> 136 + <g id="line2d_13"> 137 + <path d="M 670.904084 400.915781 138 + L 670.904084 28.318125 139 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #ffffff; stroke-opacity: 0.5; stroke-width: 0.8"/> 140 + </g> 141 + <g id="line2d_14"> 142 + <g> 143 + <use xlink:href="#m8d14ee1197" x="670.904084" y="400.915781" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 144 + </g> 145 + </g> 146 + <g id="text_7"> 147 + <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: middle; fill: #ffffff" x="670.904084" y="415.513438" transform="rotate(-0 670.904084 415.513438)">4000</text> 148 + </g> 149 + </g> 150 + <g id="text_8"> 151 + <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: middle; fill: #ffffff" x="372.632422" y="429.514219" transform="rotate(-0 372.632422 429.514219)">Frecuencia [Hz]</text> 152 + </g> 153 + </g> 154 + <g id="matplotlib.axis_2"> 155 + <g id="ytick_1"> 156 + <g id="line2d_15"> 157 + <path d="M 44.533594 356.004978 158 + L 700.73125 356.004978 159 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 160 + </g> 161 + <g id="line2d_16"> 162 + <defs> 163 + <path id="m5e07181663" d="M 0 0 164 + L -3.5 0 165 + " style="stroke: #ffffff; stroke-width: 0.8"/> 166 + </defs> 167 + <g> 168 + <use xlink:href="#m5e07181663" x="44.533594" y="356.004978" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 169 + </g> 170 + </g> 171 + <g id="text_9"> 172 + <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="37.533594" y="359.803806" transform="rotate(-0 37.533594 359.803806)">-20</text> 173 + </g> 174 + </g> 175 + <g id="ytick_2"> 176 + <g id="line2d_17"> 177 + <path d="M 44.533594 296.245248 178 + L 700.73125 296.245248 179 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 180 + </g> 181 + <g id="line2d_18"> 182 + <g> 183 + <use xlink:href="#m5e07181663" x="44.533594" y="296.245248" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 184 + </g> 185 + </g> 186 + <g id="text_10"> 187 + <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="37.533594" y="300.044076" transform="rotate(-0 37.533594 300.044076)">0</text> 188 + </g> 189 + </g> 190 + <g id="ytick_3"> 191 + <g id="line2d_19"> 192 + <path d="M 44.533594 236.485518 193 + L 700.73125 236.485518 194 + " clip-path="url(#pfd9d6b87fa)" 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_20"> 197 + <g> 198 + <use xlink:href="#m5e07181663" x="44.533594" y="236.485518" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 199 + </g> 200 + </g> 201 + <g id="text_11"> 202 + <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="37.533594" y="240.284346" transform="rotate(-0 37.533594 240.284346)">20</text> 203 + </g> 204 + </g> 205 + <g id="ytick_4"> 206 + <g id="line2d_21"> 207 + <path d="M 44.533594 176.725788 208 + L 700.73125 176.725788 209 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 210 + </g> 211 + <g id="line2d_22"> 212 + <g> 213 + <use xlink:href="#m5e07181663" x="44.533594" y="176.725788" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 214 + </g> 215 + </g> 216 + <g id="text_12"> 217 + <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="37.533594" y="180.524616" transform="rotate(-0 37.533594 180.524616)">40</text> 218 + </g> 219 + </g> 220 + <g id="ytick_5"> 221 + <g id="line2d_23"> 222 + <path d="M 44.533594 116.966058 223 + L 700.73125 116.966058 224 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 225 + </g> 226 + <g id="line2d_24"> 227 + <g> 228 + <use xlink:href="#m5e07181663" x="44.533594" y="116.966058" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 229 + </g> 230 + </g> 231 + <g id="text_13"> 232 + <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="37.533594" y="120.764886" transform="rotate(-0 37.533594 120.764886)">60</text> 233 + </g> 234 + </g> 235 + <g id="ytick_6"> 236 + <g id="line2d_25"> 237 + <path d="M 44.533594 57.206328 238 + L 700.73125 57.206328 239 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 2.96,1.28; stroke-dashoffset: 0; stroke: #555555; stroke-opacity: 0.5; stroke-width: 0.8"/> 240 + </g> 241 + <g id="line2d_26"> 242 + <g> 243 + <use xlink:href="#m5e07181663" x="44.533594" y="57.206328" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/> 244 + </g> 245 + </g> 246 + <g id="text_14"> 247 + <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="37.533594" y="61.005156" transform="rotate(-0 37.533594 61.005156)">80</text> 248 + </g> 249 + </g> 250 + <g id="text_15"> 251 + <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: middle; fill: #ffffff" x="14.798438" y="214.616953" transform="rotate(-90 14.798438 214.616953)">Nivel [dB]</text> 252 + </g> 253 + </g> 254 + <g id="line2d_27"> 255 + <path d="M 74.36076 63.182301 256 + L 173.784647 51.230355 257 + L 273.208535 45.254382 258 + L 372.632422 54.218342 259 + L 472.056309 66.170288 260 + L 571.480196 81.11022 261 + L 670.904084 99.038139 262 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke: #d62728; stroke-width: 2; stroke-linecap: square"/> 263 + <defs> 264 + <path id="mc99916e8d1" d="M 0 3 265 + C 0.795609 3 1.55874 2.683901 2.12132 2.12132 266 + C 2.683901 1.55874 3 0.795609 3 0 267 + C 3 -0.795609 2.683901 -1.55874 2.12132 -2.12132 268 + C 1.55874 -2.683901 0.795609 -3 0 -3 269 + C -0.795609 -3 -1.55874 -2.683901 -2.12132 -2.12132 270 + C -2.683901 -1.55874 -3 -0.795609 -3 0 271 + C -3 0.795609 -2.683901 1.55874 -2.12132 2.12132 272 + C -1.55874 2.683901 -0.795609 3 0 3 273 + z 274 + " style="stroke: #d62728"/> 275 + </defs> 276 + <g clip-path="url(#pfd9d6b87fa)"> 277 + <use xlink:href="#mc99916e8d1" x="74.36076" y="63.182301" style="fill: #d62728; stroke: #d62728"/> 278 + <use xlink:href="#mc99916e8d1" x="173.784647" y="51.230355" style="fill: #d62728; stroke: #d62728"/> 279 + <use xlink:href="#mc99916e8d1" x="273.208535" y="45.254382" style="fill: #d62728; stroke: #d62728"/> 280 + <use xlink:href="#mc99916e8d1" x="372.632422" y="54.218342" style="fill: #d62728; stroke: #d62728"/> 281 + <use xlink:href="#mc99916e8d1" x="472.056309" y="66.170288" style="fill: #d62728; stroke: #d62728"/> 282 + <use xlink:href="#mc99916e8d1" x="571.480196" y="81.11022" style="fill: #d62728; stroke: #d62728"/> 283 + <use xlink:href="#mc99916e8d1" x="670.904084" y="99.038139" style="fill: #d62728; stroke: #d62728"/> 284 + </g> 285 + </g> 286 + <g id="line2d_28"> 287 + <path d="M 74.36076 82.863104 288 + L 173.784647 74.721236 289 + L 273.208535 74.725105 290 + L 372.632422 91.036288 291 + L 472.056309 111.119004 292 + L 571.480196 134.610871 293 + L 670.904084 161.309316 294 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke: #2ca02c; stroke-width: 2; stroke-linecap: square"/> 295 + <defs> 296 + <path id="m17eb9bc728" d="M -3 3 297 + L 3 3 298 + L 3 -3 299 + L -3 -3 300 + z 301 + " style="stroke: #2ca02c; stroke-linejoin: miter"/> 302 + </defs> 303 + <g clip-path="url(#pfd9d6b87fa)"> 304 + <use xlink:href="#m17eb9bc728" x="74.36076" y="82.863104" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 305 + <use xlink:href="#m17eb9bc728" x="173.784647" y="74.721236" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 306 + <use xlink:href="#m17eb9bc728" x="273.208535" y="74.725105" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 307 + <use xlink:href="#m17eb9bc728" x="372.632422" y="91.036288" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 308 + <use xlink:href="#m17eb9bc728" x="472.056309" y="111.119004" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 309 + <use xlink:href="#m17eb9bc728" x="571.480196" y="134.610871" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 310 + <use xlink:href="#m17eb9bc728" x="670.904084" y="161.309316" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 311 + </g> 312 + </g> 313 + <g id="line2d_29"> 314 + <path d="M 74.36076 246.518748 315 + L 173.784647 247.340839 316 + L 273.208535 256.308668 317 + L 372.632422 281.583811 318 + L 472.056309 310.630486 319 + L 571.480196 343.086312 320 + L 670.904084 378.748717 321 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #555555"/> 322 + <defs> 323 + <path id="ma4d85e82af" d="M 0 1.5 324 + C 0.397805 1.5 0.77937 1.341951 1.06066 1.06066 325 + C 1.341951 0.77937 1.5 0.397805 1.5 0 326 + C 1.5 -0.397805 1.341951 -0.77937 1.06066 -1.06066 327 + C 0.77937 -1.341951 0.397805 -1.5 0 -1.5 328 + C -0.397805 -1.5 -0.77937 -1.341951 -1.06066 -1.06066 329 + C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0 330 + C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066 331 + C -0.77937 1.341951 -0.397805 1.5 0 1.5 332 + z 333 + " style="stroke: #555555"/> 334 + </defs> 335 + <g clip-path="url(#pfd9d6b87fa)"> 336 + <use xlink:href="#ma4d85e82af" x="74.36076" y="246.518748" style="fill: #555555; stroke: #555555"/> 337 + <use xlink:href="#ma4d85e82af" x="173.784647" y="247.340839" style="fill: #555555; stroke: #555555"/> 338 + <use xlink:href="#ma4d85e82af" x="273.208535" y="256.308668" style="fill: #555555; stroke: #555555"/> 339 + <use xlink:href="#ma4d85e82af" x="372.632422" y="281.583811" style="fill: #555555; stroke: #555555"/> 340 + <use xlink:href="#ma4d85e82af" x="472.056309" y="310.630486" style="fill: #555555; stroke: #555555"/> 341 + <use xlink:href="#ma4d85e82af" x="571.480196" y="343.086312" style="fill: #555555; stroke: #555555"/> 342 + <use xlink:href="#ma4d85e82af" x="670.904084" y="378.748717" style="fill: #555555; stroke: #555555"/> 343 + </g> 344 + </g> 345 + <g id="line2d_30"> 346 + <path d="M 74.36076 251.749554 347 + L 173.784647 252.571646 348 + L 273.208535 261.539475 349 + L 372.632422 286.814617 350 + L 472.056309 315.861293 351 + L 571.480196 348.317119 352 + L 670.904084 383.979524 353 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #555555"/> 354 + <g clip-path="url(#pfd9d6b87fa)"> 355 + <use xlink:href="#ma4d85e82af" x="74.36076" y="251.749554" style="fill: #555555; stroke: #555555"/> 356 + <use xlink:href="#ma4d85e82af" x="173.784647" y="252.571646" style="fill: #555555; stroke: #555555"/> 357 + <use xlink:href="#ma4d85e82af" x="273.208535" y="261.539475" style="fill: #555555; stroke: #555555"/> 358 + <use xlink:href="#ma4d85e82af" x="372.632422" y="286.814617" style="fill: #555555; stroke: #555555"/> 359 + <use xlink:href="#ma4d85e82af" x="472.056309" y="315.861293" style="fill: #555555; stroke: #555555"/> 360 + <use xlink:href="#ma4d85e82af" x="571.480196" y="348.317119" style="fill: #555555; stroke: #555555"/> 361 + <use xlink:href="#ma4d85e82af" x="670.904084" y="383.979524" style="fill: #555555; stroke: #555555"/> 362 + </g> 363 + </g> 364 + <g id="line2d_31"> 365 + <path d="M 74.36076 239.877618 366 + L 173.784647 240.699709 367 + L 273.208535 249.667538 368 + L 372.632422 274.942681 369 + L 472.056309 303.989356 370 + L 571.480196 336.445183 371 + L 670.904084 372.107587 372 + " clip-path="url(#pfd9d6b87fa)" style="fill: none; stroke: #1f77b4; stroke-width: 2.4; stroke-linecap: square"/> 373 + <defs> 374 + <path id="mda33bb53f1" d="M -0 4.242641 375 + L 4.242641 0 376 + L 0 -4.242641 377 + L -4.242641 -0 378 + z 379 + " style="stroke: #1f77b4; stroke-linejoin: miter"/> 380 + </defs> 381 + <g clip-path="url(#pfd9d6b87fa)"> 382 + <use xlink:href="#mda33bb53f1" x="74.36076" y="239.877618" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 383 + <use xlink:href="#mda33bb53f1" x="173.784647" y="240.699709" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 384 + <use xlink:href="#mda33bb53f1" x="273.208535" y="249.667538" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 385 + <use xlink:href="#mda33bb53f1" x="372.632422" y="274.942681" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 386 + <use xlink:href="#mda33bb53f1" x="472.056309" y="303.989356" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 387 + <use xlink:href="#mda33bb53f1" x="571.480196" y="336.445183" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 388 + <use xlink:href="#mda33bb53f1" x="670.904084" y="372.107587" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 389 + </g> 390 + </g> 391 + <g id="patch_3"> 392 + <path d="M 44.533594 400.915781 393 + L 44.533594 28.318125 394 + " style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 395 + </g> 396 + <g id="patch_4"> 397 + <path d="M 700.73125 400.915781 398 + L 700.73125 28.318125 399 + " style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 400 + </g> 401 + <g id="patch_5"> 402 + <path d="M 44.533594 400.915781 403 + L 700.73125 400.915781 404 + " style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 405 + </g> 406 + <g id="patch_6"> 407 + <path d="M 44.533594 28.318125 408 + L 700.73125 28.318125 409 + " style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/> 410 + </g> 411 + <g id="text_16"> 412 + <g id="patch_7"> 413 + <path d="M 54.376559 397.713828 414 + L 356.29523 397.713828 415 + Q 360.54523 397.713828 360.54523 393.463828 416 + L 360.54523 362.721387 417 + Q 360.54523 358.471387 356.29523 358.471387 418 + L 54.376559 358.471387 419 + Q 50.126559 358.471387 50.126559 362.721387 420 + L 50.126559 393.463828 421 + Q 50.126559 397.713828 54.376559 397.713828 422 + z 423 + " style="fill: #1c2128; stroke: #555555; stroke-linejoin: miter"/> 424 + </g> 425 + <text style="font-size: 8.5px; font-family: 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Computer Modern Typewriter', 'Andale Mono', 'Nimbus Mono L', 'Courier New', 'Courier', 'Fixed', 'Terminal', monospace; fill: #ffffff" transform="translate(54.376559 370.076045)">DC = 10 lg(|Ys+Yi|^2 / (|Ys| Re Yi))</text> 426 + <text style="font-size: 8.5px; font-family: 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Computer Modern Typewriter', 'Andale Mono', 'Nimbus Mono L', 'Courier New', 'Courier', 'Fixed', 'Terminal', monospace; fill: #ffffff" transform="translate(54.376559 380.323525)">Ln,s,ij = LWs,inst - Dsa - Rij - 10 lg(Si/S0) - 10 lg(A0/4)</text> 427 + <text style="font-size: 8.5px; font-family: 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Computer Modern Typewriter', 'Andale Mono', 'Nimbus Mono L', 'Courier New', 'Courier', 'Fixed', 'Terminal', monospace; fill: #ffffff" transform="translate(54.376559 390.571006)">Ln,s = 10 lg(sum 10^(Ln,s,ij/10)), S0 = A0 = 10 m2</text> 428 + </g> 429 + <g id="text_17"> 430 + <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="372.632422" y="16.318125" transform="rotate(-0 372.632422 16.318125)">Ruido estructural instalado EN 12354-5</text> 431 + </g> 432 + <g id="legend_1"> 433 + <g id="patch_8"> 434 + <path d="M 526.40125 90.424453 435 + L 694.43125 90.424453 436 + Q 696.23125 90.424453 696.23125 88.624453 437 + L 696.23125 34.618125 438 + Q 696.23125 32.818125 694.43125 32.818125 439 + L 526.40125 32.818125 440 + Q 524.60125 32.818125 524.60125 34.618125 441 + L 524.60125 88.624453 442 + Q 524.60125 90.424453 526.40125 90.424453 443 + z 444 + " style="opacity: 0.8; stroke: #cccccc; stroke-linejoin: miter"/> 445 + </g> 446 + <g id="line2d_32"> 447 + <path d="M 528.20125 40.468125 448 + L 537.20125 40.468125 449 + L 546.20125 40.468125 450 + " style="fill: none; stroke: #d62728; stroke-width: 2; stroke-linecap: square"/> 451 + <g> 452 + <use xlink:href="#mc99916e8d1" x="537.20125" y="40.468125" style="fill: #d62728; stroke: #d62728"/> 453 + </g> 454 + </g> 455 + <g id="text_18"> 456 + <!-- característica $L_{Ws,c}$ (EN 15657) --> 457 + <g style="fill: #ffffff" transform="translate(553.40125 43.618125)"> 458 + <text> 459 + <tspan x="0" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">c</tspan> 460 + <tspan x="4.948242" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 461 + <tspan x="10.463379" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">r</tspan> 462 + <tspan x="14.163574" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 463 + <tspan x="19.678711" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">c</tspan> 464 + <tspan x="24.626953" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">t</tspan> 465 + <tspan x="28.155762" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">e</tspan> 466 + <tspan x="33.692871" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">r</tspan> 467 + <tspan x="37.393066" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">í</tspan> 468 + <tspan x="39.893555" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 469 + <tspan x="44.58252" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">t</tspan> 470 + <tspan x="48.111328" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 471 + <tspan x="50.611816" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">c</tspan> 472 + <tspan x="55.560059" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 473 + <tspan x="61.075195" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 474 + <tspan x="85.401562" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 475 + <tspan x="88.262402" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">(</tspan> 476 + <tspan x="91.773633" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">E</tspan> 477 + <tspan x="97.460156" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">N</tspan> 478 + <tspan x="104.192578" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 479 + <tspan x="107.053418" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">1</tspan> 480 + <tspan x="112.779492" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">5</tspan> 481 + <tspan x="118.505566" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">6</tspan> 482 + <tspan x="124.231641" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">5</tspan> 483 + <tspan x="129.957715" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">7</tspan> 484 + <tspan x="135.683789" y="-0.796875" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">)</tspan> 485 + <tspan x="63.936035" y="-0.796875" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">L</tspan> 486 + <tspan x="68.950195" y="0.553121" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">W</tspan> 487 + <tspan x="75.179443" y="0.553121" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 488 + <tspan x="81.691699" y="0.553121" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">c</tspan> 489 + <tspan x="78.461719" y="0.553121" style="font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">,</tspan> 490 + </text> 491 + </g> 492 + </g> 493 + <g id="line2d_33"> 494 + <path d="M 528.20125 53.970234 495 + L 537.20125 53.970234 496 + L 546.20125 53.970234 497 + " style="fill: none; stroke: #2ca02c; stroke-width: 2; stroke-linecap: square"/> 498 + <g> 499 + <use xlink:href="#m17eb9bc728" x="537.20125" y="53.970234" style="fill: #2ca02c; stroke: #2ca02c; stroke-linejoin: miter"/> 500 + </g> 501 + </g> 502 + <g id="text_19"> 503 + <!-- instalada $L_{Ws,inst}$ = $L_{Ws,c}-D_C$ --> 504 + <g style="fill: #ffffff" transform="translate(553.40125 57.120234)"> 505 + <text> 506 + <tspan x="0" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 507 + <tspan x="2.500488" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">n</tspan> 508 + <tspan x="8.20459" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 509 + <tspan x="12.893555" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">t</tspan> 510 + <tspan x="16.422363" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 511 + <tspan x="21.9375" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">l</tspan> 512 + <tspan x="24.437988" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 513 + <tspan x="29.953125" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">d</tspan> 514 + <tspan x="35.666016" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 515 + <tspan x="41.181152" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 516 + <tspan x="73.539404" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 517 + <tspan x="76.400244" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">=</tspan> 518 + <tspan x="83.94126" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 519 + <tspan x="110.021045" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">−</tspan> 520 + <tspan x="44.041992" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">L</tspan> 521 + <tspan x="86.8021" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">L</tspan> 522 + <tspan x="119.315479" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">D</tspan> 523 + <tspan x="49.056152" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">W</tspan> 524 + <tspan x="55.2854" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 525 + <tspan x="61.797656" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 526 + <tspan x="63.547998" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">n</tspan> 527 + <tspan x="67.540869" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 528 + <tspan x="70.823145" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">t</tspan> 529 + <tspan x="91.81626" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">W</tspan> 530 + <tspan x="98.045508" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 531 + <tspan x="104.557764" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">c</tspan> 532 + <tspan x="126.245654" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">C</tspan> 533 + <tspan x="58.567676" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">,</tspan> 534 + <tspan x="101.327783" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">,</tspan> 535 + </text> 536 + </g> 537 + </g> 538 + <g id="line2d_34"> 539 + <path d="M 528.20125 67.472344 540 + L 537.20125 67.472344 541 + L 546.20125 67.472344 542 + " style="fill: none; stroke-dasharray: 1,1.65; stroke-dashoffset: 0; stroke: #555555"/> 543 + <g> 544 + <use xlink:href="#ma4d85e82af" x="537.20125" y="67.472344" style="fill: #555555; stroke: #555555"/> 545 + </g> 546 + </g> 547 + <g id="text_20"> 548 + <!-- caminos $L_{n,s,ij}$ --> 549 + <g style="fill: #ffffff" transform="translate(553.40125 70.622344)"> 550 + <text> 551 + <tspan x="0" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">c</tspan> 552 + <tspan x="4.948242" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 553 + <tspan x="10.463379" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">m</tspan> 554 + <tspan x="19.230469" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 555 + <tspan x="21.730957" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">n</tspan> 556 + <tspan x="27.435059" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">o</tspan> 557 + <tspan x="32.941406" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 558 + <tspan x="37.630371" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 559 + <tspan x="40.491211" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">L</tspan> 560 + <tspan x="45.505371" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">n</tspan> 561 + <tspan x="52.728223" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 562 + <tspan x="59.240479" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">i</tspan> 563 + <tspan x="60.99082" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">j</tspan> 564 + <tspan x="49.498242" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">,</tspan> 565 + <tspan x="56.010498" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">,</tspan> 566 + </text> 567 + </g> 568 + </g> 569 + <g id="line2d_35"> 570 + <path d="M 528.20125 81.512344 571 + L 537.20125 81.512344 572 + L 546.20125 81.512344 573 + " style="fill: none; stroke: #1f77b4; stroke-width: 2.4; stroke-linecap: square"/> 574 + <g> 575 + <use xlink:href="#mda33bb53f1" x="537.20125" y="81.512344" style="fill: #1f77b4; stroke: #1f77b4; stroke-linejoin: miter"/> 576 + </g> 577 + </g> 578 + <g id="text_21"> 579 + <!-- total $L_{n,s}$ --> 580 + <g style="fill: #ffffff" transform="translate(553.40125 84.662344)"> 581 + <text> 582 + <tspan x="0" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">t</tspan> 583 + <tspan x="3.528809" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">o</tspan> 584 + <tspan x="9.035156" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">t</tspan> 585 + <tspan x="12.563965" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">a</tspan> 586 + <tspan x="18.079102" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">l</tspan> 587 + <tspan x="20.57959" y="-0.15625" style="font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff"> </tspan> 588 + <tspan x="23.44043" y="-0.15625" style="font-style: oblique; font-size: 9px; font-family: 'DejaVu Sans'; fill: #ffffff">L</tspan> 589 + <tspan x="28.45459" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">n</tspan> 590 + <tspan x="35.677441" y="1.193746" style="font-style: oblique; font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">s</tspan> 591 + <tspan x="32.447461" y="1.193746" style="font-size: 6.3px; font-family: 'DejaVu Sans'; fill: #ffffff">,</tspan> 592 + </text> 593 + </g> 594 + </g> 595 + </g> 596 + </g> 597 + </g> 598 + <defs> 599 + <clipPath id="pfd9d6b87fa"> 600 + <rect x="44.533594" y="28.318125" width="656.197656" height="372.597656"/> 601 + </clipPath> 602 + </defs> 603 + </svg>
+5 -2
docs/CONFORMANCE.md
··· 15 15 16 16 ## Numerical conformance report 17 17 18 - &#9989; **134/134 conformance checks pass** across 23 domains and 82 standards - filters class 1 - weightings within IEC 61672-1 class 1. 18 + &#9989; **137/137 conformance checks pass** across 23 domains and 83 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% (32/32)</summary> 125 + <summary>&#9989; <b>Room &amp; building acoustics</b> — 100% (35/35)</summary> 126 126 127 127 | Standard | Quantity | Expected (norm) | Computed | &#916; | Status | 128 128 |:---|:---|:---|:---|:---|:---:| ··· 158 158 | ISO/TS 7849-1:2009 Formula (12) | Impedance term: L_W − L_v = 10 lg(411/400) at ε = 1, S = S0 | 0.1178 dB (+/-0 dB) | 0.1178 dB | 0 dB | &#9989; | 159 159 | EN 15657:2018 Formula (14) | Reception-plate L_Ws = resonant-plate power P = ωη(mS)⟨v²⟩ (round-trip) | 55.545 dB (+/-0 dB) | 55.545 dB | 0 dB | &#9989; | 160 160 | EN 15657:2018 Formula (13) | Plate loss factor η = 2,2/(f·Ts) at 1 kHz, Ts = 0,3 s | 0.0073 (+/-0) | 0.0073 | 0 | &#9989; | 161 + | EN 12354-5:2009 Formula (19b/19c) | Coupling term → force-source limit 10 lg(|Ys|/Re{Yi}) as |Ys|≫|Yi| | 40 dB (+/-0.01 dB) | 40.001 dB | 0.001 dB | &#9989; | 162 + | EN 12354-5:2009 Formula (18b) | Installed power L_Ws,inst = L_Ws,c − D_C (80 − 10,828 dB) | 69.172 dB (+/-0 dB) | 69.172 dB | 0 dB | &#9989; | 163 + | EN 12354-5:2009 Formula (18a) | Path SPL area/absorption terms −10 lg(S/S0) − 10 lg(A0/4), S0=A0=10 m² | -3.979 dB (+/-0 dB) | -3.979 dB | 0 dB | &#9989; | 161 164 162 165 </details> 163 166
+1
docs/README.md
··· 30 30 - [Dynamic transfer stiffness of resilient elements](transfer-stiffness.md) — the ISO 10846 dynamic transfer stiffness k₂₁ of vibration isolators: the level Lₖ re 1 N/m and loss factor, the direct and indirect (transmissibility) determination methods, and the Annex-A relation to mechanical impedance and effective mass 31 31 - [Sound power from surface vibration](vibration-sound-power.md) — the ISO/TS 7849 estimation of a machine's radiated airborne sound power from its surface vibratory velocity and a radiation factor: the velocity level and calibration, the surface mean, and the Part 1 upper limit (ε=1) versus the Part 2 engineering value 32 32 - [Structure-borne sound power of building equipment](structure-borne-power.md) — the EN 15657 reception-plate method for a source's characteristic structure-borne sound power level Lₛ: the spatial mean plate velocity, the loss factor from the structural reverberation time, and the low- and high-mobility plates 33 + - [Installed structure-borne sound from equipment](installed-structure-borne.md) — the EN 12354-5 prediction of the receiving-room sound pressure level from service equipment: the coupling term from source and receiver mobilities, the installed structure-borne power, and the per-path transmission with its energetic total 33 34 - [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) 34 35 - [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) 35 36 - [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)
+6 -1
docs/api-reference.md
··· 297 297 | `structure_borne_power_level` | `function` | **Characteristic structure-borne power level (EN 15657 Formula 14).**<br>• `velocity_level` L_v [dB re 1e-9 m/s]<br>• `frequency` f [Hz], `mass_per_area` m [kg/m²], `area` S [m²]<br>• `loss_factor` η<br>L_Ws = 10 lg(2πfηmS) + L_v − 60 | `structure_borne_power_level(80, 1000, 10, 1, 0.01) # 47.98 dB` | 298 298 | `reception_plate_power` | `function` | **Reception-plate determination → result (EN 15657 clause 7).**<br>• `velocity_level` L_v (per band), `frequency` [Hz]<br>• `mass_per_area`, `area`<br>• `loss_factor` η **or** `reverberation_time` Ts | `res = reception_plate_power(lv, f, 600, 2.0, reverberation_time=0.8)`<br><br>• `StructureBornePowerResult` | 299 299 | `StructureBornePowerResult` | `dataclass` | **Characteristic structure-borne sound power (EN 15657).**<br>• `power_level` L_Ws / `velocity_level` / `loss_factor` per band<br>• `mass_per_area`, `area`, `frequencies` [Hz] or None<br>• `.total_level`: band-summed L_Ws [dB]<br>• `.plot()` | `res.power_level, res.total_level` | 300 + | `coupling_term` / `coupling_term_force_source` / `coupling_term_velocity_source` | `function` | **Coupling term D_C (EN 12354-5 Formula 19b/c/d).**<br>• `coupling_term(Ys, Yi, transfer_mobility=0)`: 10 lg(\|Ys+Yi+Yk\|²/(\|Ys\|·Re Yi))<br>• force source: 10 lg(\|Ys\|/Re Yi)<br>• velocity source: −10 lg(\|Ys\|·Re Zi) | `coupling_term(2e-4+1e-4j, 3e-5+1e-5j)` | 301 + | `installed_structure_borne_power_level` | `function` | **Installed power (EN 12354-5 Formula 18b).**<br>• `characteristic_power_level` L_Ws,c [dB]<br>• `coupling_term` D_C [dB]<br>L_Ws,inst = L_Ws,c − D_C | `installed_structure_borne_power_level(82.0, 8.5)` | 302 + | `structure_borne_pressure_level_path` / `total_structure_borne_pressure_level` | `function` | **Path & total normalised SPL (EN 12354-5 Formula 18a/17).**<br>• path: L_Ws,inst − D_sa − R_ij,ref − 10 lg(S/S0) − 10 lg(A0/4)<br>• total: 10 lg(Σ 10^(L/10)) over paths (axis 0) | `total_structure_borne_pressure_level(path_levels)` | 303 + | `installed_source_prediction` | `function` | **Full installed-source prediction → result (EN 12354-5).**<br>• `characteristic_power_level` L_Ws,c, `coupling_term` D_C<br>• `paths`: dicts with `adjustment_term`, `flanking_reduction_index`, `element_area`<br>• `frequencies` [Hz] or None | `res = installed_source_prediction(lwc, dc, paths, frequencies=f)`<br><br>• `InstalledSourceResult` | 304 + | `InstalledSourceResult` | `dataclass` | **Installed structure-borne sound prediction (EN 12354-5).**<br>• `path_levels` (paths×bands), `total_level` L_n,s per band<br>• `installed_power_level` per band, `frequencies` [Hz] or None<br>• `.overall_level`: band-summed total [dB]<br>• `.plot()`: the cascade | `res.total_level, res.overall_level` | 300 305 | `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 | 301 306 | `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) | 302 307 | `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 | ··· 450 455 | `TonalityWarning` | `warning class` | **Tonality advisory.**<br>Emitted for biased tonality estimates (e.g. coarse FFT resolution) | `warnings.simplefilter('error', TonalityWarning)` | 451 456 | `STIWarning` | `warning class` | **STI/STIPA advisory.**<br>Emitted for suspect speech-intelligibility measurements or inputs | `warnings.simplefilter('error', STIWarning)` | 452 457 | `__version__` | `str` | **Package version string.**<br>(no parameters) | `phonometry.__version__ # '3.0.0'` | 453 - | `.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`, `MobilityResult`, `TransferStiffnessResult`, `VibrationSoundPowerResult`, `StructureBornePowerResult`, `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()` | 458 + | `.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`, `MobilityResult`, `TransferStiffnessResult`, `VibrationSoundPowerResult`, `StructureBornePowerResult`, `InstalledSourceResult`, `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()` | 454 459 455 460 ## Notes 456 461
+109
docs/installed-structure-borne.md
··· 1 + ← [Documentation index](README.md) 2 + 3 + # Installed structure-borne sound from equipment (EN 12354-5) 4 + 5 + **EN 12354-5:2009** predicts the sound pressure level in a receiving room caused 6 + by building service equipment (pumps, fans, lifts, water installations) that 7 + injects **structure-borne sound** into the building. It closes the 8 + structural-vibroacoustics chain: the source is described by its characteristic 9 + structure-borne sound power level `L_Ws,c` ([EN 15657](structure-borne-power.md)), 10 + the source and receiver point mobilities set how much power is actually coupled 11 + into the structure, and the building transmission carries it to the receiving 12 + room. 13 + 14 + <picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/installed_structure_borne_dark.svg"><img src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/installed_structure_borne.svg" alt="The EN 12354-5 cascade per octave band: the characteristic structure-borne power level, the installed power level after subtracting the coupling term, the per-path normalised sound pressure levels, and their energetic total" width="82%"></picture> 15 + 16 + ## 1. Coupling and installed power 17 + 18 + Only part of the characteristic power is injected into the supporting element; 19 + the loss is the **coupling term** `D_C` (always positive), set for a point 20 + excitation by the source mobility `Y_s` and the receiver mobility `Y_i` 21 + (Formula 19b): 22 + 23 + $$ 24 + D_{C,i} = 10\lg\frac{|Y_s + Y_i|^2}{|Y_s|\,\mathrm{Re}\{Y_i\}}, 25 + $$ 26 + 27 + which reduces to `10 lg(|Y_s|/Re{Y_i})` for a **force source** (high source 28 + mobility, Formula 19c) and to `−10 lg(|Y_s|·Re{Z_i})` for a **velocity source** 29 + (low source mobility, Formula 19d); an elastic support adds its transfer 30 + mobility `Y_k` inside the modulus (Formula 19e). The **installed** power level is 31 + then (Formula 18b) `L_Ws,inst = L_Ws,c − D_C`. 32 + 33 + ```python 34 + import phonometry as ph 35 + 36 + # A near-force source (Y_s >> Y_i) on a concrete floor: 37 + dc = ph.coupling_term(2e-4 + 1e-4j, 3e-5 + 1e-5j) 38 + print(round(float(dc), 2)) # ~8.5 dB 39 + print(round(float(ph.installed_structure_borne_power_level(82.0, dc)), 1)) # installed L_Ws 40 + ``` 41 + 42 + ## 2. Transmission to the receiving room 43 + 44 + Each transmission path `i→j` gives a normalised sound pressure level from the 45 + installed power, the structure-to-airborne adjustment term `D_sa`, the flanking 46 + sound reduction index `R_ij,ref` (EN 12354-1) and the element area (Formula 18a): 47 + 48 + $$ 49 + L_{n,s,ij} = L_{Ws,\mathrm{inst},i} - D_{sa,i} - R_{ij,\mathrm{ref}} 50 + - 10\lg\frac{S_i}{S_0} - 10\lg\frac{A_0}{4}, 51 + $$ 52 + 53 + with `S₀ = A₀ = 10 m²`, and the paths combine energetically (Formula 17): 54 + 55 + ```python 56 + import numpy as np 57 + import phonometry as ph 58 + 59 + bands = np.array([250.0, 500.0, 1000.0]) 60 + res = ph.installed_source_prediction( 61 + characteristic_power_level=np.array([80.0, 82.0, 78.0]), 62 + coupling_term=np.array([9.0, 10.0, 11.0]), 63 + paths=[ 64 + {"adjustment_term": 5.0, 65 + "flanking_reduction_index": np.array([50.0, 52.0, 55.0]), "element_area": 12.0}, 66 + {"adjustment_term": 6.0, 67 + "flanking_reduction_index": np.array([52.0, 54.0, 57.0]), "element_area": 8.0}, 68 + ], 69 + frequencies=bands, 70 + ) 71 + print(np.round(res.total_level, 1)) # total L_n,s per band 72 + print(round(res.overall_level, 1)) # band-summed level [dB] 73 + ``` 74 + 75 + The `InstalledSourceResult` carries the per-path levels, the total per band, the 76 + installed power level and `.overall_level`, and its `.plot()` draws the whole 77 + cascade. 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 + bands = np.array([63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0]) 88 + lws_c = np.array([78.0, 82.0, 84.0, 81.0, 77.0, 72.0, 66.0]) 89 + ys = (2e-4 + 1e-4j) * (bands / 250.0); yi = (3e-5 + 1e-5j) * np.ones_like(bands) 90 + dc = np.array([float(ph.coupling_term(a, b)) for a, b in zip(ys, yi)]) 91 + paths = [{"adjustment_term": 6.0, 92 + "flanking_reduction_index": np.linspace(44, 62, 7), "element_area": 12.0}] 93 + res = ph.installed_source_prediction(lws_c, dc, paths, frequencies=bands) 94 + res.plot(); plt.show() 95 + ``` 96 + 97 + </details> 98 + 99 + --- 100 + 101 + **Standards.** EN 12354-5:2009, *Building acoustics — Estimation of acoustic 102 + performance of buildings from the performance of elements — Part 5: Sound levels 103 + due to service equipment*: the coupling term (clause 4.4.3, Formulae 19a-19e), 104 + the installed structure-borne power level (Formula 18b), the structure-to- 105 + airborne adjustment term (clause 4.4.4, Formulae 20a/20b), and the normalised 106 + sound pressure level per path and its energetic combination (Formulae 18a, 17). 107 + Conformance is anchored on the coupling-term force-source limit, the installed- 108 + power identity and the area/absorption terms of Formula 18a. `D_sa` and 109 + `R_ij,ref` are inputs (from measurement / EN 12354-1 / Annexes D and F).
+34
scripts/conformance_report.py
··· 1401 1401 return numeric(2.2 / (1000.0 * 0.3), eta, 1e-9) 1402 1402 1403 1403 1404 + # --- Installed structure-borne sound from equipment (EN 12354-5) --- 1405 + @register( 1406 + "Room & building acoustics", 1407 + "EN 12354-5:2009 Formula (19b/19c)", 1408 + "Coupling term → force-source limit 10 lg(|Ys|/Re{Yi}) as |Ys|≫|Yi|", 1409 + ) 1410 + def _chk_en12354_5_coupling_limit() -> Outcome: 1411 + ys, yi = 1e-3 + 0j, 1e-7 + 0j 1412 + dc = float(ph.coupling_term(ys, yi)) 1413 + limit = float(ph.coupling_term_force_source(ys, yi)) 1414 + return numeric(limit, dc, 1e-2, unit="dB", places=3) 1415 + 1416 + 1417 + @register( 1418 + "Room & building acoustics", 1419 + "EN 12354-5:2009 Formula (18b)", 1420 + "Installed power L_Ws,inst = L_Ws,c − D_C (80 − 10,828 dB)", 1421 + ) 1422 + def _chk_en12354_5_installed_power() -> Outcome: 1423 + lw = float(ph.installed_structure_borne_power_level(80.0, 10.828)) 1424 + return numeric(69.172, lw, 1e-6, unit="dB", places=3) 1425 + 1426 + 1427 + @register( 1428 + "Room & building acoustics", 1429 + "EN 12354-5:2009 Formula (18a)", 1430 + "Path SPL area/absorption terms −10 lg(S/S0) − 10 lg(A0/4), S0=A0=10 m²", 1431 + ) 1432 + def _chk_en12354_5_path_terms() -> Outcome: 1433 + # With S = S0 the area term is 0, leaving −10 lg(10/4) = −3,979 dB. 1434 + lp = float(ph.structure_borne_pressure_level_path(0.0, 0.0, 0.0, 10.0)) 1435 + return numeric(-10.0 * math.log10(10.0 / 4.0), lp, 1e-9, unit="dB", places=3) 1436 + 1437 + 1404 1438 # =========================================================================== 1405 1439 # Domain 7 - Building prediction & uncertainty 1406 1440 # ===========================================================================
+72
scripts/generate_graphs.py
··· 247 247 r"Nivel de potencia estructural $L_{Ws}$ [dB re 1 pW]", 248 248 "low-mobility plate": "placa de baja movilidad", 249 249 "high-mobility plate": "placa de alta movilidad", 250 + # installed_structure_borne figure (EN 12354-5) 251 + "EN 12354-5 Installed Structure-Borne Sound": 252 + "Ruido estructural instalado EN 12354-5", 253 + r"characteristic $L_{Ws,c}$ (EN 15657)": 254 + r"característica $L_{Ws,c}$ (EN 15657)", 255 + r"installed $L_{Ws,inst}$ = $L_{Ws,c}-D_C$": 256 + r"instalada $L_{Ws,inst}$ = $L_{Ws,c}-D_C$", 257 + "paths $L_{n,s,ij}$": "caminos $L_{n,s,ij}$", 258 + r"total $L_{n,s}$": r"total $L_{n,s}$", 250 259 # facade_prediction figure (EN 12354-3 Annex F) 251 260 "EN 12354-3 Façade Sound Insulation (Annex F example)": 252 261 "Aislamiento acústico de fachada EN 12354-3 (ejemplo del Anexo F)", ··· 3591 3600 plt.close() 3592 3601 3593 3602 3603 + def generate_installed_structure_borne(output_dir: str) -> None: 3604 + """EN 12354-5 installed structure-borne sound: characteristic power to SPL.""" 3605 + print("Generating installed_structure_borne...") 3606 + from phonometry import ( 3607 + coupling_term, 3608 + installed_source_prediction, 3609 + installed_structure_borne_power_level, 3610 + ) 3611 + 3612 + bands = np.array([63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0]) 3613 + lws_c = np.array([78.0, 82.0, 84.0, 81.0, 77.0, 72.0, 66.0]) # EN 15657 source 3614 + # Frequency-dependent source / receiver point mobilities (illustrative). 3615 + ys = (2.0e-4 + 1.0e-4j) * (bands / 250.0) 3616 + yi = (3.0e-5 + 1.0e-5j) * np.ones_like(bands) 3617 + dc = np.array([float(coupling_term(a, b)) for a, b in zip(ys, yi)]) 3618 + lws_inst = installed_structure_borne_power_level(lws_c, dc) 3619 + paths = [ 3620 + {"adjustment_term": 6.0, 3621 + "flanking_reduction_index": np.array([44., 47., 50., 53., 56., 59., 62.]), 3622 + "element_area": 12.0}, 3623 + {"adjustment_term": 7.0, 3624 + "flanking_reduction_index": np.array([46., 49., 52., 55., 58., 61., 64.]), 3625 + "element_area": 9.0}, 3626 + ] 3627 + res = installed_source_prediction(lws_c, dc, paths, frequencies=bands) 3628 + 3629 + x = np.arange(bands.size) 3630 + fig, ax = plt.subplots(figsize=(10, 6.2)) 3631 + ax.plot(x, lws_c, color=COLOR_SECONDARY, marker="o", lw=2.0, 3632 + label=r"characteristic $L_{Ws,c}$ (EN 15657)") 3633 + ax.plot(x, lws_inst, color=COLOR_TERTIARY, marker="s", lw=2.0, 3634 + label=r"installed $L_{Ws,inst}$ = $L_{Ws,c}-D_C$") 3635 + for k, p in enumerate(res.path_levels): 3636 + ax.plot(x, p, color=COLOR_GRID, lw=1.0, ls=":", marker=".", 3637 + label="paths $L_{n,s,ij}$" if k == 0 else None) 3638 + ax.plot(x, res.total_level, color=COLOR_PRIMARY, marker="D", lw=2.4, 3639 + label=r"total $L_{n,s}$") 3640 + 3641 + ax.set_xticks(x) 3642 + ax.set_xticklabels([f"{b:g}" for b in bands]) 3643 + ax.set_xlabel(LABEL_FREQ_HZ) 3644 + ax.set_ylabel("Level [dB]") 3645 + ax.set_title("EN 12354-5 Installed Structure-Borne Sound", 3646 + fontweight="bold", pad=12) 3647 + ax.grid(which="major", axis="y", color=COLOR_GRID, linestyle="--", alpha=0.5) 3648 + ax.legend(loc="upper right", fontsize=9) 3649 + 3650 + panel = "#f0f2f5" if COLOR_FG == "black" else "#1c2128" 3651 + info = [ 3652 + "DC = 10 lg(|Ys+Yi|^2 / (|Ys| Re Yi))", 3653 + "Ln,s,ij = LWs,inst - Dsa - Rij - 10 lg(Si/S0) - 10 lg(A0/4)", 3654 + "Ln,s = 10 lg(sum 10^(Ln,s,ij/10)), S0 = A0 = 10 m2", 3655 + ] 3656 + ax.text(0.015, 0.02, "\n".join(info), transform=ax.transAxes, 3657 + va="bottom", ha="left", fontsize=8.5, color=COLOR_FG, family="monospace", 3658 + bbox={"boxstyle": "round,pad=0.5", "facecolor": panel, 3659 + "edgecolor": COLOR_GRID}) 3660 + plt.tight_layout() 3661 + save_figure(output_dir, "installed_structure_borne.svg") 3662 + plt.close() 3663 + 3664 + 3594 3665 def generate_absorption_uncertainty(output_dir: str) -> None: 3595 3666 """ISO 12999-2 absorption-coefficient uncertainty: alpha_s with a +/-U ribbon.""" 3596 3667 print("Generating absorption_uncertainty...") ··· 5094 5165 generate_transfer_stiffness(img_dir) 5095 5166 generate_vibration_sound_power(img_dir) 5096 5167 generate_structure_borne_power(img_dir) 5168 + generate_installed_structure_borne(img_dir) 5097 5169 generate_absorption_uncertainty(img_dir) 5098 5170 generate_insulation_uncertainty_demo(img_dir) 5099 5171
+1
site/astro.config.mjs
··· 347 347 'guides/transfer-stiffness', 348 348 'guides/vibration-sound-power', 349 349 'guides/structure-borne-power', 350 + 'guides/installed-structure-borne', 350 351 ], 351 352 }, 352 353 {
+111
site/src/content/docs/es/guides/installed-structure-borne.md
··· 1 + --- 2 + title: "Ruido estructural instalado (EN 12354-5)" 3 + description: "La predicción según EN 12354-5:2009 del nivel de presión sonora en un recinto receptor por equipos de servicio del edificio que inyectan ruido estructural: el término de acoplamiento D_C a partir de las movilidades de fuente y receptor (Fórmula 19b-e), la potencia instalada L_Ws,inst = L_Ws,c − D_C (Fórmula 18b) y el nivel de presión normalizado por camino con su total energético (Fórmulas 18a/17)." 4 + --- 5 + 6 + La **EN 12354-5:2009** predice el nivel de presión sonora en un recinto receptor 7 + causado por equipos de servicio del edificio (bombas, ventiladores, ascensores, 8 + instalaciones de agua) que inyectan **ruido estructural** en el edificio. Cierra 9 + la cadena de vibroacústica estructural: la fuente se describe por su nivel de 10 + potencia sonora estructural característica `L_Ws,c` 11 + ([EN 15657](/phonometry/es/guides/structure-borne-power/)), las movilidades 12 + puntuales de fuente y receptor fijan cuánta potencia se acopla realmente a la 13 + estructura, y la transmisión del edificio la lleva al recinto receptor. 14 + 15 + <img class="light-only" src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/installed_structure_borne_es.svg" alt="La cascada de EN 12354-5 por banda de octava: potencia característica, potencia instalada tras el término de acoplamiento, niveles de presión sonora por camino y su total energético" style="width:82%"><img class="dark-only" src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/installed_structure_borne_es_dark.svg" alt="La cascada de EN 12354-5 por banda de octava: potencia característica, potencia instalada tras el término de acoplamiento, niveles de presión sonora por camino y su total energético" style="width:82%"> 16 + 17 + ## 1. Acoplamiento y potencia instalada 18 + 19 + Solo parte de la potencia característica se inyecta en el elemento soporte; la 20 + pérdida es el **término de acoplamiento** `D_C` (siempre positivo), fijado para 21 + una excitación puntual por la movilidad de la fuente `Y_s` y la del receptor 22 + `Y_i` (Fórmula 19b): 23 + 24 + $$ 25 + D_{C,i} = 10\lg\frac{|Y_s + Y_i|^2}{|Y_s|\,\mathrm{Re}\{Y_i\}}, 26 + $$ 27 + 28 + que se reduce a `10 lg(|Y_s|/Re{Y_i})` para una **fuente de fuerza** (movilidad 29 + de fuente alta, Fórmula 19c) y a `−10 lg(|Y_s|·Re{Z_i})` para una **fuente de 30 + velocidad** (movilidad de fuente baja, Fórmula 19d); un soporte elástico añade su 31 + movilidad de transferencia `Y_k` dentro del módulo (Fórmula 19e). El nivel de 32 + potencia **instalada** es entonces (Fórmula 18b) `L_Ws,inst = L_Ws,c − D_C`. 33 + 34 + ```python 35 + import phonometry as ph 36 + 37 + # Una fuente casi de fuerza (Y_s >> Y_i) sobre un forjado de hormigón: 38 + dc = ph.coupling_term(2e-4 + 1e-4j, 3e-5 + 1e-5j) 39 + print(round(float(dc), 2)) # ~8.5 dB 40 + print(round(float(ph.installed_structure_borne_power_level(82.0, dc)), 1)) # L_Ws instalada 41 + ``` 42 + 43 + ## 2. Transmisión al recinto receptor 44 + 45 + Cada camino de transmisión `i→j` da un nivel de presión sonora normalizado a 46 + partir de la potencia instalada, el término de ajuste estructura-a-aéreo `D_sa`, 47 + el índice de reducción sonora de flancos `R_ij,ref` (EN 12354-1) y el área del 48 + elemento (Fórmula 18a): 49 + 50 + $$ 51 + L_{n,s,ij} = L_{Ws,\mathrm{inst},i} - D_{sa,i} - R_{ij,\mathrm{ref}} 52 + - 10\lg\frac{S_i}{S_0} - 10\lg\frac{A_0}{4}, 53 + $$ 54 + 55 + con `S₀ = A₀ = 10 m²`, y los caminos se combinan energéticamente (Fórmula 17): 56 + 57 + ```python 58 + import numpy as np 59 + import phonometry as ph 60 + 61 + bands = np.array([250.0, 500.0, 1000.0]) 62 + res = ph.installed_source_prediction( 63 + characteristic_power_level=np.array([80.0, 82.0, 78.0]), 64 + coupling_term=np.array([9.0, 10.0, 11.0]), 65 + paths=[ 66 + {"adjustment_term": 5.0, 67 + "flanking_reduction_index": np.array([50.0, 52.0, 55.0]), "element_area": 12.0}, 68 + {"adjustment_term": 6.0, 69 + "flanking_reduction_index": np.array([52.0, 54.0, 57.0]), "element_area": 8.0}, 70 + ], 71 + frequencies=bands, 72 + ) 73 + print(np.round(res.total_level, 1)) # total L_n,s por banda 74 + print(round(res.overall_level, 1)) # nivel sumado en bandas [dB] 75 + ``` 76 + 77 + El `InstalledSourceResult` transporta los niveles por camino, el total por banda, 78 + el nivel de potencia instalada y `.overall_level`, y su `.plot()` dibuja toda la 79 + cascada. 80 + 81 + <details> 82 + <summary>Mostrar el código de esta figura</summary> 83 + 84 + ```python 85 + import matplotlib.pyplot as plt 86 + import numpy as np 87 + import phonometry as ph 88 + 89 + bands = np.array([63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0]) 90 + lws_c = np.array([78.0, 82.0, 84.0, 81.0, 77.0, 72.0, 66.0]) 91 + ys = (2e-4 + 1e-4j) * (bands / 250.0); yi = (3e-5 + 1e-5j) * np.ones_like(bands) 92 + dc = np.array([float(ph.coupling_term(a, b)) for a, b in zip(ys, yi)]) 93 + paths = [{"adjustment_term": 6.0, 94 + "flanking_reduction_index": np.linspace(44, 62, 7), "element_area": 12.0}] 95 + res = ph.installed_source_prediction(lws_c, dc, paths, frequencies=bands) 96 + res.plot(); plt.show() 97 + ``` 98 + 99 + </details> 100 + 101 + --- 102 + 103 + **Normas.** EN 12354-5:2009, *Building acoustics — Estimation of acoustic 104 + performance of buildings from the performance of elements — Part 5: Sound levels 105 + due to service equipment*: el término de acoplamiento (cláusula 4.4.3, Fórmulas 106 + 19a-19e), el nivel de potencia estructural instalada (Fórmula 18b), el término de 107 + ajuste estructura-a-aéreo (cláusula 4.4.4, Fórmulas 20a/20b) y el nivel de presión 108 + sonora normalizado por camino y su combinación energética (Fórmulas 18a, 17). La 109 + conformidad se ancla en el límite de fuente de fuerza del término de acoplamiento, 110 + la identidad de potencia instalada y los términos de área/absorción de la Fórmula 111 + 18a. `D_sa` y `R_ij,ref` son entradas (de medición / EN 12354-1 / Anexos D y F).
+110
site/src/content/docs/guides/installed-structure-borne.md
··· 1 + --- 2 + title: "Installed structure-borne sound (EN 12354-5)" 3 + description: "The EN 12354-5:2009 prediction of the sound pressure level in a receiving room from building service equipment injecting structure-borne sound: the coupling term D_C from source and receiver mobilities (Formula 19b-e), the installed power L_Ws,inst = L_Ws,c − D_C (Formula 18b), and the per-path normalised SPL with its energetic total (Formulae 18a/17)." 4 + --- 5 + 6 + **EN 12354-5:2009** predicts the sound pressure level in a receiving room caused 7 + by building service equipment (pumps, fans, lifts, water installations) that 8 + injects **structure-borne sound** into the building. It closes the 9 + structural-vibroacoustics chain: the source is described by its characteristic 10 + structure-borne sound power level `L_Ws,c` 11 + ([EN 15657](/phonometry/guides/structure-borne-power/)), the source and receiver 12 + point mobilities set how much power is actually coupled into the structure, and 13 + the building transmission carries it to the receiving room. 14 + 15 + <img class="light-only" src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/installed_structure_borne.svg" alt="The EN 12354-5 cascade per octave band: characteristic power, installed power after the coupling term, per-path sound pressure levels and their energetic total" style="width:82%"><img class="dark-only" src="https://raw.githubusercontent.com/jmrplens/phonometry/main/.github/images/installed_structure_borne_dark.svg" alt="The EN 12354-5 cascade per octave band: characteristic power, installed power after the coupling term, per-path sound pressure levels and their energetic total" style="width:82%"> 16 + 17 + ## 1. Coupling and installed power 18 + 19 + Only part of the characteristic power is injected into the supporting element; 20 + the loss is the **coupling term** `D_C` (always positive), set for a point 21 + excitation by the source mobility `Y_s` and the receiver mobility `Y_i` 22 + (Formula 19b): 23 + 24 + $$ 25 + D_{C,i} = 10\lg\frac{|Y_s + Y_i|^2}{|Y_s|\,\mathrm{Re}\{Y_i\}}, 26 + $$ 27 + 28 + which reduces to `10 lg(|Y_s|/Re{Y_i})` for a **force source** (high source 29 + mobility, Formula 19c) and to `−10 lg(|Y_s|·Re{Z_i})` for a **velocity source** 30 + (low source mobility, Formula 19d); an elastic support adds its transfer 31 + mobility `Y_k` inside the modulus (Formula 19e). The **installed** power level is 32 + then (Formula 18b) `L_Ws,inst = L_Ws,c − D_C`. 33 + 34 + ```python 35 + import phonometry as ph 36 + 37 + # A near-force source (Y_s >> Y_i) on a concrete floor: 38 + dc = ph.coupling_term(2e-4 + 1e-4j, 3e-5 + 1e-5j) 39 + print(round(float(dc), 2)) # ~8.5 dB 40 + print(round(float(ph.installed_structure_borne_power_level(82.0, dc)), 1)) # installed L_Ws 41 + ``` 42 + 43 + ## 2. Transmission to the receiving room 44 + 45 + Each transmission path `i→j` gives a normalised sound pressure level from the 46 + installed power, the structure-to-airborne adjustment term `D_sa`, the flanking 47 + sound reduction index `R_ij,ref` (EN 12354-1) and the element area (Formula 18a): 48 + 49 + $$ 50 + L_{n,s,ij} = L_{Ws,\mathrm{inst},i} - D_{sa,i} - R_{ij,\mathrm{ref}} 51 + - 10\lg\frac{S_i}{S_0} - 10\lg\frac{A_0}{4}, 52 + $$ 53 + 54 + with `S₀ = A₀ = 10 m²`, and the paths combine energetically (Formula 17): 55 + 56 + ```python 57 + import numpy as np 58 + import phonometry as ph 59 + 60 + bands = np.array([250.0, 500.0, 1000.0]) 61 + res = ph.installed_source_prediction( 62 + characteristic_power_level=np.array([80.0, 82.0, 78.0]), 63 + coupling_term=np.array([9.0, 10.0, 11.0]), 64 + paths=[ 65 + {"adjustment_term": 5.0, 66 + "flanking_reduction_index": np.array([50.0, 52.0, 55.0]), "element_area": 12.0}, 67 + {"adjustment_term": 6.0, 68 + "flanking_reduction_index": np.array([52.0, 54.0, 57.0]), "element_area": 8.0}, 69 + ], 70 + frequencies=bands, 71 + ) 72 + print(np.round(res.total_level, 1)) # total L_n,s per band 73 + print(round(res.overall_level, 1)) # band-summed level [dB] 74 + ``` 75 + 76 + The `InstalledSourceResult` carries the per-path levels, the total per band, the 77 + installed power level and `.overall_level`, and its `.plot()` draws the whole 78 + cascade. 79 + 80 + <details> 81 + <summary>Show the code for this figure</summary> 82 + 83 + ```python 84 + import matplotlib.pyplot as plt 85 + import numpy as np 86 + import phonometry as ph 87 + 88 + bands = np.array([63.0, 125.0, 250.0, 500.0, 1000.0, 2000.0, 4000.0]) 89 + lws_c = np.array([78.0, 82.0, 84.0, 81.0, 77.0, 72.0, 66.0]) 90 + ys = (2e-4 + 1e-4j) * (bands / 250.0); yi = (3e-5 + 1e-5j) * np.ones_like(bands) 91 + dc = np.array([float(ph.coupling_term(a, b)) for a, b in zip(ys, yi)]) 92 + paths = [{"adjustment_term": 6.0, 93 + "flanking_reduction_index": np.linspace(44, 62, 7), "element_area": 12.0}] 94 + res = ph.installed_source_prediction(lws_c, dc, paths, frequencies=bands) 95 + res.plot(); plt.show() 96 + ``` 97 + 98 + </details> 99 + 100 + --- 101 + 102 + **Standards.** EN 12354-5:2009, *Building acoustics — Estimation of acoustic 103 + performance of buildings from the performance of elements — Part 5: Sound levels 104 + due to service equipment*: the coupling term (clause 4.4.3, Formulae 19a-19e), 105 + the installed structure-borne power level (Formula 18b), the structure-to- 106 + airborne adjustment term (clause 4.4.4, Formulae 20a/20b), and the normalised 107 + sound pressure level per path and its energetic combination (Formulae 18a, 17). 108 + Conformance is anchored on the coupling-term force-source limit, the installed- 109 + power identity and the area/absorption terms of Formula 18a. `D_sa` and 110 + `R_ij,ref` are inputs (from measurement / EN 12354-1 / Annexes D and F).
+20
src/phonometry/__init__.py
··· 145 145 spatial_mean_velocity_level, 146 146 structure_borne_power_level, 147 147 ) 148 + from .installed_structure_borne import ( 149 + REFERENCE_AREA, 150 + InstalledSourceResult, 151 + coupling_term, 152 + coupling_term_force_source, 153 + coupling_term_velocity_source, 154 + installed_source_prediction, 155 + installed_structure_borne_power_level, 156 + structure_borne_pressure_level_path, 157 + total_structure_borne_pressure_level, 158 + ) 148 159 from .multiple_shock_vibration import ( 149 160 MultipleShockResult, 150 161 acceleration_dose, ··· 710 721 "structure_borne_power_level", 711 722 "reception_plate_power", 712 723 "StructureBornePowerResult", 724 + "coupling_term", 725 + "coupling_term_force_source", 726 + "coupling_term_velocity_source", 727 + "installed_structure_borne_power_level", 728 + "structure_borne_pressure_level_path", 729 + "total_structure_borne_pressure_level", 730 + "installed_source_prediction", 731 + "InstalledSourceResult", 732 + "REFERENCE_AREA", 713 733 "combine_uncertainty", 714 734 "monte_carlo", 715 735 "rectangular",
+35
src/phonometry/_plotting.py
··· 41 41 from .floor_covering_improvement import FloorCoveringImprovementResult 42 42 from .reverberation_prediction import ReverberationModelResult 43 43 from .dynamic_stiffness import DynamicStiffnessResult 44 + from .installed_structure_borne import InstalledSourceResult 44 45 from .mechanical_mobility import MobilityResult 45 46 from .structure_borne_power import StructureBornePowerResult 46 47 from .transfer_stiffness import TransferStiffnessResult ··· 2169 2170 ylabel=r"Structure-borne power level $L_{Ws}$ [dB re 1 pW]", 2170 2171 title="EN 15657 characteristic structure-borne sound power", **kwargs, 2171 2172 ) 2173 + 2174 + 2175 + def plot_installed_structure_borne( 2176 + result: "InstalledSourceResult", ax: Axes | None = None, **kwargs: Any 2177 + ) -> Axes: 2178 + """Per-path and total normalised structure-borne SPL (EN 12354-5). 2179 + 2180 + :param result: An :class:`~phonometry.installed_structure_borne.InstalledSourceResult`. 2181 + :param ax: Existing axes, or ``None`` to create a figure. 2182 + :param kwargs: Forwarded to the total-level ``plot``. 2183 + :return: The axes. 2184 + """ 2185 + ax = ax if ax is not None else _new_axes() 2186 + paths = np.atleast_2d(np.asarray(result.path_levels, dtype=np.float64)) 2187 + total = np.atleast_1d(np.asarray(result.total_level, dtype=np.float64)) 2188 + n_bands = total.size 2189 + if result.frequencies is not None: 2190 + x = np.asarray(result.frequencies, dtype=np.float64) 2191 + ax.set_xscale("log") 2192 + ax.set_xlabel("Frequency [Hz]") 2193 + else: 2194 + x = np.arange(1, n_bands + 1, dtype=np.float64) 2195 + ax.set_xlabel("Band") 2196 + for k, path in enumerate(paths): 2197 + ax.plot(x, path, color=_C_MUTED, lw=1.0, ls=":", marker=".", 2198 + label="paths" if k == 0 else None) 2199 + kwargs.setdefault("color", _C_PRIMARY) 2200 + kwargs.setdefault("lw", 2.2) 2201 + ax.plot(x, total, label=r"total $L_{n,s}$", **kwargs) 2202 + ax.set_ylabel(r"Normalised SPL $L_{n,s}$ [dB]") 2203 + ax.set_title("EN 12354-5 installed structure-borne sound") 2204 + ax.legend(loc="best", fontsize="small") 2205 + ax.grid(True, which="both", alpha=0.3) 2206 + return ax 2172 2207 2173 2208 2174 2209 def plot_multiple_shock(
+267
src/phonometry/installed_structure_borne.py
··· 1 + # Copyright (c) 2026. Jose M. Requena-Plens 2 + """ 3 + Installed structure-borne sound from service equipment (EN 12354-5:2009). 4 + 5 + EN 12354-5 predicts the sound pressure level in a receiving room caused by 6 + building service equipment that injects **structure-borne sound** into the 7 + building. The chain closes the structural-vibroacoustics series: 8 + 9 + 1. The source strength is its *characteristic structure-borne sound power level* 10 + ``L_Ws,c`` (measured per EN 15657; see :mod:`phonometry.structure_borne_power`). 11 + 2. Only part of that power is actually injected into the supporting element; the 12 + loss is the **coupling term** ``D_C`` (clause 4.4.3), always positive, set by 13 + the source mobility ``Y_s`` and the receiver mobility ``Y_i`` (Formula 19b):: 14 + 15 + D_C,i = 10 lg( |Y_s + Y_i|**2 / (|Y_s| Re{Y_i}) ) 16 + 17 + which reduces to ``10 lg(|Y_s|/Re{Y_i})`` for a force source (high source 18 + mobility, Formula 19c) and to ``-10 lg(|Y_s| Re{Z_i})`` for a velocity source 19 + (low source mobility, Formula 19d). An elastic support adds its transfer 20 + mobility ``Y_k`` inside the modulus (Formula 19e). 21 + 3. The **installed** power level is then (Formula 18b):: 22 + 23 + L_Ws,inst,i = L_Ws,c - D_C,i 24 + 25 + 4. The normalised sound pressure level in the receiving room for one path (i->j) 26 + follows from the installed power, the structure-to-airborne adjustment term 27 + ``D_sa`` (clause 4.4.4), the flanking sound reduction index ``R_ij,ref`` and 28 + the element area (Formula 18a):: 29 + 30 + L_n,s,ij = L_Ws,inst,i - D_sa,i - R_ij,ref - 10 lg(S_i/S0) - 10 lg(A0/4) 31 + 32 + with ``S0 = A0 = 10 m2``; the paths combine energetically (Formula 17). 33 + 34 + The source and receiver mobilities/impedances are those of 35 + :mod:`phonometry.mechanical_mobility` and :mod:`phonometry.transfer_stiffness`. 36 + """ 37 + 38 + from __future__ import annotations 39 + 40 + from dataclasses import dataclass 41 + from typing import TYPE_CHECKING, Any 42 + 43 + import numpy as np 44 + 45 + if TYPE_CHECKING: 46 + from matplotlib.axes import Axes 47 + 48 + from numpy.typing import ArrayLike 49 + 50 + from ._validation import require_positive 51 + 52 + #: Reference area ``S0 = A0`` of EN 12354-5 (Formula 18a), m^2. 53 + REFERENCE_AREA: float = 10.0 54 + 55 + 56 + def coupling_term( 57 + source_mobility: ArrayLike, 58 + receiver_mobility: ArrayLike, 59 + *, 60 + transfer_mobility: ArrayLike = 0.0, 61 + ) -> np.ndarray: 62 + """Coupling term ``D_C`` for a point excitation (EN 12354-5, Formula 19b/19e). 63 + 64 + ``D_C = 10 lg( |Y_s + Y_i + Y_k|**2 / (|Y_s| Re{Y_i}) )`` -- the loss between 65 + the characteristic and the injected structure-borne power. ``Y_k`` is the 66 + transfer mobility of an elastic support (Formula 19e; 0 for a rigid 67 + connection, Formula 19b). 68 + 69 + :param source_mobility: Source point mobility ``Y_s`` (complex), in m/(N.s). 70 + :param receiver_mobility: Receiver point mobility ``Y_i`` (complex). 71 + :param transfer_mobility: Elastic-support transfer mobility ``Y_k`` 72 + (Default: 0.0). 73 + :return: The coupling term ``D_C``, in dB (>= 0 for passive systems). 74 + """ 75 + ys = np.asarray(source_mobility, dtype=np.complex128) 76 + yi = np.asarray(receiver_mobility, dtype=np.complex128) 77 + yk = np.asarray(transfer_mobility, dtype=np.complex128) 78 + numerator = np.abs(ys + yi + yk) ** 2 79 + denominator = np.abs(ys) * np.real(yi) 80 + return np.asarray(10.0 * np.log10(numerator / denominator), dtype=np.float64) 81 + 82 + 83 + def coupling_term_force_source( 84 + source_mobility: ArrayLike, receiver_mobility: ArrayLike 85 + ) -> np.ndarray: 86 + """Coupling term for a force source, high source mobility (Formula 19c). 87 + 88 + ``D_C = 10 lg(|Y_s| / Re{Y_i})``. 89 + 90 + :param source_mobility: Source point mobility ``Y_s`` (complex). 91 + :param receiver_mobility: Receiver point mobility ``Y_i`` (complex). 92 + :return: The coupling term ``D_C``, in dB. 93 + """ 94 + ys = np.abs(np.asarray(source_mobility, dtype=np.complex128)) 95 + yi = np.real(np.asarray(receiver_mobility, dtype=np.complex128)) 96 + return np.asarray(10.0 * np.log10(ys / yi), dtype=np.float64) 97 + 98 + 99 + def coupling_term_velocity_source( 100 + source_mobility: ArrayLike, receiver_impedance: ArrayLike 101 + ) -> np.ndarray: 102 + """Coupling term for a velocity source, low source mobility (Formula 19d). 103 + 104 + ``D_C = -10 lg(|Y_s| Re{Z_i})``. 105 + 106 + :param source_mobility: Source point mobility ``Y_s`` (complex). 107 + :param receiver_impedance: Receiver point impedance ``Z_i`` (complex). 108 + :return: The coupling term ``D_C``, in dB. 109 + """ 110 + ys = np.abs(np.asarray(source_mobility, dtype=np.complex128)) 111 + zi = np.real(np.asarray(receiver_impedance, dtype=np.complex128)) 112 + return np.asarray(-10.0 * np.log10(ys * zi), dtype=np.float64) 113 + 114 + 115 + def installed_structure_borne_power_level( 116 + characteristic_power_level: ArrayLike, coupling_term: ArrayLike 117 + ) -> np.ndarray: 118 + """Installed structure-borne power level (EN 12354-5, Formula 18b). 119 + 120 + ``L_Ws,inst,i = L_Ws,c - D_C,i``. 121 + 122 + :param characteristic_power_level: Characteristic level ``L_Ws,c`` (per 123 + band), in dB (from EN 15657). 124 + :param coupling_term: Coupling term ``D_C,i`` (per band), in dB. 125 + :return: The installed structure-borne power level ``L_Ws,inst``, in dB. 126 + """ 127 + lw = np.asarray(characteristic_power_level, dtype=np.float64) 128 + dc = np.asarray(coupling_term, dtype=np.float64) 129 + return np.asarray(lw - dc, dtype=np.float64) 130 + 131 + 132 + def structure_borne_pressure_level_path( 133 + installed_power_level: ArrayLike, 134 + adjustment_term: ArrayLike, 135 + flanking_reduction_index: ArrayLike, 136 + element_area: float, 137 + *, 138 + reference_area: float = REFERENCE_AREA, 139 + ) -> np.ndarray: 140 + """Normalised structure-borne SPL for one path i->j (Formula 18a). 141 + 142 + ``L_n,s,ij = L_Ws,inst,i - D_sa,i - R_ij,ref - 10 lg(S_i/S0) - 10 lg(A0/4)``. 143 + 144 + :param installed_power_level: Installed power level ``L_Ws,inst,i``, in dB. 145 + :param adjustment_term: Structure-to-airborne adjustment ``D_sa,i`` (clause 146 + 4.4.4 / Annex F), in dB. 147 + :param flanking_reduction_index: Flanking sound reduction index 148 + ``R_ij,ref`` re ``S0`` (EN 12354-1), in dB. 149 + :param element_area: Supporting-element area ``S_i``, in m^2 (> 0). 150 + :param reference_area: Reference area ``S0 = A0`` (Default: 10 m^2). 151 + :return: The normalised path sound pressure level ``L_n,s,ij``, in dB. 152 + :raises ValueError: for a non-positive area. 153 + """ 154 + element_area = require_positive(element_area, "element_area") 155 + reference_area = require_positive(reference_area, "reference_area") 156 + lw = np.asarray(installed_power_level, dtype=np.float64) 157 + dsa = np.asarray(adjustment_term, dtype=np.float64) 158 + rij = np.asarray(flanking_reduction_index, dtype=np.float64) 159 + lp = ( 160 + lw - dsa - rij 161 + - 10.0 * np.log10(element_area / reference_area) 162 + - 10.0 * np.log10(reference_area / 4.0) 163 + ) 164 + return np.asarray(lp, dtype=np.float64) 165 + 166 + 167 + def total_structure_borne_pressure_level(path_levels: ArrayLike) -> np.ndarray: 168 + """Combine path sound pressure levels energetically (Formula 17). 169 + 170 + ``L_n,s = 10 lg( sum_j 10^(L_n,s,ij/10) )``. 171 + 172 + :param path_levels: Path levels ``L_n,s,ij``; sum is over the first axis 173 + (paths), broadcasting any trailing band axis. 174 + :return: The total normalised sound pressure level ``L_n,s``, in dB. 175 + """ 176 + lp = np.asarray(path_levels, dtype=np.float64) 177 + return np.asarray( 178 + 10.0 * np.log10(np.sum(10.0 ** (0.1 * lp), axis=0)), dtype=np.float64 179 + ) 180 + 181 + 182 + @dataclass(frozen=True) 183 + class InstalledSourceResult: 184 + """Installed structure-borne sound prediction (EN 12354-5). 185 + 186 + :ivar frequencies: Band centre frequencies, in hertz, or ``None``. 187 + :ivar path_levels: Per-path normalised SPL ``L_n,s,ij`` (paths x bands), dB. 188 + :ivar total_level: Combined normalised SPL ``L_n,s`` per band, in dB. 189 + :ivar installed_power_level: Installed power level ``L_Ws,inst`` per band, dB. 190 + """ 191 + 192 + path_levels: np.ndarray 193 + total_level: np.ndarray 194 + installed_power_level: np.ndarray 195 + frequencies: np.ndarray | None = None 196 + 197 + @property 198 + def overall_level(self) -> float: 199 + """Band-summed total level ``10 lg(sum 10^(0.1 L_n,s))``, in dB.""" 200 + lt = np.atleast_1d(np.asarray(self.total_level, dtype=np.float64)) 201 + return float(10.0 * np.log10(np.sum(10.0 ** (0.1 * lt)))) 202 + 203 + def plot(self, ax: "Axes | None" = None, **kwargs: Any) -> "Axes": 204 + """Plot the per-path and total normalised sound pressure levels. 205 + 206 + Requires matplotlib (``pip install phonometry[plot]``); returns the 207 + :class:`~matplotlib.axes.Axes`. 208 + """ 209 + from ._plotting import plot_installed_structure_borne 210 + 211 + return plot_installed_structure_borne(self, ax=ax, **kwargs) 212 + 213 + 214 + def installed_source_prediction( 215 + characteristic_power_level: ArrayLike, 216 + coupling_term: ArrayLike, 217 + paths: list[dict[str, Any]], 218 + *, 219 + frequencies: ArrayLike | None = None, 220 + ) -> InstalledSourceResult: 221 + """Predict the installed structure-borne SPL over several paths (EN 12354-5). 222 + 223 + :param characteristic_power_level: Characteristic level ``L_Ws,c`` (per 224 + band), in dB. 225 + :param coupling_term: Coupling term ``D_C`` (per band), in dB. 226 + :param paths: One dict per transmission path with keys ``adjustment_term`` 227 + (``D_sa``), ``flanking_reduction_index`` (``R_ij,ref``) and 228 + ``element_area`` (``S_i``), each per band where applicable. 229 + :param frequencies: Band centre frequencies, in hertz, or ``None``. 230 + :return: The :class:`InstalledSourceResult`. 231 + :raises ValueError: if ``paths`` is empty. 232 + """ 233 + if not paths: 234 + raise ValueError("'paths' must contain at least one transmission path.") 235 + lw_inst = installed_structure_borne_power_level( 236 + characteristic_power_level, coupling_term 237 + ) 238 + required = ("adjustment_term", "flanking_reduction_index", "element_area") 239 + n_bands = np.atleast_1d(np.asarray(lw_inst, dtype=np.float64)).size 240 + rows = [] 241 + for k, p in enumerate(paths): 242 + missing = [key for key in required if key not in p] 243 + if missing: 244 + raise ValueError( 245 + f"path {k} is missing required key(s): {', '.join(missing)}." 246 + ) 247 + rij = np.atleast_1d(np.asarray(p["flanking_reduction_index"], dtype=np.float64)) 248 + if rij.size not in (1, n_bands): 249 + raise ValueError( 250 + f"path {k}: 'flanking_reduction_index' has {rij.size} bands, " 251 + f"expected {n_bands} to match the source levels." 252 + ) 253 + rows.append( 254 + structure_borne_pressure_level_path( 255 + lw_inst, p["adjustment_term"], 256 + p["flanking_reduction_index"], p["element_area"], 257 + ) 258 + ) 259 + path_levels = np.asarray(rows, dtype=np.float64) 260 + total = total_structure_borne_pressure_level(path_levels) 261 + freq = None if frequencies is None else np.asarray(frequencies, dtype=np.float64) 262 + return InstalledSourceResult( 263 + path_levels=path_levels, 264 + total_level=np.asarray(total, dtype=np.float64), 265 + installed_power_level=np.atleast_1d(np.asarray(lw_inst, dtype=np.float64)), 266 + frequencies=freq, 267 + )
+187
tests/test_installed_structure_borne.py
··· 1 + # Copyright (c) 2026. Jose M. Requena-Plens 2 + """Tests for EN 12354-5:2009 installed structure-borne sound from equipment. 3 + 4 + Anchored on the standard's closed-form chain: the coupling term (Formula 19b) 5 + and its force- and velocity-source limits (Formulae 19c/19d), the installed 6 + power level L_Ws,inst = L_Ws,c − D_C (Formula 18b), the per-path normalised SPL 7 + (Formula 18a) and the energetic path sum (Formula 17). 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 + InstalledSourceResult, 19 + coupling_term, 20 + coupling_term_force_source, 21 + coupling_term_velocity_source, 22 + installed_source_prediction, 23 + installed_structure_borne_power_level, 24 + structure_borne_pressure_level_path, 25 + total_structure_borne_pressure_level, 26 + ) 27 + 28 + S0 = 10.0 29 + 30 + 31 + # --------------------------------------------------------------------------- 32 + # Coupling term (Formula 19b) and its limiting forms (19c/19d) 33 + # --------------------------------------------------------------------------- 34 + def test_coupling_term_hand_value() -> None: 35 + ys, yi = 1e-4 + 0j, 1e-5 + 0j 36 + expected = 10.0 * math.log10(abs(ys + yi) ** 2 / (abs(ys) * yi.real)) 37 + assert coupling_term(ys, yi) == pytest.approx(expected) 38 + 39 + 40 + def test_coupling_reduces_to_force_source_limit() -> None: 41 + """|Y_s| >> |Y_i|: Formula 19b -> 19c (10 lg(|Y_s|/Re Y_i)).""" 42 + ys, yi = 1e-3 + 0j, 1e-7 + 0j 43 + assert coupling_term(ys, yi) == pytest.approx( 44 + float(coupling_term_force_source(ys, yi)), abs=1e-2 45 + ) 46 + 47 + 48 + def test_coupling_reduces_to_velocity_source_limit() -> None: 49 + """|Y_s| << |Y_i|: Formula 19b -> 19d (−10 lg(|Y_s| Re Z_i)).""" 50 + ys, yi = 1e-8 + 0j, 1e-4 + 0j 51 + zi = 1.0 / yi 52 + assert coupling_term(ys, yi) == pytest.approx( 53 + float(coupling_term_velocity_source(ys, zi)), abs=1e-2 54 + ) 55 + 56 + 57 + def test_coupling_elastic_support_reduces_transmission() -> None: 58 + # Adding a soft elastic support (large transfer mobility) raises D_C. 59 + ys, yi = 1e-4 + 0j, 1e-5 + 0j 60 + rigid = float(coupling_term(ys, yi)) 61 + isolated = float(coupling_term(ys, yi, transfer_mobility=1e-3 + 0j)) 62 + assert isolated > rigid 63 + 64 + 65 + # --------------------------------------------------------------------------- 66 + # Installed power (Formula 18b) 67 + # --------------------------------------------------------------------------- 68 + def test_installed_power_level() -> None: 69 + lw = installed_structure_borne_power_level(80.0, 10.828) 70 + assert float(lw) == pytest.approx(69.172) 71 + 72 + 73 + def test_installed_power_per_band() -> None: 74 + lwc = np.array([75.0, 78.0, 80.0]) 75 + dc = np.array([8.0, 9.0, 10.0]) 76 + assert np.allclose( 77 + installed_structure_borne_power_level(lwc, dc), lwc - dc 78 + ) 79 + 80 + 81 + # --------------------------------------------------------------------------- 82 + # Path SPL (Formula 18a) and total (Formula 17) 83 + # --------------------------------------------------------------------------- 84 + def test_path_level_hand_value() -> None: 85 + lp = structure_borne_pressure_level_path(69.0, 5.0, 50.0, 12.0) 86 + expected = 69.0 - 5.0 - 50.0 - 10.0 * math.log10(12.0 / S0) - 10.0 * math.log10(S0 / 4.0) 87 + assert float(lp) == pytest.approx(expected) 88 + 89 + 90 + def test_path_level_rejects_bad_area() -> None: 91 + with pytest.raises(ValueError, match="element_area"): 92 + structure_borne_pressure_level_path(69.0, 5.0, 50.0, 0.0) 93 + 94 + 95 + def test_total_is_energetic_sum() -> None: 96 + paths = np.array([[40.0, 42.0], [44.0, 41.0], [38.0, 39.0]]) 97 + expected = 10.0 * np.log10(np.sum(10.0 ** (0.1 * paths), axis=0)) 98 + assert np.allclose(total_structure_borne_pressure_level(paths), expected) 99 + 100 + 101 + # --------------------------------------------------------------------------- 102 + # Full prediction / result 103 + # --------------------------------------------------------------------------- 104 + def test_prediction_bundle() -> None: 105 + bands = np.array([250.0, 500.0, 1000.0]) 106 + lwc = np.array([78.0, 80.0, 77.0]) 107 + dc = np.array([9.0, 10.0, 11.0]) 108 + paths = [ 109 + {"adjustment_term": 5.0, 110 + "flanking_reduction_index": np.array([50.0, 52.0, 55.0]), 111 + "element_area": 12.0}, 112 + {"adjustment_term": 6.0, 113 + "flanking_reduction_index": np.array([52.0, 54.0, 57.0]), 114 + "element_area": 8.0}, 115 + ] 116 + res = installed_source_prediction(lwc, dc, paths, frequencies=bands) 117 + assert isinstance(res, InstalledSourceResult) 118 + assert res.path_levels.shape == (2, 3) 119 + # total is the energetic combination of the two paths 120 + assert np.allclose( 121 + res.total_level, total_structure_borne_pressure_level(res.path_levels) 122 + ) 123 + # installed power is L_Ws,c − D_C 124 + assert np.allclose(res.installed_power_level, lwc - dc) 125 + 126 + 127 + def test_prediction_requires_paths() -> None: 128 + with pytest.raises(ValueError, match="paths"): 129 + installed_source_prediction(80.0, 10.0, []) 130 + 131 + 132 + def test_prediction_missing_path_key() -> None: 133 + with pytest.raises(ValueError, match="missing required key"): 134 + installed_source_prediction( 135 + 80.0, 10.0, [{"adjustment_term": 5.0, "element_area": 12.0}] 136 + ) 137 + 138 + 139 + def test_prediction_band_count_mismatch() -> None: 140 + with pytest.raises(ValueError, match="flanking_reduction_index"): 141 + installed_source_prediction( 142 + np.array([80.0, 82.0, 78.0]), np.array([9.0, 10.0, 11.0]), 143 + [{"adjustment_term": 5.0, 144 + "flanking_reduction_index": np.array([50.0, 52.0]), # 2 vs 3 bands 145 + "element_area": 12.0}], 146 + ) 147 + 148 + 149 + def test_overall_level_numeric() -> None: 150 + res = installed_source_prediction( 151 + np.array([80.0, 82.0]), np.array([10.0, 10.0]), 152 + [{"adjustment_term": 0.0, "flanking_reduction_index": np.array([0.0, 0.0]), 153 + "element_area": 10.0}], 154 + ) 155 + expected = 10.0 * math.log10(np.sum(10.0 ** (0.1 * res.total_level))) 156 + assert res.overall_level == pytest.approx(expected) 157 + 158 + 159 + def test_total_level_1d_paths_only() -> None: 160 + # a 1-D (paths-only) array reduces to a scalar-like total 161 + total = total_structure_borne_pressure_level(np.array([40.0, 44.0, 38.0])) 162 + expected = 10.0 * math.log10(np.sum(10.0 ** (0.1 * np.array([40.0, 44.0, 38.0])))) 163 + assert float(total) == pytest.approx(expected) 164 + 165 + 166 + def test_coupling_elastic_support_hand_value() -> None: 167 + ys, yi, yk = 1e-4 + 0j, 1e-5 + 0j, 5e-4 + 0j 168 + expected = 10.0 * math.log10(abs(ys + yi + yk) ** 2 / (abs(ys) * yi.real)) 169 + assert coupling_term(ys, yi, transfer_mobility=yk) == pytest.approx(expected) 170 + 171 + 172 + def test_plot_returns_axes() -> None: 173 + pytest.importorskip("matplotlib") 174 + import matplotlib 175 + 176 + matplotlib.use("Agg") 177 + bands = np.array([250.0, 500.0, 1000.0]) 178 + paths = [ 179 + {"adjustment_term": 5.0, 180 + "flanking_reduction_index": np.array([50.0, 52.0, 55.0]), 181 + "element_area": 12.0}, 182 + ] 183 + res = installed_source_prediction( 184 + np.array([78.0, 80.0, 77.0]), np.array([9.0, 10.0, 11.0]), 185 + paths, frequencies=bands, 186 + ) 187 + assert res.plot() is not None