This example implements the MUSIC algorithm to do direction finding using a single USRP-2945 or USRP-2955 reciever.
USRP-2945 or USRP-2955
Receive target signals over the air and the reference tone (for calibration).
NI USRP-2920 (or any USRP that can send a signal in the frequency range of operation. Current demo uses 462.625 MHz)
One device to generate the ref tone for phase synchronization and one device to generate the target tone.
4 way splitter
To distribute the ref tone signal.
Short matched length SMA cables
4 to connect antennas to the 2945 ports. 1 to connect the 4 way splitter to Tx ref signal port of the USRP-2920.
Receive the target signal over the air.
Handheld radio (walkie-talkie) capable of transmitting on 462.625 MHz (Ch 22).
Transmit the signal to the antenna array (this is the target that is being located).
Short LO sharing cables
Share LOs across channels. These ship with the USRP-2945 and USRP-2955
-LabVIEW 2016 or later
-USRP 16.1 driver or later
Steps to Implement or Execute Code
Powering on the Device and Opening Up the Application
Make sure the USRP 2945/2955 is powered on first
Power up your laptop/PC/PXI chassis
Open up USRP 2945 & 2955 AoA Direction Finding.lvproj
The front panel of the application
Running the Phase Calibration Routine
Connect a signal source (USRP-2920 or other) to the 4-way splitter, and then connect each output to channels 0-3 of the USRP-2945/2955. The signal source will provide a constant tone that can then be used to calibrate the phase offset between each channel.
Run “Calculate Phase Calibration Constants.vi”
Set the carrier frequency to the frequency you'd like to use. (For a walkie-talkie, use 462.652 MHz) and run the program (it will take a moment).
Write these constants down and close the VI.
Launch “USRP-2945-2955 AoA Detection RX Localization using MUSIC.vi” and enter the constants on the left-hand side.
Disconnect all of the SMA cables from the splitter and re-connect the antennas to channel 0-3 of the USRP-2945/2955.
Important: each antenna much be exactly 1/2 wavelength apart. At 462.652 MHz, that's approximately 0.648 meters
Important: before running the example, place a copy of all of the .m files in the LabVIEW Data directory. This is typically located at "C:\Users\<your username here>\Documents\LabVIEW Data"
Open up “USRP-2945-2955 AoA Detection RX Localization using MUSIC.vi”.
Ensure that the Device Name is set to that of your USRP 2945/2955. Typically, it's “RIO0” (That’s R-I-O-the number zero).
If the phase constants have not already been placed in the left-hand side from the calibration steps, fill those in.
Run the VI.
If you are using a walkie-talkie, follow the steps below. If you are using another signal, start transmission and bring the source close to your antenna array. The direction will not update until the program senses the signal source. Specifically, it is looking for a single-tone signal source that is at a 100kHz offset above the designated center frequency.
Power up the walkie-talkie and set to channel 22.
When the talk button on the walkie-talkie is depressed it will transmit the signal that the application is receiving and should respond to the direction you are holding it in relation to the antenna array.
Demonstrate the location-finding by passing the walkie-talkie back and forth (parallel to the array).
Filter coefficient calculation (FIR) sometimes results in error from Math-script node
Use the "FROMFILE" or "IIR"option for coefficients.
The angle of arrival changes suddenly (discontinuous) when moving the Tx antenna.
This is potentially due to the reflections taking place in the test location. Try testing in an open space.
The VI loads with a broken run arrow and mathscript errors
Make sure you copy the .m files to the LabVIEW Data folder
The "location" output does not have a data type associated with it
Add the path function above the "[temp location]=peak(Z,M,'number');" line and point to the location of the .m files. Then, right click on the location output and manually specify the data type as a 1D array of doubles. Once this is done and you've run the program once, you may be able to delete the path function.