Skip to content

Commit caa8d44

Browse files
committed
finish draft of Appendix B.
1 parent a83be86 commit caa8d44

File tree

1 file changed

+23
-23
lines changed

1 file changed

+23
-23
lines changed

documentation/mdbook/src/appendix_b.md

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,7 @@ As we fill out the channel table, we enter the physical device and channel that
575575

576576
Note that when assigning a node and direction to the voltage signal, you do not want to use the same values as for the drive point, otherwise Rattlesnake will not be able to determine which frequency response function is the drive point FRF. The author's practice is to use the same node number as the force sensor, but offset by some value (e.g. 100 in this case). In the case of multiple shakers, it will be clear which voltage corresponds to which shaker if such a convention is followed.
577577

578-
With the channel table set up, we can now start Rattlesnake and load the channel table. We will again select the Modal Testing environment, click the `Load Channel Table` button and load our file. We will again set the `Sample Rate` to `5120` Hz. With these parameters set, we can click the `Initialize Data Acquisition` button to proceed. Figure \ref{fig:examplecdaqmodalshakerdaqsettings} shows these settings in the Rattlesnake \ac{GUI}.
578+
With the channel table set up, we can now start Rattlesnake and load the channel table. We will again select the Modal Testing environment, click the `Load Channel Table` button and load our file. We will again set the `Sample Rate` to `5120` Hz. With these parameters set, we can click the `Initialize Data Acquisition` button to proceed. Figure \ref{fig:examplecdaqmodalshakerdaqsettings} shows these settings in the Rattlesnake GUI.
579579

580580
<!--
581581
\begin{figure}[H]
@@ -601,7 +601,7 @@ In the `Channel Selections` box, we select the Force channel as the reference.
601601

602602
In the `Signal Generator` portion of the window, we select the `Pseudorandom` tab to set up a Pseudorandom signal. We can truncate the `Frequency Range` from `10 -- 2000` to remove the large rigid body motion that can occur at low frequency, as well as the portion of the excitation that is in the antialiasing filters of the system. We will set the `RMS` value to `0.1` V.
603603

604-
With these parameters set, we can click the `Initialize Environments` button to proceed. Figure B-31<!--\ref{fig:examplecdaqmodalpseudorandomsettings}--> shows these settings in the Rattlesnake \ac{GUI}.
604+
With these parameters set, we can click the `Initialize Environments` button to proceed. Figure B-31<!--\ref{fig:examplecdaqmodalpseudorandomsettings}--> shows these settings in the Rattlesnake GUI.
605605

606606
<!--
607607
\begin{figure}[H]
@@ -681,7 +681,7 @@ We will return to the `Environment Definition` tab and set up a `Burst Random` t
681681

682682
In the `Signal Generator` section, we will select a `Burst Random` signal and set the `On Percentage` to `33%` to provide a 1 second burst and 2 second ring down. We will keep the other parameters the same as our previous Pseudorandom test.
683683

684-
Figure B-35<!--\ref{fig:examplecdaqburstrandomparameters}--> shows the parameters in the Rattlesnake \ac{GUI}. Click the `Initialize Environments` button to proceed, and return to the `Run Test` tab.
684+
Figure B-35<!--\ref{fig:examplecdaqburstrandomparameters}--> shows the parameters in the Rattlesnake GUI. Click the `Initialize Environments` button to proceed, and return to the `Run Test` tab.
685685

686686
<!--
687687
\begin{figure}[H]
@@ -713,7 +713,7 @@ We can preview the signal by clicking the `Preview Acquisition` button to ensure
713713

714714
Apparently the shaker adds enough damping that the structure stops ringing by approximately 1/2 second after the burst finishes. Let's therefore `Stop Acquisition`, `Disarm Data Acquisition`, and return to the `Environment Definition` tab. We will update the `Samples Per Frame` value to `5120` to achieve a 1 second measurement frame. We will also change the burst `On Percentage` to `50%`.
715715

716-
Figure B-37<!--\ref{fig:examplecdaqburstrandomparametersv2}--> shows the updated parameters in the Rattlesnake \ac{GUI}. Click the `Initialize Environments` button to confirm these settings, and return to the `Run Test` tab.
716+
Figure B-37<!--\ref{fig:examplecdaqburstrandomparametersv2}--> shows the updated parameters in the Rattlesnake GUI. Click the `Initialize Environments` button to confirm these settings, and return to the `Run Test` tab.
717717

718718
<!--
719719
\begin{figure}[H]
@@ -886,7 +886,7 @@ truncated_accelerations.plot()
886886

887887
**Figure B-43. Truncated acceleration data that we will turn into vibration specifications.**
888888

889-
To construct a random vibration environment, we will compute \ac{CPSD}s from this signal. While this isn't really an appropriate signal for a random vibration specification, it is good enough to demonstrate Rattlesnake's capabilities. Figure B-44<!--\ref{fig:examplecdaqcpsdspecification}--> shows the \ac{APSD}s, which are the diagonal entries of the \ac{CPSD} specification matrix.
889+
To construct a random vibration environment, we will compute CPSDs from this signal. While this isn't really an appropriate signal for a random vibration specification, it is good enough to demonstrate Rattlesnake's capabilities. Figure B-44<!--\ref{fig:examplecdaqcpsdspecification}--> shows the APSDs, which are the diagonal entries of the CPSD specification matrix.
890890

891891
```python
892892
random_spec = truncated_accelerations.cpsd(samples_per_frame = 5120, overlap=0.5, window = 'hann')
@@ -904,14 +904,14 @@ fig.tight_layout()
904904
\begin{figure}[H]
905905
\centering
906906
\includegraphics[width=0.7\linewidth]{figures/example_cdaq_cpsd_specification}
907-
\caption{Diagonal entries of the random vibration specification \ac{CPSD} matrix.}
907+
\caption{Diagonal entries of the random vibration specification CPSD matrix.}
908908
\label{fig:examplecdaqcpsdspecification}
909909
\end{figure}
910910
-->
911911

912912
![example_cdaq_cpsd_specification](figures/example_cdaq_cpsd_specification.png)
913913

914-
**Figure B-44. Diagonal entries of the random vibration specification \ac{CPSD} matrix.**
914+
**Figure B-44. Diagonal entries of the random vibration specification CPSD matrix.**
915915

916916
We will also construct a transient specification that we will use to test the transient vibration control, shown in Figure B-45<!--\ref{fig:examplecdaqtransientspecification}-->.
917917

@@ -1030,20 +1030,20 @@ In the `Control Channels` section, we will select all four acceleration channels
10301030

10311031
Finally we will click the `Load Spec` button and navigate to our random specification file `random_specification.npz` from SDynPy. The specification should then appear in the plots.
10321032

1033-
With these parameters selected, we can click the Initialize Environments button to proceed. Figure B-51 <!--\ref{fig:examplecdaqrandomvibrationparameters}--> shows the parameters in the Rattlesnake \ac{GUI}.
1033+
With these parameters selected, we can click the Initialize Environments button to proceed. Figure B-51 <!--\ref{fig:examplecdaqrandomvibrationparameters}--> shows the parameters in the Rattlesnake GUI.
10341034

10351035
<!--
10361036
\begin{figure}[H]
10371037
\centering
10381038
\includegraphics[width=\linewidth]{figures/example_cdaq_random_vibration_parameters}
1039-
\caption{Random vibration parameters specified in the Rattlesnake \ac{GUI}.}
1039+
\caption{Random vibration parameters specified in the Rattlesnake GUI.}
10401040
\label{fig:examplecdaqrandomvibrationparameters}
10411041
\end{figure}
10421042
-->
10431043

10441044
![example_cdaq_random_vibration_parameters](figures/example_cdaq_random_vibration_parameters.png)
10451045

1046-
**Figure B-51. Random vibration parameters specified in the Rattlesnake \ac{GUI}.**
1046+
**Figure B-51. Random vibration parameters specified in the Rattlesnake GUI.**
10471047

10481048
At this point, we must run the `System Identification` phase of the controller. We will set the Level to `0.1 V RMS`, then click `Start` to start the system identification. A noise floor check will first be run, then the system identification follows. Rattlesnake will determine the transfer functions between the two shaker drive signals and the four accelerometer channels. When the specified number of averages have been obtained, the System Identification will stop automatically. Figure B-52 <!--\ref{fig:examplecdaqrandomvibrationsystemid}--> shows the system identification phase of the controller.
10491049

@@ -1084,7 +1084,7 @@ On the `Run Test` tab, we see a different interface than the one we saw for the
10841084

10851085
To start, we will set the `Current Test Level` to `-12` dB to ensure when we start the test we don't break anything. We will then step up slowly to the full `0` dB level test.
10861086

1087-
We can then click the `Start Environment` button to start the test. Figure B-54<!--\ref{fig:examplecdaqrandomvibrationstart}--> shows the \ac{GUI} prior to starting the test with the test level turned down to -12 dB.
1087+
We can then click the `Start Environment` button to start the test. Figure B-54<!--\ref{fig:examplecdaqrandomvibrationstart}--> shows the GUI prior to starting the test with the test level turned down to -12 dB.
10881088

10891089
<!--
10901090
\begin{figure}[H]
@@ -1099,33 +1099,33 @@ We can then click the `Start Environment` button to start the test. Figure B-54
10991099

11001100
**Figure B-54. Ready to start a random vibration test in Rattlesnake**
11011101

1102-
As the test is running, the main Rattlesnake interface will show the sum of \ac{APSD}s, which is the trace of the \ac{CPSD} matrix and can be thought of as an average response of the test (Figure B-55<!--\ref{fig:examplecdaqrandomvibrationsumasds}-->). To visualize individual channels, windows can be created in the `Data Display` section of the window (Figure B-56<!--\ref{fig:examplecdaqrandomvibrationindividualchannels}-->).
1102+
As the test is running, the main Rattlesnake interface will show the sum of APSDs, which is the trace of the CPSD matrix and can be thought of as an average response of the test (Figure B-55<!--\ref{fig:examplecdaqrandomvibrationsumasds}-->). To visualize individual channels, windows can be created in the `Data Display` section of the window (Figure B-56<!--\ref{fig:examplecdaqrandomvibrationindividualchannels}-->).
11031103

11041104
<!--
11051105
\begin{figure}[H]
11061106
\centering
11071107
\includegraphics[width=\linewidth]{figures/example_cdaq_random_vibration_sum_asds}
1108-
\caption{Rattlesnake \ac{GUI} showing the average test response}
1108+
\caption{Rattlesnake GUI showing the average test response}
11091109
\label{fig:examplecdaqrandomvibrationsumasds}
11101110
\end{figure}
11111111
-->
11121112

11131113
![example_cdaq_random_vibration_sum_asds](figures/example_cdaq_random_vibration_sum_asds.png)
11141114

1115-
**Figure B-55. Rattlesnake \ac{GUI} showing the average test response**
1115+
**Figure B-55. Rattlesnake GUI showing the average test response**
11161116

11171117
<!--
11181118
\begin{figure}[H]
11191119
\centering
11201120
\includegraphics[width=\linewidth]{figures/example_cdaq_random_vibration_individual_channels}
1121-
\caption{Individual channel \ac{APSD}s showing how well each channel is matching the test level.}
1121+
\caption{Individual channel APSDs showing how well each channel is matching the test level.}
11221122
\label{fig:examplecdaqrandomvibrationindividualchannels}
11231123
\end{figure}
11241124
-->
11251125

11261126
![example_cdaq_random_vibration_individual_channels](figures/example_cdaq_random_vibration_individual_channels.png)
11271127

1128-
**Figure B-56. Individual channel \ac{APSD}s showing how well each channel is matching the test level.**
1128+
**Figure B-56. Individual channel APSDs showing how well each channel is matching the test level.**
11291129

11301130
If the controller is controlling sufficiently well, we can step up the level to `0` dB as shown in Figure B-57 <!--\ref{fig:examplecdaqrandomvibrationsumasdsfulllevel}-->.
11311131

@@ -1155,7 +1155,7 @@ Feel free to investigate other control laws in the `control_laws.py` file, as th
11551155

11561156
Clearly, Rattlesnake has obtained relatively good control for this test.
11571157

1158-
To save data from the test, we can either stream time data using the same approach used previously, or we can simply use the `Save Current Spectral Data` to save out the current realizations of the control \ac{CPSD}s, which we will call `random_vibration_spectral_results.nc4`. This is the quickest way to do comparisons between the specification and the control achieved. We can load this file with SDynPy and use SDynPy to make comparisons between the test and specification. The results are shown in Figure B-59<!--\ref{fig:examplecdaqrandomvibrationerrorsummary}-->.
1158+
To save data from the test, we can either stream time data using the same approach used previously, or we can simply use the `Save Current Spectral Data` to save out the current realizations of the control CPSDs, which we will call `random_vibration_spectral_results.nc4`. This is the quickest way to do comparisons between the specification and the control achieved. We can load this file with SDynPy and use SDynPy to make comparisons between the test and specification. The results are shown in Figure B-59<!--\ref{fig:examplecdaqrandomvibrationerrorsummary}-->.
11591159

11601160
```python
11611161
control, spec, drives = sdpy.rattlesnake.read_random_spectral_data(
@@ -1188,34 +1188,34 @@ The last demonstration will show how we can perform a MIMO Transient environment
11881188
\begin{figure}[H]
11891189
\centering
11901190
\includegraphics[width=0.5\linewidth]{figures/example_cdaq_mimo_transient_selection}
1191-
\caption{Selecting the \ac{MIMO} Transient environment}
1191+
\caption{Selecting the MIMO Transient environment}
11921192
\label{fig:examplecdaqmimotransientselection}
11931193
\end{figure}
11941194

11951195
![example_cdaq_mimo_transient_selection](figures/example_cdaq_mimo_transient_selection.png)
11961196

1197-
**Figure B-60. Selecting the \ac{MIMO} Transient environment**
1197+
**Figure B-60. Selecting the MIMO Transient environment**
11981198

11991199
We will set the `Data Acquisition Setup` tab identical to what was used before, as shown in Figure B-50<!--\ref{fig:examplecdaqvibrationdataacquisitionsetup}-->. Click the `Initialize Data Acquisition` button to proceed.
12001200

12011201
On the `Environment Definition tab`, we will again `Load` a control law file. This time we will load the `transient_control_laws.py` file, which contains transient control laws for Rattlesnake. We will select the `pseudoinverse_control` function.
12021202

12031203
In the `Control Channels` section, we will again select all four accelerometer channels as the control channels.
12041204

1205-
Finally, we will select the `Load Signal` button to load in our specification file `transient_specification.npz`. Figure B-61<!--\ref{fig:examplecdaqtransientparameters}--> shows these parameters set in the Rattlesnake \ac{GUI}. With these parameters set, we will click the `Initialize Environments` button to proceed.
1205+
Finally, we will select the `Load Signal` button to load in our specification file `transient_specification.npz`. Figure B-61<!--\ref{fig:examplecdaqtransientparameters}--> shows these parameters set in the Rattlesnake GUI. With these parameters set, we will click the `Initialize Environments` button to proceed.
12061206

12071207
<!--
12081208
\begin{figure}[H]
12091209
\centering
12101210
\includegraphics[width=\linewidth]{figures/example_cdaq_transient_parameters}
1211-
\caption{Parameters set for the Transient environment in the Rattlesnake \ac{GUI}.}
1211+
\caption{Parameters set for the Transient environment in the Rattlesnake GUI.}
12121212
\label{fig:examplecdaqtransientparameters}
12131213
\end{figure}
12141214
-->
12151215

12161216
![example_cdaq_transient_parameters](figures/example_cdaq_transient_parameters.png)
12171217

1218-
**Figure B-61. Parameters set for the Transient environment in the Rattlesnake \ac{GUI}.**
1218+
**Figure B-61. Parameters set for the Transient environment in the Rattlesnake GUI.**
12191219

12201220
The Transient environment will also need to perform a `System Identification`. Again set the `Level` to `0.1 V RMS` and click `Start` to start the noise floor and system identification. Here it may be useful to look at the `Impulse Response`, as that is useful to understand how transient control will be performed. This is shown in Figure B-62<!--\ref{fig:examplecdaqtransientsystemid}-->.
12211221

@@ -1319,4 +1319,4 @@ This appendix has walked through several example tests using real hardware with
13191319

13201320
Modal testing was performed using both hammer impacts and shaker excitation. Modes were fit to the data using the SDynPy Python package.
13211321

1322-
Vibration testing was performed using modal shakers. An impact hammer was used to create an environment that the vibration test would aim to replicate. Both \ac{MIMO} Random and \ac{MIMO} transient vibration tests were run, where the \ac{MIMO} Random attempted replicate a prescribed \ac{CPSD} matrix, and the \ac{MIMO} Transient attempted to replicate the time history directly. Both control schemes achieved good results.
1322+
Vibration testing was performed using modal shakers. An impact hammer was used to create an environment that the vibration test would aim to replicate. Both MIMO Random and MIMO transient vibration tests were run, where the MIMO Random attempted replicate a prescribed CPSD matrix, and the MIMO Transient attempted to replicate the time history directly. Both control schemes achieved good results.

0 commit comments

Comments
 (0)