summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorf4exb <f4exb06@gmail.com>2020-01-01 11:18:06 +0100
committerf4exb <f4exb06@gmail.com>2020-01-01 11:18:06 +0100
commitb11f5544fe252c02d9e7161bde70b0cf0a75c4ee (patch)
treed47bb713df6aceacda8c58ea30e39dd91eee0106
parent99565a1d28c9099f40412cc5751edd92bd49b85e (diff)
MIMO plugins documentation creation and related updatesv5.0.0
-rw-r--r--Readme.md4
-rw-r--r--doc/img/BeamsteeringCWMod_plugin.pngbin0 -> 13932 bytes
-rw-r--r--doc/img/BeamsteeringCWMod_plugin.xcfbin0 -> 42258 bytes
-rw-r--r--doc/img/BladeRF2MIMO_plugin.pngbin0 -> 34938 bytes
-rw-r--r--doc/img/BladeRF2MIMO_plugin.xcfbin0 -> 158679 bytes
-rw-r--r--doc/img/Interferometer_plugin.pngbin0 -> 101187 bytes
-rw-r--r--doc/img/Interferometer_plugin.xcfbin0 -> 537234 bytes
-rw-r--r--doc/img/Interferometer_settings.pngbin0 -> 10260 bytes
-rw-r--r--doc/img/Interferometer_settings.xcfbin0 -> 42189 bytes
-rw-r--r--doc/img/TestMOSync_plugin.pngbin0 -> 25661 bytes
-rw-r--r--doc/img/TestMOSync_plugin.xcfbin0 -> 133736 bytes
-rw-r--r--doc/img/beamsteeringcw_angle.pngbin0 -> 9106 bytes
-rw-r--r--doc/img/interferometer_antennas.pngbin0 -> 15224 bytes
-rw-r--r--doc/img/interferometer_doa.pngbin0 -> 24160 bytes
-rw-r--r--plugins/channelmimo/beamsteeringcwmod/readme.md56
-rw-r--r--plugins/channelmimo/interferometer/readme.md160
-rw-r--r--plugins/samplemimo/bladerf2mimo/readme.md158
-rw-r--r--plugins/samplemimo/testmi/readme.md2
-rw-r--r--plugins/samplemimo/testmosync/readme.md49
19 files changed, 429 insertions, 0 deletions
diff --git a/Readme.md b/Readme.md
index 971e77ae2..5eb07e8fd 100644
--- a/Readme.md
+++ b/Readme.md
@@ -51,6 +51,10 @@ Since version 4 the `sdrangelsrv` binary launches a server mode SDRangel instanc
Since version 4.1 the previously separated project SDRdaemon has been modified and included in SDRangel. The `sdrangelsrv` headless variant can be used for this purpose using the Remote source or sink channels.
+<h2>MIMO support</h2>
+
+Since version 5 and exclusively on the `v5` branch of the repository. This supports devices and channels with simultaneous and coherent handling of several input and/or output streams in parallel.
+
<h1>Notes on pulseaudio setup</h1>
The audio devices with Qt are supported through pulseaudio and unless you are using a single sound chip (or card) with a single output port or you are an expert with pulseaudio config files you may get into trouble when trying to route the audio to a different output port. These notes are a follow-up of issue #31 with my own experiments with HDMI audio output on the Udoo x86 board. So using this example of HDMI output you can do the following:
diff --git a/doc/img/BeamsteeringCWMod_plugin.png b/doc/img/BeamsteeringCWMod_plugin.png
new file mode 100644
index 000000000..0a0dead8c
--- /dev/null
+++ b/doc/img/BeamsteeringCWMod_plugin.png
Binary files differ
diff --git a/doc/img/BeamsteeringCWMod_plugin.xcf b/doc/img/BeamsteeringCWMod_plugin.xcf
new file mode 100644
index 000000000..beb80beb8
--- /dev/null
+++ b/doc/img/BeamsteeringCWMod_plugin.xcf
Binary files differ
diff --git a/doc/img/BladeRF2MIMO_plugin.png b/doc/img/BladeRF2MIMO_plugin.png
new file mode 100644
index 000000000..d22046491
--- /dev/null
+++ b/doc/img/BladeRF2MIMO_plugin.png
Binary files differ
diff --git a/doc/img/BladeRF2MIMO_plugin.xcf b/doc/img/BladeRF2MIMO_plugin.xcf
new file mode 100644
index 000000000..b3f837c66
--- /dev/null
+++ b/doc/img/BladeRF2MIMO_plugin.xcf
Binary files differ
diff --git a/doc/img/Interferometer_plugin.png b/doc/img/Interferometer_plugin.png
new file mode 100644
index 000000000..f105a8c16
--- /dev/null
+++ b/doc/img/Interferometer_plugin.png
Binary files differ
diff --git a/doc/img/Interferometer_plugin.xcf b/doc/img/Interferometer_plugin.xcf
new file mode 100644
index 000000000..2f1f5f9f4
--- /dev/null
+++ b/doc/img/Interferometer_plugin.xcf
Binary files differ
diff --git a/doc/img/Interferometer_settings.png b/doc/img/Interferometer_settings.png
new file mode 100644
index 000000000..32f73a2a6
--- /dev/null
+++ b/doc/img/Interferometer_settings.png
Binary files differ
diff --git a/doc/img/Interferometer_settings.xcf b/doc/img/Interferometer_settings.xcf
new file mode 100644
index 000000000..976efa96d
--- /dev/null
+++ b/doc/img/Interferometer_settings.xcf
Binary files differ
diff --git a/doc/img/TestMOSync_plugin.png b/doc/img/TestMOSync_plugin.png
new file mode 100644
index 000000000..cbbba82c6
--- /dev/null
+++ b/doc/img/TestMOSync_plugin.png
Binary files differ
diff --git a/doc/img/TestMOSync_plugin.xcf b/doc/img/TestMOSync_plugin.xcf
new file mode 100644
index 000000000..fe437f748
--- /dev/null
+++ b/doc/img/TestMOSync_plugin.xcf
Binary files differ
diff --git a/doc/img/beamsteeringcw_angle.png b/doc/img/beamsteeringcw_angle.png
new file mode 100644
index 000000000..7397f541c
--- /dev/null
+++ b/doc/img/beamsteeringcw_angle.png
Binary files differ
diff --git a/doc/img/interferometer_antennas.png b/doc/img/interferometer_antennas.png
new file mode 100644
index 000000000..df1b5a81a
--- /dev/null
+++ b/doc/img/interferometer_antennas.png
Binary files differ
diff --git a/doc/img/interferometer_doa.png b/doc/img/interferometer_doa.png
new file mode 100644
index 000000000..3e4f8e68b
--- /dev/null
+++ b/doc/img/interferometer_doa.png
Binary files differ
diff --git a/plugins/channelmimo/beamsteeringcwmod/readme.md b/plugins/channelmimo/beamsteeringcwmod/readme.md
new file mode 100644
index 000000000..193e91d4d
--- /dev/null
+++ b/plugins/channelmimo/beamsteeringcwmod/readme.md
@@ -0,0 +1,56 @@
+<h1>Beam Steering Continuous Wave plugin</h1>
+
+<h2>Introduction</h2>
+
+This is a v5 only plugin.
+
+This MIMO transmission only (MO) plugin can be used to drive a 2 channel MO device in order to produce a continuous wave signal (CW) with a control of hte phase between the two streams. When the MO device is connected to a two antenna system the resulting beam can be steered in direction using the phase difference. Control is made directly in angle units.
+
+; This was designed more as a proof of concept of multiple output plugin rather than something really useful.
+
+<h2>Interface</h2>
+
+![Beam steering CW plugin GUI](../../../doc/img/BeamsteeringCWMod_plugin.png)
+
+<h3>1: Channel output</h3>
+
+The two channels A and B are connected to device output streams 0 and 1 respectively. The device must expose these channels.
+
+Use this combo box to select channel output:
+ - **A,B**: output A and B channels
+ - **A**: output A channel only
+ - **B**: output B channel only
+
+<h3>2: Interpolation factor</h2>
+
+The channel sample rate is interpolated by a power of two to feed the channels at baseband sample rate.
+
+<h3>3: Channel sample rate</h2>
+
+This is the channel sample rate in kilo or mega samples per second indicated by the `k` or `M` letter.
+
+<h3>4: Half-band filter chain sequence display</h3>
+
+This string represents the sequence of half-band filters used in the interpolation from channel to device baseband. Each character represents a filter type:
+
+ - **L**: lower half-band
+ - **H**: higher half-band
+ - **C**: centered
+
+<h3>5: Center frequency shift</h3>
+
+This is the shift of the channel center frequency from the device center frequency. Its value is driven by the baseband sample rate, the interpolation factor (2) and the filter chain sequence (4).
+
+<h3>6: Half-band filter chain sequence adjust</h3>
+
+The slider moves the channel center frequency roughly from the lower to the higher frequency in the device baseband. The number on the right represents the filter sequence as the decimal value of a base 3 number. Each base 3 digit represents the filter type and its sequence from MSB to LSB in the filter chain:
+
+ - **0**: lower half-band
+ - **1**: centered
+ - **2**: higher half-band
+
+<h3>7: Steering angle</h3>
+
+This slider controls the beam steering angle &theta; in degrees when the configuration of antennas is made like this:
+
+![Beam steering CW plugin GUI](../../../doc/img/beamsteeringcw_angle.png) \ No newline at end of file
diff --git a/plugins/channelmimo/interferometer/readme.md b/plugins/channelmimo/interferometer/readme.md
new file mode 100644
index 000000000..9952ab5c7
--- /dev/null
+++ b/plugins/channelmimo/interferometer/readme.md
@@ -0,0 +1,160 @@
+<h1>Interferometer plugin</h1>
+
+<h2>Introduction</h2>
+
+This is a v5 only plugin.
+
+This MIMO reception only (MI) plugin can be used to study phase difference between two coherent streams. It must be connected to a device that exposes at least two input streams and will connect to streams 0 and 1 as channels A and B respectively.
+
+<h2>Interface</h2>
+
+![Interferometer plugin GUI](../../../doc/img/Interferometer_plugin.png)
+
+The interface is divided in 3 sections that will be detailed next:
+ - A: settings. These are the plugin controls
+ - B: spectrum (frequency domain). This is a spectrum display analogous to other spectrum displays. Its input varies depending on the correlation function selected
+ - C: scope (time domain). This is a scope display analogous to other scope displays. Its input varies depending on the correlation function selected. For FFT type correlation this is not a time domain but a frequency domain display transposed to time analogous to a frequency sweep.
+
+<h2>A. Settings section</h2>
+
+![Interferometer plugin setings GUI](../../../doc/img/Interferometer_settings.png)
+
+<h3>A.1. Decimation</h3>
+
+Input streams frome baseband are decimated by a power of two. Use this combo to select from 0 (no decimation) to 64 (2^6). The resulting channel sample rate is displayed next (A.2)
+
+<h3>A.2. Channel sample rate</h3>
+
+This is the channel sample rate in kilo or mega samples per second indicated by the `k` or `M` letter.
+
+<h3>A.3. Half-band filter chain sequence display</h3>
+
+This string represents the sequence of half-band filters used in the decimation from device baseband to channel stream and controlled by (A.7). Each character represents a filter type:
+
+ - **L**: lower half-band
+ - **H**: higher half-band
+ - **C**: centered
+
+<h3>A.4. Correlation function</h3>
+
+This combo selects which function is applied to A and B channel inputs to obtain resulting correlation signal.
+ - **A**: A channel only (no correlation)
+ - **B**: B channel only (no correlation)
+ - **A+B**: This is the complex sum of A and B
+ - **A.B***: This is the complex multiplication of A with the conjugate of B
+ - **IFFT**: This is a time correlation obtained by FFT. The FFT of A is multiplied by the conjugate of the FFT of B and the result is passed to an IFFT to obtain the final result. This can be used for passive radar.
+ - **IFFT***: Same FFT operations as above but the IFFT is handled differently: sums the first half of IFFT with the reversed second half as one is the conjugate of the other so this should yield constant phase
+ - **FFT**: The FFT of A is multiplied by the conjugate of the FFT of B (no IFFT) thus the result is in the frequency domain. This is sometimes called "interspectrum". It can be used in practice to evaluate the direction of arrival (DOA) of a plane wave (see next)
+ - **IFFT2**: Same as IFFT but looks at the entire time domain including "negative" times.
+
+<h4>Spectrum and scope inputs</h4>
+
+The spectrum and scope displays inputs vary depending on the correlation types and are summarized in the table below:
+
+<table>
+<tr>
+ <th>Correlation type</th>
+ <th>Spectrum</th>
+ <th>Scope</th>
+</tr>
+<tr>
+ <td>A</td>
+ <td>FFT(A)</td>
+ <td>A(t)</td>
+</tr>
+<tr>
+ <td>B</td>
+ <td>FFT(B)</td>
+ <td>B(t)</td>
+</tr>
+<tr>
+ <td>A+B</td>
+ <td>FFT(A+B)</td>
+ <td>(A+B)(t)</td>
+</tr>
+<tr>
+ <td>A.B*</td>
+ <td>FFT(A.B*)</td>
+ <td>(A.B*)(t)</td>
+</tr>
+<tr>
+ <td>IFFT</td>
+ <td>FFT(A)*FFT(B)*</td>
+ <td>IFFT(FFT(A).FFT(B)*)</td>
+</tr>
+<tr>
+ <td>IFFT</td>
+ <td>FFT(A)*FFT(B)*</td>
+ <td>IFFT(FFT(A).FFT(B)*) with special manipulation (see above)</td>
+</tr>
+<tr>
+ <td>FFT</td>
+ <td>FFT(A)*FFT(B)* over 1 FFT length</td>
+ <td>FFT(A)*FFT(B)* possibly over several FFT lengths depending on trace length</td>
+</tr>
+<tr>
+ <td>IFFT2</td>
+ <td>FFT(A)*FFT(B)*</td>
+ <td>IFFT(FFT(A).FFT(B)*) with positive and negative times</td>
+</tr>
+</table>
+
+<h4>Direction Of Arrival (DOA) estimation with FFT correlation</h4>
+
+The "FFT" correlation function can be selected for DOA estimation. "A.B*" should yield similar results but is less precise because FFT analysis helps in removing non essential contributions. The FFT analysis can also show different DOAs for signals at different frequencies.
+
+It assumes that channel A is connected to the antenna of reference (device stream 0) and channel B is connected to the second antenna (device stream 1) in the following configuration:
+
+![Interferometer antennas](../../../doc/img/interferometer_antennas.png)
+
+The scope is configured to have X and Y displays with Y1 set to a magnitude display projection and X to a phase related projection. See scope controls in C section for setup. Here are the different possibilities:
+ - **X**: Phi, DOAP, DOAN
+ - **Y1**: Mag, MagSq, MagDB (this one is usually the most convenient)
+
+You will select the XY display on the scope and you can use the polar grid display to show phase or direction angles directly.
+
+Angles are counted from -&pi; to &pi; and normalized to &pi; for display thus displayed from -1.0 to 1.0
+
+The phase difference on X input (`Phi` selected) is then the actual phase difference between the reference signal A and the second signal B. Thus for a given phase difference the wave may come from the positive side of angles (0 to &pi;) or the negative side (-&pi; to 0). Angles of arrival are referenced to the axis perpendicular to the axis passing by the two antennas.
+
+![Interferometer DOA](../../../doc/img/interferometer_doa.png)
+
+Thus when antennas are separated by half the wavelength the relation between the angle of arrival &theta; and the phase difference &phi; can be expressed as:
+
+&phi; = &pi; cos(&theta;) thus &theta; = acos(&phi; / &pi;)
+
+This angle can be displayed directly when `DOAP` (positive angles) or `DOAN` (negative angles) is selected for X input.
+
+Thus a possible procedure to determine DOA could be the following:
+
+1. Arrange antennas axis so that the phase difference &phi; or DOA angle &theta; is roughly &pi;/2 (zero phase difference)
+2. Make an assumption for the wave to come from the positive or negative angles side
+3. Rotate the antennas axis slightly and if the DOA angle moves in the direction corresponding to your assumption (2) then the assumption is correct and the wave is coming from the side corresponding to your assumption. You can then refine the antenna axis direction to obtain a &pi;/2 or -&pi;/2 angle depending from which side the wave is coming. The scope `DOAP` projection is for waves coming from the positive angles side and `DOAN` for the negative angles side
+4. If when performing previous step (3) the DOA angle moves in the opposite direction to the one corresponding to your assumption then the wave is coming from the opposite side w.r to your assumption. You can then refine the antenna axis direction to obtain a &plusmn;&pi;/2 DOA as in (3).
+5. Once the &plusmn;&pi;/2 DOA angle (zero phase difference) is obtained at &lambda;/2 distance betweeen antennas you can move your antennas further apart to refine the &plusmn;&pi;/2 DOA angle.
+
+<h3>A.5. Phase difference correction</h3>
+
+This is the phase correction in degrees applied to signal in channel B.
+
+<h3>A.6 Center frequency shift</h3>
+
+This is the shift of the channel center frequency from the device center frequency. Its value is driven by the baseband sample rate, the decimation factor (A.1) and the filter chain sequence (A.7).
+
+<h3>A.7. Half-band filter chain sequence adjust</h3>
+
+The slider moves the channel center frequency roughly from the lower to the higher frequency in the device baseband. The number on the right represents the filter sequence as the decimal value of a base 3 number. Each base 3 digit represents the filter type and its sequence from MSB to LSB in the filter chain:
+
+ - **0**: lower half-band
+ - **1**: centered
+ - **2**: higher half-band
+
+The resulting filter chain sequence is represented in (A.3)
+
+<h2>B. Spectrum display</h2>
+
+This is the spectrum (frequency domain) display. This display and controls are identical to all spectrum displays in the software. Further details on spectrum controls can be found [here](https://github.com/f4exb/sdrangel/tree/master/sdrgui#4-spectrum-display-control)
+
+<h2>C. Scope display</h2>
+
+This is the scope (mainly time domain) display. This display and controls are identical to all scope displays in the software. Further details can be found in [Channel Analyzer documentation](../../channelrx/chanalyzer/readme.md) \ No newline at end of file
diff --git a/plugins/samplemimo/bladerf2mimo/readme.md b/plugins/samplemimo/bladerf2mimo/readme.md
new file mode 100644
index 000000000..75be2bfb1
--- /dev/null
+++ b/plugins/samplemimo/bladerf2mimo/readme.md
@@ -0,0 +1,158 @@
+<h1>BladeRF 2.0 micro (v2) MIMO plugin</h1>
+
+<h2>Introduction</h2>
+
+This is a v5 only plugin.
+
+This MIMO plugin sends and receives its samples to/from a [BladeRF2 device](https://www.nuand.com/bladerf-2). It handles both input (Rx) and output (Tx) streams synchronously. There is no option to synchronize Rx with Tx streams.
+
+<h2>Build</h2>
+
+As with other BladeRF plugins this plugin will be built only if the [BladeRF host library](https://github.com/Nuand/bladeRF) is installed in your system. If you build it from source and install it in a custom location say: `/opt/install/libbladeRF` you will have to add `-DBLADERF_DIR=/opt/install/libbladeRF/include` to the cmake command line.
+
+Note that libbladeRF v2 with git tag 2018.10-rc1 should be used (official release) thus:
+
+ - The FX3 firmware version should be v2.3.1
+ - The FPGA image version should be v0.9.0
+
+The FPGA .rbf file should be copied to the folder where the `sdrangel` binary resides. You can download FPGA images from [here](https://www.nuand.com/fpga_images/)
+
+The BladeRF Host library is also provided by many Linux distributions (check its version) and is built in the SDRangel binary releases.
+
+<h2>Interface</h2>
+
+![BladeRF2 MIMO plugin GUI](../../../doc/img/BladeRF2MIMO_plugin.png)
+
+<h3>1. Rx/Tx settings selection</h3>
+
+Use this combo to target UI to Rx or Tx streams for Rx/Tx specific items.
+
+<h3>2. Stream settings selection</h3>
+
+Use this combo to target UI to stream 0 or stream 1 for stream specific items.
+
+<h3>3. Rx/Tx spectrum display selection</h3>
+
+Use this combo to select Rx or Tx side for main spectrum display.
+
+<h3>4. Stream spectrum display selection</h3>
+
+Use this combo to select stream 0 or stream 1 for main spectrum display.
+
+<h3>5. Start/Stop Rx</h3>
+
+This button controls the start/stop of the Rx subsystem.
+
+<h3>6. Start/Stop Tx</h3>
+
+This button controls the start/stop of the Tx subsystem.
+
+<h3>7. Record button</h3>
+
+At this moment this control is inactive (waiting for synchronous streams recording).
+
+<h3>8. Center frequency</h3>
+
+This controls the center frequency of Rx or Tx subsystems in kHz depending on the Rx/Tx settings selection (1). This frequency can effectively be different for Rx and Tx but is the same for both Rx or both Tx streams.
+
+<h3>9. LO ppm correction</h3>
+
+Use this slider to adjust LO correction in ppm. It can be varied from -20.0 to 20.0 in 0.1 steps and is applied in software. This applies to the oscillator that controls both the Rx and Tx frequency therefore it is not dependent on Rx/Tx or stream selection.
+
+<h3>10. DC auto correction options</h3>
+
+This button controls the local DSP DC auto remove DC component.
+
+<h3>11. IQ auto correction options</h3>
+
+ This button controls the local DSP auto make I/Q balance. The DC correction must be enabled for this to be effective.
+
+<h3>12. Analog filter bandwidth</h3>
+
+This is the analog filter bandwidth in kHz that applies to Rx or Tx streams. Minimum and maximum values are adjusted automatically and are the same for Rx and Tx subsystems ranging from 200 kHz to 56 MHz.
+
+<h3>13. Transverter mode open dialog</h3>
+
+This button opens a dialog to set the transverter mode frequency translation options:
+
+![Input stream transverter dialog](../../../doc/img/RTLSDR_plugin_xvrt.png)
+
+Note that if you mouse over the button a tooltip appears that displays the translating frequency and if translation is enabled or disabled. When the frequency translation is enabled the button is lit.
+
+<h4>13.1: Translating frequency</h4>
+
+You can set the translating frequency in Hz with this dial. Use the wheels to adjust the sample rate. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mousewheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows. Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2.
+
+The frequency set in the device is the frequency on the main dial (1) minus this frequency. Thus it is positive for down converters and negative for up converters.
+
+For example a mixer at 120 MHz for HF operation you would set the value to -120,000,000 Hz so that if the main dial frequency is set at 7,130 kHz the PlutoSDR will be set to 127.130 MHz.
+
+If you use a down converter to receive the 6 cm band narrowband center frequency of 5670 MHz at 432 MHz you would set the translating frequency to 5760 - 432 = 5328 MHz thus dial +5,328,000,000 Hz.
+
+For bands even higher in the frequency spectrum the GHz digits are not really significant so you can have them set at 1 GHz. Thus to receive the 10368 MHz frequency at 432 MHz you would set the translating frequency to 1368 - 432 = 936 MHz. Note that in this case the frequency of the LO used in the mixer of the transverter is set at 9936 MHz.
+
+The Hz precision allows a fine tuning of the transverter LO offset
+
+<h4>13.2: Translating frequency enable/disable</h4>
+
+Use this toggle button to activate or deactivate the frequency translation
+
+<h4>13.3: Confirmation buttons</h4>
+
+Use these buttons to confirm ("OK") or dismiss ("Cancel") your changes.
+
+<h3>14. Device sample rate / Baseband sample rate input toggle</h3>
+
+Use this toggle button to switch the sample rate input next (15) between device sample rate and baseband sample rate input. The button shows the current mode:
+
+ - **SR**: device sample rate input mode. The baseband sample rate (7A) is the device sample rate (15) divided by the decimation or multiplied by the interpolation factor (17).
+ - **BB**: baseband sample rate input mode. The device sample rate (7A) is the baseband sample rate (15) divided by the decimation or multiplied by the interpolation factor (17).
+
+<h3>15. Host/Device sample rate</h3>
+
+This controls the sample rate between Host and Device in both directions. Effectively ADC and DAC run on the same sample rate.
+
+<h3>16. Baseband center frequency position relative the the BladeRF center frequency</h3>
+
+Possible values are:
+
+ - **Cen**: the decimation operation takes place around the BladeRF Rx center frequency Fs
+ - **Inf**: the decimation operation takes place around Fs - Fc.
+ - **Sup**: the decimation operation takes place around Fs + Fc.
+
+With SR as the sample rate before decimation Fc is calculated as:
+
+ - if decimation n is 4 or lower: Fc = SR/2^(log2(n)-1). The device center frequency is on the side of the baseband. You need a RF filter bandwidth at least twice the baseband.
+ - if decimation n is 8 or higher: Fc = SR/n. The device center frequency is half the baseband away from the side of the baseband. You need a RF filter bandwidth at least 3 times the baseband.
+
+<h3>17. Decimation (Rx) or Interpolation (Tx) factor</h3>
+
+For Rx streams the I/Q stream from the BladeRF ADC is downsampled by a power of two before being sent to the passband.
+
+For Tx strams the baseband stream is interpolated by this value before being sent to the BladeRF device.
+
+Possible values are increasing powers of two: 1 (no decimation or interpolation), 2, 4, 8, 16, 32, 64.
+
+<h3>18. Lock both streams gains</h3>
+
+When engaged this applies the same gain with value control (20) to both streams (Rx or Tx)
+
+<h3>19. Gain mode</h3>
+
+This is the gain mode control that differs between Rx and Tx streams:
+ - **Rx**:
+ - **automatic**: AGC with default behavior
+ - **manual**: Manual. Use control (20) to adjust gain
+ - **fast**: fast AGC
+ - **slow**: slow AGC
+ - **hybrid**: hybrid AGC
+ - **Tx:**:
+ - **automatic**: Manual actually. Use control (20) to adjust gain
+
+<h3>20. Manual gain setting</h3>
+
+This sets the gain manually per stream or for both streams if (18) is engaged.
+
+<h3>21. Bias Tee</h3>
+
+This sets the bias tee on all Rx or Tx ports. \ No newline at end of file
diff --git a/plugins/samplemimo/testmi/readme.md b/plugins/samplemimo/testmi/readme.md
index 979a42991..2212cb7a0 100644
--- a/plugins/samplemimo/testmi/readme.md
+++ b/plugins/samplemimo/testmi/readme.md
@@ -2,6 +2,8 @@
<h2>Introduction</h2>
+This is a v5 only plugin.
+
This input sample source plugin is an internal continuous wave generator that can be used to carry out test of software internals.
<h2>Build</h2>
diff --git a/plugins/samplemimo/testmosync/readme.md b/plugins/samplemimo/testmosync/readme.md
new file mode 100644
index 000000000..8de87ec99
--- /dev/null
+++ b/plugins/samplemimo/testmosync/readme.md
@@ -0,0 +1,49 @@
+<h1>Test Multiple Output synchronized plugin</h1>
+
+<h2>Introduction</h2>
+
+This is a v5 only plugin.
+
+This MO (Multiple Output) sample sink plugin sends its samples to a spectrum display. It features the synchronous pulling of samples from two baseband channels provided by a MIMO channel plugin (thus its "MO" part). Streams 0 and 1 are connected to streams 0 and 1 of the MIMO channel respectively.
+
+<h2>Build</h2>
+
+The plugin is always built.
+
+<h2>Interface</h2>
+
+![Test MO sync plugin GUI](../../../doc/img/TestMOSync_plugin.png)
+
+<h3>1: Start/Stop</h3>
+
+Device start / stop button.
+
+ - Blue triangle icon: device is ready and can be started
+ - Red square icon: device is running and can be stopped
+ - Magenta (or pink) square icon: an error occurred
+
+<h3>2: Frequency</h3>
+
+This is the center frequency in kHz that will be put in the file header.
+
+<h3>3: Output stream sample rate</h3>
+
+This is the output stream sample rate in kS/s after interpolation (5) from the baseband stream. Thus this is the sample rate (6) multiplied by the interpolation factor (5).
+
+<h3>4: Stream selection</h3>
+
+This combo selects to which stream the UI applies for stream specific controls.
+
+<h3>5: Interpolation factor</h3>
+
+The baseband streams are interpolated by this value before being sent to spectrum display. It can vary in powers of two from 1 (no interpolation) to 64.
+
+<h3>6: Baseband sample rate</h3>
+
+This is the baseband sample rate before interpolation in S/s.
+
+Use the wheels to adjust the sample rate. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mousewheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows. Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2.
+
+<h3>7: Spectrum display</h3>
+
+This is the final output stream spectrum display after interpolation (5). This would be sent to the hardware device. Controls on the bottom of the panel are identical to the ones of the main spectrum display. \ No newline at end of file