visualdynamics.plot.sine_profile¶
sine_profile
¶
A sine profile drawn three ways: displacement, velocity and acceleration against frequency, with the crossovers marked on all three.
A profile written in segments looks different in each quantity. A constant displacement is a flat line on the displacement row and a ramp of 12 dB per octave on the acceleration row; a constant acceleration is flat on its own row and falls on the other two. Drawn all three ways on log axes the segments read as straight lines and the profile's demands on the machine stand out: the most displacement, the most velocity and the most acceleration, each named in its row's title with where it falls, which is what goes against a shaker's stroke, velocity and force ratings.
Every crossover (core.sine_profile.Crossing) is a vertical line across
the three rows, and nothing is said by hue alone:
- a crossover that checks against the breakpoint the document wrote is a dashed line with a hollow circle where the segments meet on the acceleration row;
- one that does not check is a dashed line with a filled cross, and the breakpoint the document wrote is a dotted line beside it, so the gap between the two is the error read straight off the plot;
- a step between two segments of one quantity is a dotted line with a filled square;
and the legend says each in words with its check. Where the profile was
read back from a tone written as breakpoints (read_profile), the
tone's own level, interpolated between breakpoints as the tone runs it
(SineTone.target), can be drawn dashed over the profile: where the two
part, the tone's breakpoints are too far apart for the segment they
write.
Functions:
| Name | Description |
|---|---|
crossing_words |
One crossing in the legend's words ( |
maximum_words |
The most the profile asks for in |
build_profile |
Draw a |
Functions:¶
crossing_words
¶
maximum_words
¶
The most the profile asks for in quantity and where, in words:
'most 0.2 in peak to peak at 5 Hz'.
Source code in src/visualdynamics/plot/sine_profile.py
build_profile
¶
build_profile(layout: Any, profile: Any = None, *, interpolated: tuple[Any, Any] | None = None, unit_system: Any = None, theme: Any = None, name: str = 'profile') -> list[Any]
Draw a core.sine_profile.SineProfile into layout as three rows
sharing their log frequency axis, and return the three plots.
interpolated is (Hz, m/s**2 peak), a tone's own level as it runs
it (core.sine_profile.interpolated), drawn dashed over the profile
on every row; with no profile (one that could not be read from the
tone) it is drawn alone. name is what the profile is called in the
legend.
Source code in src/visualdynamics/plot/sine_profile.py
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | |