1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
from gnuradio import gr, blks2, packet_utils
# Some constants
TX_AMPLITUDE = 0.25
SAMPLE_RATE = 1e5
# NOISE_VOLTAGE = 0.01
NOISE_VOLTAGE = 0.01
# FREQUENCY_OFFSET = 0
FREQUENCY_OFFSET = 0.01
TIMING_OFFSET = 1.0
SAMPLES_PER_SYMBOL = 2
GAIN = 1.0
SW_DECIM = 1
BAND_MIDPOINT = 1.0
BAND_WIDTH = 0.5
# Modulation/Demodulation methods
modulator = blks2.dbpsk2_mod()
demodulator = blks2.dbpsk2_demod()
#Transmission Blocks
packet_transmitter = blks2.mod_pkts(modulator, access_code=None, msgq_limit=4,
pad_for_usrp=True)
amp = gr.multiply_const_cc(TX_AMPLITUDE)
throttle = gr.throttle(gr.sizeof_gr_complex, SAMPLE_RATE)
# Channel
channel = gr.channel_model(NOISE_VOLTAGE, FREQUENCY_OFFSET, TIMING_OFFSET)
# Receiver Blocks
chan_coeffs = gr.firdes.low_pass(GAIN, SW_DECIM * SAMPLES_PER_SYMBOL,
BAND_MIDPOINT, BAND_WIDTH, gr.firdes.WIN_HANN)
channel_filter = gr.fft_filter_ccc(SW_DECIM, chan_coeffs)
packet_receiver = blks2.demod_pkts(demodulator, access_code=None, callback=None,
threshold=-1)
# Put it all together and start it up (although nothing will be done
# until we send some packets).
tb = gr.top_block()
tb.connect(packet_transmitter, amp, throttle, channel, channel_filter,
packet_receiver)
tb.start()
# The queue into which recieved packets are placed
pkq = packet_receiver._rcvd_pktq
# The function to create a packet and place it in a queue to be sent.
sender = packet_transmitter.send_pkt
# Some some packets (The second will not be recieved because it gets cut off
# before it can finish. I think this occurs during modulation.)
sender('hello there I wonder how long this needs to be before I start to see any errors.')
sender('world')
sender(eof=True)
# Wait for all the packets to get sent and received.
tb.wait()
# Check how many messages have been received and print them.
cnt = pkq.count()
print('There are %s messages' % cnt)
for a in range(0, cnt):
msg = pkq.delete_head()
ok, payload = packet_utils.unmake_packet(msg.to_string(), int(msg.arg1()))
print("Message %s is %s" % (a, payload))
|