Commit graph

206 commits

Author SHA1 Message Date
Thomas Kolb e42602633e freq_est: implement L&R-based symbol-independent frequency estimation
The RX chain uses this to acquire an initial estimate of the carrier frequency. The estimate is adjusted on every incoming symbol until a preamble is found.
2023-05-14 15:53:14 +02:00
Thomas Kolb 3b7628882c utils: open output file in binary mode 2023-05-12 13:49:20 +02:00
Thomas Kolb d17b7b3309 RX: added some asserts 2023-05-12 13:48:18 +02:00
Thomas Kolb afb25a69d8 Use dynamic linking for liquid-dsp again 2023-05-12 13:47:05 +02:00
Thomas Kolb 7d5b67a257 Add layer 1 software loopback test 2023-05-12 13:46:02 +02:00
Thomas Kolb c8e0516e80 Implement time-based carrier sensing
In the following events, the modem cannot switch to transmit mode for the
given time:

- after a preamble has been received, for 500 ms
- after a packet has been successfully decoded, for 1 ms
- after receive mode was initially enabled, for 500 ms

Note that the times are that long to work around the RX/TX switching of
the hackrf and can be hopefully reduced to <10 milliseconds in a later
version.
2022-05-07 21:17:53 +02:00
Thomas Kolb 886a78018f RX: write correct sample rate to debug file 2022-05-07 20:13:01 +02:00
Thomas Kolb b2d6c713e1 Briefly start in TX mode to ensure correct RX frequency
Obviously SoapyHackRF does not set the correct RX frequency on startup.
This is a crude but effective workaround.
2022-05-07 20:12:03 +02:00
Thomas Kolb ec99cedaf4 rx: improvements made during on-air testing
- limit frequency adjustment range
- pre-filter the baseband signal to remove out-of-band interference
- reset the frequency acquisition periodically (every 30s) if no preamble is found
2022-04-10 21:58:32 +02:00
Thomas Kolb 2d0bf7eeda sdr: fixed enumeration output 2022-04-08 16:17:17 +02:00
Thomas Kolb 96f10f7fb6 sdr: add gain configuration 2022-04-08 16:17:00 +02:00
Thomas Kolb 715cda83a8 RX: process samples in larger chunks 2022-04-07 21:17:37 +02:00
Thomas Kolb 3e74093fc7 Retry transmitting zeros 2022-04-07 20:58:08 +02:00
Thomas Kolb 31475907d3 Switch to IPv6 2022-04-07 20:44:07 +02:00
Thomas Kolb bfe27d3ead Added script for setting up the tun device 2022-04-07 20:34:21 +02:00
Thomas Kolb 47fc177e87 Reorganize Soapy stream management; flush tx buffer 2022-04-03 18:11:52 +02:00
Thomas Kolb 152d2f02f6 Basic transmitter-only main loop 2022-03-05 21:38:05 +01:00
Thomas Kolb 3bc1d9625f sdr: various fixes; use Kaiser filter for resampling 2022-03-05 21:37:33 +01:00
Thomas Kolb 85663d5304 Added SDR abstraction layer 2022-03-03 22:19:03 +01:00
Thomas Kolb 88145d74ba rx: added function to determine whether rx is busy 2022-03-01 21:51:41 +01:00
Thomas Kolb 45156e64a0 Show packets as hexdump instead of text 2022-02-27 22:01:51 +01:00
Thomas Kolb 9817896914 rx: make receiver more robust 2022-02-27 21:25:33 +01:00
Thomas Kolb 934b18e382 Integrate TUN device interface
Packets are now read from the TUN device and transmitted. The signal
goes through a channel emulator and is then received + decoded. If
decoding is successful, the result is written back to the TUN device
(which does not make much sense, but works for testing).

Unfortunately, there still seems to be a problem in the receiver: packet
loss is very high even at extremely high SNRs.
2022-02-27 20:21:14 +01:00
Thomas Kolb 890baf577f Moved config.h to src/ top level 2022-02-27 18:41:16 +01:00
Thomas Kolb 8a8ddc5ea3 rx: integrate AGC 2022-02-27 16:59:14 +01:00
Thomas Kolb a60b8b1f87 Moved results.h to src/ top level 2022-02-27 16:02:51 +01:00
Thomas Kolb 1787d0d351 layer1: implement per-packet modulation/coding
This allows a higher layer to adjust data rate based on the current
channel conditions. For example, the SNR could be measured and if it
becomes too low for the current modulation/code, a lower-order
modulation or stronger code could be used.
2022-02-17 21:39:18 +01:00
Thomas Kolb 0ed7109335 Clean up debug output 2022-02-16 21:46:56 +01:00
Thomas Kolb 876bafd6f9 Moved receiver to separate module 2022-02-16 20:52:46 +01:00
Thomas Kolb a5634ed736 Move the transmission chain to a separate "tx" module 2022-02-13 21:29:35 +01:00
Thomas Kolb 97772fa12b Removed unused packet_demod 2022-02-13 20:06:14 +01:00
Thomas Kolb 513a399ae4 Refactoring: moved layer1-related stuff to subdirectory 2022-02-13 20:05:47 +01:00
Thomas Kolb a124c04021 plot_spectrum: ensure that the t and f array sizes match 2022-02-13 19:54:07 +01:00
Thomas Kolb 89f04b3ad0 plot_constellation: added guard lines 2022-02-13 19:53:17 +01:00
Thomas Kolb eb3fc5f9c7 Use data whitening 2022-02-12 22:06:49 +01:00
Thomas Kolb 87b844a2da Implement CRC check and phase tracking 2022-02-12 21:58:53 +01:00
Thomas Kolb 947615f5cd First complete RX chain
Decoding of the test message works down to ~10 dB SNR.

Still missing:
- Phase tracking during header and payload.
- CRC calculation and check.
- Data whitening.
2022-02-11 17:56:26 +01:00
Thomas Kolb 042c05f9f3 Decode the received header 2022-02-10 22:33:51 +01:00
Thomas Kolb f2c95a125d Use new frequency+phase estimation method for preamble 2022-02-06 18:04:31 +01:00
Thomas Kolb 8060137c1d Move frequency estimation to separate module 2022-02-05 20:33:56 +01:00
Thomas Kolb 465d9a1c26 main: restructure state management; evaluate a found preamble 2022-02-03 22:18:24 +01:00
Thomas Kolb 423f1d6416 correlator: added functions for phase and frequency estimation 2022-02-03 22:17:37 +01:00
Thomas Kolb c17c7e060f Integrate preamble search 2022-02-01 21:35:43 +01:00
Thomas Kolb b6713909f7 Make initial frequency sync much faster
The NCO frequency is now only adjusted every 8 symbols. That means that
the frequency error over the last 8 symbols before the adjustment is
(almost) constant, giving a good estimation result. Therefore, the
adjustment factor can be much larger than previously, leading to faster
acquisition time.
2022-01-30 20:23:41 +01:00
Thomas Kolb c1dd039d6b First shot at frequency synchronization
Supports only the BPSK part so far (ramp-up, preamble).
2022-01-30 20:05:20 +01:00
Thomas Kolb 09465591ed Added symsync to the receiver chain 2022-01-29 22:37:55 +01:00
Thomas Kolb f983635c14 Fixed output size of transmission_filter_packet() 2022-01-29 22:14:25 +01:00
Thomas Kolb d522a1d6bd Implemented pulse shaping
The pulse shaper currently uses an RRC filter with beta=0.2.
2022-01-29 22:05:17 +01:00
Thomas Kolb a6fed80149 Added script for plotting the spectrum of signal dumps 2022-01-29 22:03:51 +01:00
Thomas Kolb a1f62a3b0a packet_mod: implement FEC and modulation for the header 2022-01-23 16:28:53 +01:00