decimation working
This commit is contained in:
26
python/filter_design.py
Normal file
26
python/filter_design.py
Normal file
@@ -0,0 +1,26 @@
|
||||
import numpy as np
|
||||
import scipy
|
||||
from matplotlib import pyplot as plt
|
||||
|
||||
def main():
|
||||
# Design some filter coefficients
|
||||
n_taps = 33
|
||||
cutoff = 1 / 2
|
||||
filt_coeffs = scipy.signal.firwin(n_taps, cutoff)
|
||||
nfft = 1024
|
||||
filt_resp = np.fft.fft(filt_coeffs, nfft)
|
||||
filt_resp = np.fft.fftshift(filt_resp)
|
||||
|
||||
freq_axis = (np.arange(nfft) - (nfft/2)) / nfft
|
||||
|
||||
plt.figure()
|
||||
plt.plot(freq_axis, 20*np.log10(np.abs(filt_resp)))
|
||||
plt.ylabel('dB')
|
||||
plt.xlabel('Normalized Frequency')
|
||||
plt.title('Filter Response')
|
||||
plt.grid()
|
||||
plt.show()
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
main()
|
||||
@@ -329,7 +329,7 @@ class RadarManager:
|
||||
self.axi_write_register(TIMING_ENGINE_ADDR + 0x8, num_pulses)
|
||||
self.axi_write_register(TIMING_ENGINE_ADDR + 0x10, inter_cpi - 1)
|
||||
|
||||
def setup_rx(self, num_samples, start_sample):
|
||||
def setup_rx(self, num_samples, start_sample, dec_rate):
|
||||
for i in range(NUM_RX):
|
||||
if JESD204B:
|
||||
self.axi_write_register(DIG_RX_ADDR + i*DIG_RX_STRIDE + 0x4, num_samples >> 1)
|
||||
@@ -338,6 +338,10 @@ class RadarManager:
|
||||
self.axi_write_register(DIG_RX_ADDR + i*DIG_RX_STRIDE + 0x4, num_samples >> 2)
|
||||
self.axi_write_register(DIG_RX_ADDR + i*DIG_RX_STRIDE + 0x8, start_sample >> 2)
|
||||
|
||||
# Decimation Selection
|
||||
dec_sel = int(np.log2(dec_rate))
|
||||
self.axi_write_register(DIG_RX_ADDR + i * DIG_RX_STRIDE + 0xC, dec_sel)
|
||||
|
||||
# Setup RX Strobe
|
||||
# self.axi_write_register(TIMING_ENGINE_ADDR + 0x88 + i * 8, start_sample >> 2)
|
||||
# self.axi_write_register(TIMING_ENGINE_ADDR + 0x8C + i * 8, num_samples >> 2)
|
||||
@@ -384,9 +388,9 @@ class RadarManager:
|
||||
|
||||
|
||||
def configure_cpi(self, pri, inter_cpi, num_pulses, num_samples, start_sample,
|
||||
tx_num_samples, tx_start_sample, rx_lo_offset, tx_lo_offset):
|
||||
self.load_waveform(0, 1, 0.1, tx_num_samples)
|
||||
self.load_waveform(1, 1, 0.1, tx_num_samples)
|
||||
tx_num_samples, tx_start_sample, rx_lo_offset, tx_lo_offset, dec_rate):
|
||||
self.load_waveform(0, 1, 0.05, tx_num_samples)
|
||||
self.load_waveform(1, 1, 0.05, tx_num_samples)
|
||||
|
||||
num_samples_quant = int(self.packet_size / 4)
|
||||
if num_samples % num_samples_quant > 0:
|
||||
@@ -400,7 +404,7 @@ class RadarManager:
|
||||
self.setup_rf_attenuators(rf_atten)
|
||||
|
||||
adc_nco = 1e9 % f_adc
|
||||
dac_nco = 1.001e9 % f_dac
|
||||
dac_nco = 1e9 % f_dac
|
||||
|
||||
# adc_nco = 2e9
|
||||
# adc_nyquist_zone = np.floor(adc_nco / (f_adc / 2))
|
||||
@@ -416,7 +420,7 @@ class RadarManager:
|
||||
self.set_dac_nco(i, dac_nco)
|
||||
|
||||
self.setup_timing_engine(pri, num_pulses, inter_cpi)
|
||||
self.setup_rx(num_samples, start_sample)
|
||||
self.setup_rx(num_samples, start_sample, dec_rate)
|
||||
self.setup_tx(tx_num_samples, tx_start_sample)
|
||||
self.setup_cpi_header(pri, inter_cpi, num_pulses, num_samples, start_sample,
|
||||
tx_num_samples, tx_start_sample, rx_lo_offset, tx_lo_offset)
|
||||
@@ -25,7 +25,7 @@ def main():
|
||||
headers = []
|
||||
offset = 0
|
||||
|
||||
file = 'test1.bin'
|
||||
file = 'test0.bin'
|
||||
fid = open(file, 'rb')
|
||||
|
||||
# Find header, recording buffer could have wrapped depending on data rate and how long we ran for
|
||||
@@ -86,21 +86,21 @@ def main():
|
||||
vmin = -60
|
||||
vmax = 0
|
||||
|
||||
plt.figure()
|
||||
plt.plot(np.diff(cpi_times))
|
||||
plt.plot(np.diff(pps_frac))
|
||||
# plt.ylim([0, .04])
|
||||
# plt.figure()
|
||||
# plt.plot(np.diff(cpi_times))
|
||||
# plt.plot(np.diff(pps_frac))
|
||||
# # plt.ylim([0, .04])
|
||||
|
||||
# plt.figure()
|
||||
# plt.plot(iq.T.real, '.-')
|
||||
# plt.plot(iq.T.imag, '--.')
|
||||
# plt.grid()
|
||||
#
|
||||
# plt.figure()
|
||||
# plt.imshow(db20n(iq), aspect='auto', interpolation='nearest', vmin=vmin, vmax=vmax)
|
||||
# plt.ylabel('Pulse Count')
|
||||
# plt.xlabel('Sample Count')
|
||||
# plt.colorbar()
|
||||
plt.figure()
|
||||
plt.plot(iq.T.real, '.-')
|
||||
plt.plot(iq.T.imag, '--.')
|
||||
plt.grid()
|
||||
|
||||
plt.figure()
|
||||
plt.imshow(db20n(iq), aspect='auto', interpolation='nearest', vmin=vmin, vmax=vmax)
|
||||
plt.ylabel('Pulse Count')
|
||||
plt.xlabel('Sample Count')
|
||||
plt.colorbar()
|
||||
|
||||
|
||||
plt.show()
|
||||
|
||||
@@ -45,9 +45,9 @@ def main():
|
||||
# CPI Parameters (timing values are in clk ticks)
|
||||
num_pulses = 128
|
||||
# Should be multiple of udp packet size, currently 4096 bytes, or 1024 samples
|
||||
num_samples = 16384
|
||||
num_samples = 4096
|
||||
start_sample = 2000
|
||||
tx_num_samples = 1024
|
||||
tx_num_samples = 4096
|
||||
tx_start_sample = start_sample
|
||||
prf = 8000
|
||||
pri = int(1/prf * clk)
|
||||
@@ -57,11 +57,13 @@ def main():
|
||||
inter_cpi = 20000
|
||||
tx_lo_offset = 10e6
|
||||
rx_lo_offset = 0
|
||||
test_duration = 60
|
||||
dec_rate = 16
|
||||
test_duration = 2
|
||||
|
||||
pri_float = pri / clk
|
||||
|
||||
print('PRI', pri_float, 'PRF', 1 / pri_float)
|
||||
print('Sampling Duration (usec)', (tx_num_samples / radar_manager.BASEBAND_SAMPLE_RATE * dec_rate)/1e-6)
|
||||
print('Expected Data Rate', num_samples * 4 / pri_float / 1e6)
|
||||
|
||||
|
||||
@@ -72,7 +74,8 @@ def main():
|
||||
recorder1.start_recording('test1.bin', True)
|
||||
|
||||
radar.configure_cpi(pri, inter_cpi, num_pulses, num_samples, start_sample,
|
||||
tx_num_samples, tx_start_sample, rx_lo_offset, tx_lo_offset)
|
||||
tx_num_samples, tx_start_sample, rx_lo_offset, tx_lo_offset,
|
||||
dec_rate)
|
||||
|
||||
print('Start Running')
|
||||
radar.start_running()
|
||||
|
||||
Reference in New Issue
Block a user