|
22 | 22 |
|
23 | 23 | from python_hackrf import pyhackrf |
24 | 24 | try: |
25 | | - from scipy.fft import fft |
| 25 | + from scipy.fft import fft, fftshift |
26 | 26 | except ImportError: |
27 | | - from numpy.fft import fft |
| 27 | + from numpy.fft import fft, fftshift |
28 | 28 | import numpy as np |
29 | 29 | import datetime |
30 | 30 | import signal |
|
40 | 40 | # hackrf sweep settings |
41 | 41 | AVAILABLE_SAMPLING_RATES = (2_000_000, 4_000_000, 6_000_000, 8_000_000, 10_000_000, 12_000_000, 14_000_000, 16_000_000, 18_000_000, 20_000_000) |
42 | 42 | BASEBAND_FILTER_BANDWIDTH_RATIO = 0.75 |
43 | | -OFFSET_RATIO = 0.375 |
| 43 | +INTERLEAVED_OFFSET_RATIO = 0.375 |
| 44 | +LINEAR_OFFSET_RATIO = 0.5 |
44 | 45 |
|
45 | 46 |
|
46 | 47 | SAMPLE_RATE = None |
@@ -141,12 +142,13 @@ def sweep_callback(buffer: np.ndarray, buffer_length: int, valid_length: int) -> |
141 | 142 | index += (pyhackrf.PY_BYTES_PER_BLOCK - data_length) |
142 | 143 |
|
143 | 144 | fftwOut = fft((buffer[index: index + data_length: 2].astype(np.int8, copy=False) / 128 + 1j * buffer[index + 1: index + data_length: 2].astype(np.int8, copy=False) / 128) * window) |
144 | | - |
145 | 145 | magsq = np.abs(fftwOut * norm_factor) ** 2 |
146 | 146 | pwr = np.log10(magsq) * 10.0 |
147 | 147 |
|
148 | | - index += data_length |
| 148 | + if SWEEP_STYLE == pyhackrf.py_sweep_style.LINEAR: |
| 149 | + pwr = fftshift(pwr) |
149 | 150 |
|
| 151 | + index += data_length |
150 | 152 | if binary_output_mode: |
151 | 153 | if SWEEP_STYLE == pyhackrf.py_sweep_style.INTERLEAVED: |
152 | 154 | record_length = 16 + (fftSize // 4) * 4 |
@@ -251,7 +253,11 @@ def pyhackrf_sweep(frequencies: list = [0, 6000], lna_gain: int = 16, vga_gain: |
251 | 253 | sweep_started = False |
252 | 254 |
|
253 | 255 | BASEBAND_FILTER_BANDWIDTH = int(SAMPLE_RATE * BASEBAND_FILTER_BANDWIDTH_RATIO) |
254 | | - OFFSET = int(SAMPLE_RATE * OFFSET_RATIO) |
| 256 | + if SWEEP_STYLE == pyhackrf.py_sweep_style.INTERLEAVED: |
| 257 | + OFFSET = int(SAMPLE_RATE * INTERLEAVED_OFFSET_RATIO) |
| 258 | + else: |
| 259 | + OFFSET = int(SAMPLE_RATE * LINEAR_OFFSET_RATIO) |
| 260 | + |
255 | 261 | TUNE_STEP = SAMPLE_RATE / 1e6 |
256 | 262 |
|
257 | 263 | init_signals() |
|
0 commit comments