Skip to content

Commit

Permalink
Using TX_mxfe_en to control the transmit window.
Browse files Browse the repository at this point in the history
Signed-off-by: PopPaul2021 <[email protected]>
  • Loading branch information
PopPaul2021 committed Sep 18, 2024
1 parent 22b9b5b commit f8e7eec
Showing 1 changed file with 59 additions and 44 deletions.
103 changes: 59 additions & 44 deletions examples/ad9081_stingray.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import math
import matplotlib.pyplot as plt
import numpy as np
from enum import Enum

url = "local:" if len(sys.argv) == 1 else sys.argv[1]
ssh = adi.sshfs(address=url, username="root", password="analog")
Expand All @@ -29,98 +30,112 @@
conv.rx_main_nco_frequencies = [100000000] * 4
conv.tx_main_nco_frequencies = [100000000] * 4

conv.rx_enabled_channels = [0,1,2]
conv.tx_enabled_channels = [0,1,2]
conv.rx_enabled_channels = [0]
conv.tx_enabled_channels = [0]
conv.rx_nyquist_zone = ["odd"] * 4

conv.tx_cyclic_buffer = True
conv.rx_cyclic_buffer = False
conv.tx_ddr_offload = False
conv.rx_ddr_offload = False

print("0x001B:", conv.ad9081_register_read(0x001B))
conv.ad9081_register_write(0x001B,0xf)
print("0x001B:", conv.ad9081_register_read(0x001B))
#
print("0x0321:", conv.ad9081_register_read(0x0321))
conv.ad9081_register_write(0x0321,0x00)
print("0x0321:", conv.ad9081_register_read(0x0321))

stdout, stderr = ssh._run(f"busybox devmem 0x{tx_offload_base_addr + control_reg_offload:02x} 32 0x2")
stdout, stderr = ssh._run(f"busybox devmem 0x{rx_offload_base_addr + control_reg_offload:02x} 32 0x2")

frame_length_ms = 1
pulse_width_high = 0.1
samples_per_frame_desired = (pulse_width_high * conv.tx_sample_rate) / 1000
N_tx = int(samples_per_frame_desired)
N_rx = 3 * N_tx
generated_signal_time = 0.3
tx_time = 0.2
rx_time = 0.3

N_tx = int((generated_signal_time * conv.tx_sample_rate) / 1000)
N_rx = int((rx_time * conv.tx_sample_rate) / 1000)

conv.rx_buffer_size = N_rx

tddn.startup_delay_ms = 0
tddn.frame_length_ms = frame_length_ms
tddn.burst_count = 0

# TDD ENABLE
TX_OFFLOAD_SYNC = 0
RX_OFFLOAD_SYNC = 1
TDD_ENABLE = 2
RX_MXFE_EN = 3
TX_MXFE_EN = 4
TX_STINGRAY_EN = 5

tddn.channel[2].on_ms = 0
tddn.channel[2].off_ms = 0
tddn.channel[2].polarity = 1
tddn.channel[2].enable = 1

# TX OFFFLOAD SYNC
tddn.channel[0].on_ms = 0
tddn.channel[0].off_raw = 1
tddn.channel[0].polarity = 0
tddn.channel[0].enable = 1
for chan in [TDD_ENABLE,RX_MXFE_EN,TX_STINGRAY_EN]:
tddn.channel[chan].on_ms = 0
tddn.channel[chan].off_ms = 0
tddn.channel[chan].polarity = 1
tddn.channel[chan].enable = 1

# RX OFFFLOAD SYNC
tddn.channel[1].on_ms = 0
tddn.channel[1].off_raw = 1
tddn.channel[1].polarity = 0
tddn.channel[1].enable = 1
for chan in [RX_OFFLOAD_SYNC, TX_OFFLOAD_SYNC]:
tddn.channel[chan].on_raw = 0
tddn.channel[chan].off_raw = 1
tddn.channel[chan].polarity = 0
tddn.channel[chan].enable = 1

for chan in [TX_MXFE_EN]:
tddn.channel[chan].on_ms = 0
tddn.channel[chan].off_ms = tx_time
tddn.channel[chan].polarity = 0
tddn.channel[chan].enable = 1

for chan in [3,4,5] :
tddn.channel[chan].on_ms = 0
tddn.channel[chan].off_ms = 0
tddn.channel[chan].polarity = 1
tddn.channel[chan].enable = 1

tddn.enable = 1

print(f"TX Sampling_rate: {conv.tx_sample_rate}")
print(f"RX Sampling_rate: {conv.rx_sample_rate}")

print(f"TX buffer length: {N_tx}")
print(f"RX buffer length: {N_rx}")
print(f"TX_transmit time[ms]: {(samples_per_frame_desired / conv.tx_sample_rate) * 1000}")
print(f"RX_recieve time[ms]: {((1/conv.rx_sample_rate) * N_rx)*1000}")
print(f"TDD_frame time[ms]: {frame_length_ms}")

print(f"Generated signal time[ms]: {generated_signal_time}")
print(f"TX_transmit time[ms]: {tx_time}")

print(f"RX_recieve time[ms]: {((1/conv.rx_sample_rate) * N_rx)*1000}")

print(f"TDD_frame time[ms]: {tddn.frame_length_ms}")

fs = int(conv.tx_sample_rate)
A = 0.9 * 2**15 # -6 dBFS
B = 1e4
T = N_tx / fs
t = np.linspace(0, T, N_tx, endpoint=False)
tx_sig = A * np.sin(2 * math.pi * B * t)
conv.tx([tx_sig,tx_sig,tx_sig])
conv.tx(tx_sig)

tddn.sync_soft = 0
tddn.sync_soft = 1

capture_range = 100

capture_range = 500
enabled_channels = 3

rx_sig = np.zeros((capture_range,enabled_channels,N_rx))
rx_t = np.linspace(0,N_rx, N_rx , endpoint=False)
rx_sig = np.zeros((capture_range,N_rx))
rx_t = np.linspace(0,N_rx, N_rx , endpoint=False)

fig, (ch1, ch2) = plt.subplots(1, 2)
fig, (ch1, ch2) = plt.subplots(2, 1)

for r in range(capture_range):
rx_sig[r] = conv.rx()

for r in range(capture_range):
plt.suptitle(f"Capture number: {r}")
ch1.plot(rx_t, rx_sig[r][0])
ch1.plot(rx_t, rx_sig[r])
ch1.set_title("Channel 1 data")
ch2.plot(rx_t, rx_sig[r][1])
ch2.set_title("Channel 2 data")
ch2.plot(rx_t, np.append(tx_sig,np.zeros(len(rx_t)-len(tx_sig))))
ch2.set_title("Generated signal")
plt.show()

tddn.enable = 0
for chan in [1,2,3,4,5] :

for chan in [TX_OFFLOAD_SYNC, RX_OFFLOAD_SYNC, TDD_ENABLE, RX_MXFE_EN, TX_MXFE_EN, TX_STINGRAY_EN]:
tddn.channel[chan].on_ms = 0
tddn.channel[chan].off_ms = 0
tddn.channel[chan].polarity = 0
Expand Down

0 comments on commit f8e7eec

Please sign in to comment.