From f57c5b006c0f8675eaf7f9d91f223a3e96721abb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Hamal=20Dvo=C5=99=C3=A1k?= Date: Mon, 3 Jun 2024 21:48:36 +0200 Subject: [PATCH] Simplify bias --- grc/PicoSDR-WBFM.grc | 48 +++++++++++++++++++++++++++++++++++--------- src/main.c | 37 ++++++---------------------------- 2 files changed, 44 insertions(+), 41 deletions(-) diff --git a/grc/PicoSDR-WBFM.grc b/grc/PicoSDR-WBFM.grc index c46ec39..e02de4a 100644 --- a/grc/PicoSDR-WBFM.grc +++ b/grc/PicoSDR-WBFM.grc @@ -40,6 +40,7 @@ blocks: const_points: '[-1-1j, -1+1j, 1+1j, 1-1j]' dims: '1' normalization: digital.constellation.AMPLITUDE_NORMALIZATION + npwr: '1.0' precision: '8' rot_sym: '4' soft_dec_lut: None @@ -77,7 +78,7 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [704, 296.0] + coordinate: [704, 312.0] rotation: 0 state: true - name: analog_wfm_rcv_pll_0 @@ -140,11 +141,12 @@ blocks: alias: '' comment: '' en_uvec: 'True' + log_level: info states: bus_sink: false bus_source: false bus_structure: null - coordinate: [1000, 32.0] + coordinate: [992, 8.0] rotation: 0 state: true - name: blocks_probe_rate_0 @@ -157,6 +159,7 @@ blocks: maxoutbuf: '0' minoutbuf: '0' mintime: '2500' + name: '' type: complex vlen: '1' states: @@ -179,6 +182,30 @@ blocks: coordinate: [440, 8.0] rotation: 0 state: true +- name: low_pass_filter_0 + id: low_pass_filter + parameters: + affinity: '' + alias: '' + beta: '6.76' + comment: '' + cutoff_freq: samp_rate / 8 + decim: '4' + gain: '1' + interp: '1' + maxoutbuf: '0' + minoutbuf: '0' + samp_rate: samp_rate + type: fir_filter_fff + width: samp_rate / 8 + win: window.WIN_HAMMING + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [992, 284.0] + rotation: 0 + state: enabled - name: network_tcp_source_0 id: network_tcp_source parameters: @@ -293,7 +320,7 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [704, 192.0] + coordinate: [704, 208.0] rotation: 0 state: true - name: qtgui_time_sink_x_0_0 @@ -351,8 +378,8 @@ blocks: marker9: '-1' name: '"FM Demodulation"' nconnections: '1' - size: int(samp_rate // 30) - srate: samp_rate + size: '512' + srate: samp_rate // (2 ** 3) stemplot: 'False' style1: '1' style10: '1' @@ -390,7 +417,7 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [992, 272.0] + coordinate: [1192, 312.0] rotation: 0 state: true - name: qtgui_waterfall_sink_x_0_0 @@ -451,7 +478,7 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [704, 88.0] + coordinate: [704, 104.0] rotation: 0 state: true - name: qtgui_waterfall_sink_x_0_0_0 @@ -573,12 +600,12 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [992, 168.0] + coordinate: [992, 184.0] rotation: 0 state: true connections: -- [analog_quadrature_demod_cf_0, '0', qtgui_time_sink_x_0_0, '0'] +- [analog_quadrature_demod_cf_0, '0', low_pass_filter_0, '0'] - [analog_quadrature_demod_cf_0, '0', qtgui_waterfall_sink_x_0_0_0_0, '0'] - [analog_wfm_rcv_pll_0, '0', audio_sink_0, '0'] - [analog_wfm_rcv_pll_0, '0', qtgui_waterfall_sink_x_0_0_0, '0'] @@ -590,8 +617,9 @@ connections: - [blocks_interleaved_short_to_complex_0, '0', qtgui_time_sink_x_0, '0'] - [blocks_interleaved_short_to_complex_0, '0', qtgui_waterfall_sink_x_0_0, '0'] - [blocks_probe_rate_0, rate, blocks_message_debug_0, print] +- [low_pass_filter_0, '0', qtgui_time_sink_x_0_0, '0'] - [network_tcp_source_0, '0', blocks_interleaved_short_to_complex_0, '0'] metadata: file_format: 1 - grc_version: 3.10.6.0 + grc_version: 3.10.9.2 diff --git a/src/main.c b/src/main.c index 0d5e6d5..0483638 100644 --- a/src/main.c +++ b/src/main.c @@ -45,7 +45,6 @@ #define DECIMATION_BITS 3 #define LPF_ORDER 4 #define AGC_DECAY_BITS 20 -#define BIAS_STRENGTH 0 #define LO_DITHER 0 #endif @@ -57,7 +56,6 @@ #define DECIMATION_BITS 6 #define LPF_ORDER 4 #define AGC_DECAY_BITS 16 -#define BIAS_STRENGTH 3 #define LO_DITHER 1 #endif @@ -67,7 +65,6 @@ static_assert(RX_SLEEP_US > 0, "RX_SLEEP_US must be positive"); static_assert(LPF_ORDER <= 4, "LPF_ORDER must be 0-4"); -static_assert(BIAS_STRENGTH >= 0 && BIAS_STRENGTH <= 9, "BIAS_STRENGTH must be 0-9"); #define XOR_ADDR 0x1000 #define LO_COS_ACCUMULATOR (&pio1->sm[2].pinctrl) @@ -129,33 +126,12 @@ static void bias_init(int in_pin, int out_pin) const uint16_t insn[] = { pio_encode_mov_not(pio_pins, pio_pins) | pio_encode_sideset(1, 1), + pio_encode_set(pio_x, 4) | pio_encode_sideset(1, 0) | pio_encode_delay(15), + pio_encode_jmp_x_dec(2) | pio_encode_sideset(1, 0) | pio_encode_delay(15), + pio_encode_mov_not(pio_pins, pio_pins) | pio_encode_sideset(1, 1), - - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(0), /* 1 */ - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(0), /* 2 */ - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(1), /* 4 */ - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(3), /* 8 */ - - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(7), /* 16 */ - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(15), /* 32 */ - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(15), /* 48 */ - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(15), /* 64 */ - - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(15), - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(15), - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(15), - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(15), - - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(15), - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(15), - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(15), - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(15), - - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(15), - pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(15), - - pio_encode_set(pio_x, 7) | pio_encode_sideset(1, 0) | pio_encode_delay(15), - pio_encode_jmp_x_dec(21) | pio_encode_sideset(1, 0) | pio_encode_delay(15), + pio_encode_set(pio_x, 4) | pio_encode_sideset(1, 0) | pio_encode_delay(15), + pio_encode_jmp_x_dec(5) | pio_encode_sideset(1, 0) | pio_encode_delay(15), }; pio_program_t prog = { @@ -178,8 +154,7 @@ static void bias_init(int in_pin, int out_pin) sm_config_set_out_pins(&pc, out_pin, 1); sm_config_set_set_pins(&pc, out_pin, 1); - int nops[10] = { 20, 12, 8, 6, 5, 4, 3, 2, 1, 0 }; - sm_config_set_wrap(&pc, prog.origin, prog.origin + 1 + nops[BIAS_STRENGTH]); + sm_config_set_wrap(&pc, prog.origin, prog.origin + prog.length - 1); sm_config_set_clkdiv_int_frac(&pc, 1, 0); pio_sm_init(pio1, 0, prog.origin, &pc);