AdalmPluto SDR tx rtl sdr rx

Gast #5772050
Lesenswert?

Hallo,
ich versuche schon die ganzen Tage vergeblich QPSK Signale mit dem Adalm 
Pluto an den RTL SDR USB Stick zu senden. Ich benutze die Sinc Funktion 
als TransmitFilter und bekomme auf der RTL-SDR Receive Seite nur 
Rauschen.
Im Anhang habe ich mal die Plots für den RealTeil des Signals und den 
Imaginärteil hinterlassen.



Das hier ist der Code dazu:

1
from commpy import modulation, filters
2
from scipy import signal
3
import numpy as np
4
import matplotlib.pyplot as plt
5
from pylab import *
6
from bindings.python import iio
7
from rtlsdr import RtlSdr
8

9
sdr = RtlSdr()
10

11
sdr.sample_rate = 3.0e6
12
sdr.center_freq = 1.2e9
13
sdr.gain = 4
14

15

16

17

18

19

20
# User configurable
21
TXLO = 1200000000
22
TXBW = 5000000
23
TXFS = 3000000
24
RXLO = TXLO
25
RXBW = TXBW
26
RXFS = TXFS
27

28
ctx = iio.scan_contexts();
29
print(ctx)
30

31
list = []
32

33
for i,j in ctx.items():
34
    list.append(i)
35

36
ctx = iio.Context(_context=list[0])
37

38

39
ctrl = ctx.find_device("ad9361-phy")
40
txdac = ctx.find_device("cf-ad9361-dds-core-lpc")
41
rxadc = ctx.find_device("cf-ad9361-lpc")
42

43
# Configure transceiver settings
44
ctrl.channels[0].attrs["frequency"].value = str(int(RXLO))
45
ctrl.channels[1].attrs["frequency"].value = str(int(TXLO))
46
ctrl.channels[4].attrs["rf_bandwidth"].value = str(int(RXBW))
47
ctrl.channels[5].attrs["rf_bandwidth"].value = str(int(TXBW))
48
ctrl.channels[4].attrs["sampling_frequency"].value = str(int(RXFS))
49
ctrl.channels[5].attrs["sampling_frequency"].value = str(int(TXFS))
50
ctrl.channels[5].attrs['gain_control_mode'].value = 'slow_attack'
51
#ctrl.channels[5].attrs['hardwaregain'].value = '20'
52

53
# Enable all IQ channels
54
rxadc.channels[0].enabled = True
55
rxadc.channels[1].enabled = True
56
txdac.channels[4].enabled = True
57
txdac.channels[5].enabled = True
58

59

60
# Force DAC to use DMA not DDSs
61
txdac.channels[0].attrs['raw'].value = str(0)
62
txdac.channels[1].attrs['raw'].value = str(0)
63
txdac.channels[2].attrs['raw'].value = str(0)
64
txdac.channels[3].attrs['raw'].value = str(0)
65

66

67
# Create cyclic buffer for TX data
68
N = 2**15
69
txbuf = iio.Buffer(txdac, N, False)
70

71

72

73

74

75
# QPSK Modulation
76

77
psk = modulation.PSKModem(4)
78

79
input_bits = [1, 1, 0, 0, 1, 0, 0, 1, 1, 1,]
80

81
psk_val = psk.modulate(input_bits=input_bits)
82

83

84
x = np.linspace(-4,4,2000)
85

86
#Filtering the modulated input bits with the sinc function
87

88
conv_re = []
89
conv_im = []
90
for sym in psk_val:
91

92
    conv_re.append(np.convolve(np.sinc(x),real(sym)))
93
    conv_im.append(np.convolve(np.sinc(x),imag(sym)))
94

95
conv_re = 1000000*np.reshape(conv_re,(1,size(conv_re)))
96
conv_im = 1000000*np.reshape(conv_im,(1,size(conv_im)))
97
print(psk_val)
98

99

100

101
"""plt.figure(5)
102
plt.plot(conv_im[0])
103
plt.figure(6)
104
plt.plot(conv_re[0])"""
105

106

107
iq = np.empty((conv_re.size + conv_im.size,), dtype=conv_im.dtype)
108
iq[0::2] = conv_re
109
iq[1::2] = conv_im
110

111
iq = np.int16(iq)
112

113
# Send data to buffer
114
txbuf.write(iq)
115
txbuf.push()
116

117
samples = sdr.read_samples()
118

119

120
plt.figure(13)
121
plt.plot(real(samples))
122

123
plt.figure(19)
124
plt.plot(imag(samples))
125

126
plt.show()
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren