Calculate sleep and RX buffer from decimation

This commit is contained in:
Jan Hamal Dvořák 2024-02-28 10:10:41 +01:00
parent b05ec20528
commit 4652802a54
2 changed files with 26 additions and 109 deletions

View file

@ -56,7 +56,7 @@ blocks:
id: variable
parameters:
comment: ''
value: 1_280_000 // 64
value: 1_280_000 // (1 << 6)
states:
bus_sink: false
bus_source: false
@ -77,23 +77,7 @@ blocks:
bus_sink: false
bus_source: false
bus_structure: null
coordinate: [512, 568.0]
rotation: 0
state: true
- name: blocks_complex_to_mag_squared_0
id: blocks_complex_to_mag_squared
parameters:
affinity: ''
alias: ''
comment: ''
maxoutbuf: '0'
minoutbuf: '0'
vlen: '1'
states:
bus_sink: false
bus_source: false
bus_structure: null
coordinate: [704, 440.0]
coordinate: [712, 496.0]
rotation: 0
state: true
- name: blocks_interleaved_char_to_complex_0
@ -127,24 +111,6 @@ blocks:
coordinate: [1000, 32.0]
rotation: 0
state: true
- name: blocks_nlog10_ff_0
id: blocks_nlog10_ff
parameters:
affinity: ''
alias: ''
comment: ''
k: '0'
maxoutbuf: '0'
minoutbuf: '0'
n: '10'
vlen: '1'
states:
bus_sink: false
bus_source: false
bus_structure: null
coordinate: [888, 432.0]
rotation: 0
state: true
- name: blocks_probe_rate_0
id: blocks_probe_rate
parameters:
@ -195,54 +161,6 @@ blocks:
coordinate: [440, 8.0]
rotation: 0
state: true
- name: low_pass_filter_1
id: low_pass_filter
parameters:
affinity: ''
alias: ''
beta: '6.76'
comment: ''
cutoff_freq: '1900'
decim: '1'
gain: '1'
interp: '1'
maxoutbuf: '0'
minoutbuf: '0'
samp_rate: samp_rate
type: fir_filter_fff
width: '100'
win: window.WIN_HAMMING
states:
bus_sink: false
bus_source: false
bus_structure: null
coordinate: [704, 516.0]
rotation: 0
state: true
- name: low_pass_filter_1_0
id: low_pass_filter
parameters:
affinity: ''
alias: ''
beta: '6.76'
comment: ''
cutoff_freq: '15'
decim: '1'
gain: '1'
interp: '1'
maxoutbuf: '0'
minoutbuf: '0'
samp_rate: samp_rate
type: fir_filter_fff
width: '15'
win: window.WIN_BLACKMAN
states:
bus_sink: false
bus_source: false
bus_structure: null
coordinate: [1000, 380.0]
rotation: 0
state: true
- name: network_tcp_source_0
id: network_tcp_source
parameters:
@ -546,10 +464,10 @@ blocks:
bus_sink: false
bus_source: false
bus_structure: null
coordinate: [1000, 544.0]
coordinate: [1000, 472.0]
rotation: 0
state: true
- name: qtgui_time_sink_x_0_0_0
- name: qtgui_time_sink_x_0_1
id: qtgui_time_sink_x
parameters:
affinity: ''
@ -581,9 +499,9 @@ blocks:
entags: 'False'
grid: 'True'
gui_hint: (2, 0, 1, 1)
label1: RSSI
label1: I
label10: Signal 10
label2: Signal 2
label2: Q
label3: Signal 3
label4: Signal 4
label5: Signal 5
@ -602,10 +520,10 @@ blocks:
marker7: '-1'
marker8: '-1'
marker9: '-1'
name: '"RSSI"'
name: '"IQ / Loop"'
nconnections: '1'
size: '1000'
srate: '1000'
size: int(samp_rate // 30)
srate: samp_rate
stemplot: 'False'
style1: '1'
style10: '1'
@ -623,7 +541,7 @@ blocks:
tr_mode: qtgui.TRIG_MODE_FREE
tr_slope: qtgui.TRIG_SLOPE_POS
tr_tag: '""'
type: float
type: complex
update_time: 1/30
width1: '1'
width10: '1'
@ -635,15 +553,15 @@ blocks:
width7: '1'
width8: '1'
width9: '1'
ylabel: dBm
ymax: '0'
ymin: '-60'
ylabel: Amplitude
ymax: '1'
ymin: '-1'
yunit: '""'
states:
bus_sink: false
bus_source: false
bus_structure: null
coordinate: [1184, 408.0]
coordinate: [1000, 360.0]
rotation: 0
state: true
- name: qtgui_waterfall_sink_x_0_0
@ -709,19 +627,15 @@ blocks:
state: true
connections:
- [analog_quadrature_demod_cf_0, '0', low_pass_filter_1, '0']
- [blocks_complex_to_mag_squared_0, '0', blocks_nlog10_ff_0, '0']
- [analog_quadrature_demod_cf_0, '0', qtgui_time_sink_x_0_0, '0']
- [blocks_interleaved_char_to_complex_0, '0', analog_quadrature_demod_cf_0, '0']
- [blocks_interleaved_char_to_complex_0, '0', blocks_complex_to_mag_squared_0, '0']
- [blocks_interleaved_char_to_complex_0, '0', blocks_probe_rate_0, '0']
- [blocks_interleaved_char_to_complex_0, '0', digital_costas_loop_cc_0, '0']
- [blocks_interleaved_char_to_complex_0, '0', qtgui_time_sink_x_0, '0']
- [blocks_interleaved_char_to_complex_0, '0', qtgui_waterfall_sink_x_0_0, '0']
- [blocks_nlog10_ff_0, '0', low_pass_filter_1_0, '0']
- [blocks_probe_rate_0, rate, blocks_message_debug_0, print]
- [digital_costas_loop_cc_0, '0', qtgui_const_sink_x_0, '0']
- [low_pass_filter_1, '0', qtgui_time_sink_x_0_0, '0']
- [low_pass_filter_1_0, '0', qtgui_time_sink_x_0_0_0, '0']
- [digital_costas_loop_cc_0, '0', qtgui_time_sink_x_0_1, '0']
- [network_tcp_source_0, '0', blocks_interleaved_char_to_complex_0, '0']
metadata:

View file

@ -39,10 +39,14 @@
#define CLK_SYS_HZ (250 * MHZ)
#define BANDWIDTH 1280000
#define DECIMATION 64
#define DECIMATION_BITS 6
#define IQ_BLOCK_LEN 64
#define RX_SLEEP_US (DECIMATION * BANDWIDTH / (1 * MHZ) / 4)
#define DECIMATION (1 << DECIMATION_BITS)
static_assert(RX_SLEEP_US > 0, "RX_SLEEP_US must be positive");
#define XOR_ADDR 0x1000
#define LO_COS_ACCUMULATOR (&pio1->sm[2].pinctrl)
#define LO_SIN_ACCUMULATOR (&pio1->sm[3].pinctrl)
@ -52,7 +56,7 @@
static uint32_t lo_cos[LO_WORDS] __attribute__((__aligned__(LO_WORDS * 4)));
static uint32_t lo_sin[LO_WORDS] __attribute__((__aligned__(LO_WORDS * 4)));
#define RX_BITS_DEPTH 8
#define RX_BITS_DEPTH (DECIMATION_BITS + 2)
#define RX_WORDS (1 << RX_BITS_DEPTH)
static uint32_t rx_cos[RX_WORDS] __attribute__((__aligned__(RX_WORDS * 4)));
static uint32_t rx_sin[RX_WORDS] __attribute__((__aligned__(RX_WORDS * 4)));
@ -60,8 +64,6 @@ static uint32_t rx_sin[RX_WORDS] __attribute__((__aligned__(RX_WORDS * 4)));
#define SIN_PHASE (UINT_MAX / 4)
#define COS_PHASE (0)
static_assert(RX_WORDS > 2 * DECIMATION, "RX buffers too short for given decimation");
/* rx -> cp -> cos -> sin -> pio_cos -> pio_sin -> rx ... */
static int dma_ch_rx = -1;
static int dma_ch_cp = -1;
@ -590,7 +592,7 @@ static void rf_rx(void)
while (delta < 2 * DECIMATION) {
delta = prev_transfers - dma_hw->ch[dma_ch_in_cos].transfer_count;
sleep_us(10);
sleep_us(RX_SLEEP_US);
}
prev_transfers -= 2 * DECIMATION;
@ -788,7 +790,8 @@ static void do_rx(int rx_pin, int bias_pin, float freq, char mode)
for (int i = 0; i < IQ_BLOCK_LEN / 2; i += 8) {
int I = block[i * 2];
int Q = block[i * 2 + 1];
printf("%+4i | %+5.1f dBm | %+4i %+4i | ", gap, rssi, I, Q);
printf("%+4i | %+5.1f dBm | %+4i %+4i | ",
RX_WORDS / 2 + gap, rssi, I, Q);
plot_IQ(I, Q);
putchar('\n');
}