94 lines
3.2 KiB
Python
94 lines
3.2 KiB
Python
# https://github.com/analogdevicesinc/pyadi-iio/blob/master/examples/ad9361_example.py
|
|
# Copyright (C) 2022 Analog Devices, Inc.
|
|
#
|
|
# SPDX short identifier: ADIBSD
|
|
"""
|
|
Copyright 2019-2023(c) Analog Devices, Inc.
|
|
All rights reserved.
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions are met:
|
|
|
|
- Redistributions of source code must retain the above copyright notice,
|
|
this list of conditions and the following disclaimer.
|
|
- Redistributions in binary form must reproduce the above copyright notice,
|
|
this list of conditions and the following disclaimer in the documentation
|
|
and/or other materials provided with the distribution.
|
|
- Neither the name of Analog Devices, Inc. nor the names of its contributors
|
|
may be used to endorse or promote products derived from this software
|
|
without specific prior written permission.
|
|
- The use of this software may or may not infringe the patent rights of one
|
|
or more patent holders. This license does not release you from the
|
|
requirement that you obtain separate licenses from these patent holders to
|
|
use this software.
|
|
- Use of the software either in source or binary form or filter designs
|
|
resulting from the use of this software, must be connected to, run on or
|
|
loaded to an Analog Devices Inc. component.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED
|
|
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY
|
|
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
|
|
IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
"""
|
|
|
|
import time
|
|
|
|
import adi
|
|
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
from scipy import signal
|
|
|
|
# Create radio
|
|
sdr = adi.ad9361(uri="ip:192.168.1.10")
|
|
|
|
# Configure properties
|
|
sdr.rx_rf_bandwidth = 4000000
|
|
sdr.sample_rate = 6000000
|
|
sdr.rx_lo = 2450000000
|
|
sdr.tx_lo = 2450000000
|
|
sdr.tx_cyclic_buffer = True
|
|
sdr.tx_hardwaregain_chan0 = -30
|
|
sdr.gain_control_mode_chan0 = "slow_attack"
|
|
|
|
# Configuration data channels
|
|
sdr.rx_enabled_channels = [0]
|
|
sdr.tx_enabled_channels = [0]
|
|
|
|
# Read properties
|
|
print("RX LO %s" % (sdr.rx_lo))
|
|
|
|
# Create a sinewave waveform
|
|
fs = int(sdr.sample_rate)
|
|
N = 1024
|
|
fc = int(1000000 / (fs / N)) * (fs / N)
|
|
ts = 1 / float(fs)
|
|
t = np.arange(0, N * ts, ts)
|
|
i = np.cos(2 * np.pi * t * fc) * 2**14
|
|
q = np.sin(2 * np.pi * t * fc) * 2**14
|
|
iq = i + 1j * q
|
|
|
|
# Send data
|
|
# sdr.tx(iq)
|
|
|
|
# Collect data
|
|
for r in range(20):
|
|
x = sdr.rx()
|
|
f, Pxx_den = signal.periodogram(x, fs)
|
|
plt.clf()
|
|
plt.semilogy(f, Pxx_den)
|
|
plt.ylim([1e-7, 1e2])
|
|
plt.xlabel("frequency [Hz]")
|
|
plt.ylabel("PSD [V**2/Hz]")
|
|
plt.draw()
|
|
plt.pause(0.05)
|
|
time.sleep(0.1)
|
|
|
|
plt.show()
|