| 36 | | blah blah and ? |
| 37 | | |
| | 36 | * The OEDL script for this experiment is shown below. |
| | 37 | {{{ |
| | 38 | defProperty('rate', '.250M', "Bitrate") |
| | 39 | defProperty('modulation','bpsk',"Modulation") |
| | 40 | defProperty('freq', '2410000000', "Center frequency") |
| | 41 | defProperty('runtime', 10, "Run time (s)") |
| | 42 | |
| | 43 | |
| | 44 | defApplication('test:app:benchmark_rx', 'benchmark_rx.py') { |a| |
| | 45 | a.version(2, 0, 4) |
| | 46 | a.shortDescription = "" |
| | 47 | a.description = "" |
| | 48 | a.path = "export LC_ALL=C;/root/gnuradio/gr-digital/examples/narrowband/benchmark_rx.py" |
| | 49 | a.defProperty('args', "Argument list", nil, |
| | 50 | {:dynamic => false, :type => :string}) |
| | 51 | a.defProperty('freq', "center frequency in Hz", '-f', |
| | 52 | {:dynamic => false, :type => :string}) |
| | 53 | a.defProperty('rx-gain', "receive gain in dB", '--rx-gain', |
| | 54 | {:dynamic => false, :type => :string}) |
| | 55 | a.defProperty('bitrate', "specify bitrate", '-r', |
| | 56 | {:dynamic => false, :type => :string}) |
| | 57 | a.defProperty('modulation', "modulation: psk, cpm, qpsk, dqpsk, gfsk,qam, dbpsk, bpsk, gmsk [default=psk]", '-m', |
| | 58 | {:dynamic => false, :type => :string}) |
| | 59 | a.defProperty('constellation-points', "set constellation - power of two for psk, power of 4 for QAM [default=16]", '-p', |
| | 60 | {:dynamic => false, :type => :string}) |
| | 61 | } |
| | 62 | |
| | 63 | defApplication('test:app:benchmark_tx', 'benchmark_tx.py') { |a| |
| | 64 | a.version(2, 0, 4) |
| | 65 | a.shortDescription = "" |
| | 66 | a.description = "" |
| | 67 | a.path = "export LC_ALL=C;/root/gnuradio/gr-digital/examples/narrowband/benchmark_tx.py" |
| | 68 | a.defProperty('args', "Argument list", nil, |
| | 69 | {:dynamic => false, :type => :string}) |
| | 70 | a.defProperty('freq', "center frequency in Hz", '-f', |
| | 71 | {:dynamic => false, :type => :string}) |
| | 72 | a.defProperty('tx-gain', "transmit gain in dB", '--tx-gain', |
| | 73 | {:dynamic => false, :type => :string}) |
| | 74 | a.defProperty('tx-amplitude', "transmitter digital amplitude [0,1) [default=0.25", '--tx-amplitude', |
| | 75 | {:dynamic => false, :type => :string}) |
| | 76 | a.defProperty('bitrate', "specify bitrate", '-r', |
| | 77 | {:dynamic => false, :type => :string}) |
| | 78 | a.defProperty('modulation', "modulation: psk, cpm, qpsk, dqpsk, gfsk,qam, dbpsk, bpsk, gmsk [default=psk]", '-m', |
| | 79 | {:dynamic => false, :type => :string}) |
| | 80 | a.defProperty('constellation-points', "set constellation - power of two for psk, power of 4 for QAM [default=16]", '-p', |
| | 81 | {:dynamic => false, :type => :string}) |
| | 82 | } |
| | 83 | |
| | 84 | |
| | 85 | |
| | 86 | defTopology('txnode') { |t| |
| | 87 | # Load the topology of imaged nodes |
| | 88 | # These nodes are from most recent omf load command |
| | 89 | baseTopo = Topology['system:topo:imaged'] |
| | 90 | |
| | 91 | # Draw a random node from the pool of active ones |
| | 92 | aNode = baseTopo.getUniqueRandomNode |
| | 93 | |
| | 94 | # Add this random node to this 'senderTopo' topology |
| | 95 | t.addNode(aNode) |
| | 96 | puts "TX: #{t.getNodeByIndex(0).to_s}" |
| | 97 | } |
| | 98 | |
| | 99 | defTopology('rxnode') { |t| |
| | 100 | # Load the topology of imaged nodes |
| | 101 | # These nodes are from most recent omf load command |
| | 102 | baseTopo = Topology['system:topo:imaged'] |
| | 103 | |
| | 104 | # Draw a random node from the pool of active ones |
| | 105 | aNode = baseTopo.getUniqueRandomNode |
| | 106 | |
| | 107 | # Add this random node to this 'senderTopo' topology |
| | 108 | t.addNode(aNode) |
| | 109 | puts "RX: #{t.getNodeByIndex(0).to_s}" |
| | 110 | } |
| | 111 | |
| | 112 | defGroup('rx', 'rxnode') { |n| |
| | 113 | n.addApplication('test:app:benchmark_rx') { |app| |
| | 114 | app.setProperty('freq', property.freq) |
| | 115 | app.setProperty('modulation',property.modulation) |
| | 116 | app.setProperty('bitrate',property.rate) |
| | 117 | app.setProperty('rx-gain','30') |
| | 118 | } |
| | 119 | |
| | 120 | } |
| | 121 | |
| | 122 | defGroup('tx', 'txnode') { |n| |
| | 123 | n.addApplication('test:app:benchmark_tx') { |app| |
| | 124 | app.setProperty('freq', property.freq) |
| | 125 | app.setProperty('modulation',property.modulation) |
| | 126 | app.setProperty('bitrate',property.rate) |
| | 127 | app.setProperty('tx-gain','30') |
| | 128 | app.setProperty('tx-amplitude','0.5') |
| | 129 | } |
| | 130 | |
| | 131 | } |
| | 132 | |
| | 133 | onEvent(:ALL_UP_AND_INSTALLED) { |event| |
| | 134 | # Wait a couple of seconds before proceeding so processes can settle down |
| | 135 | wait 2 |
| | 136 | |
| | 137 | # Start receiver application |
| | 138 | info "Start receiver app" |
| | 139 | group("rx").startApplications |
| | 140 | |
| | 141 | # Wait a couple of seconds for receiver application to become ready |
| | 142 | wait 2 |
| | 143 | |
| | 144 | # Start transmitter application |
| | 145 | info "Start sending packets" |
| | 146 | group("tx").startApplications |
| | 147 | |
| | 148 | # Run for specified runtime |
| | 149 | wait property.runtime |
| | 150 | |
| | 151 | # Stop benchmark applications |
| | 152 | info "Stop transmitter and receiver" |
| | 153 | allGroups.stopApplications |
| | 154 | |
| | 155 | # As a precaution manually kill the benchmark applications on tx & rx node |
| | 156 | allGroups.exec("PID=$(ps -ef | awk '$8==\"python\" {print $2}') ; kill -9 $PID") |
| | 157 | wait 2 |
| | 158 | |
| | 159 | info "done" |
| | 160 | Experiment.done |
| | 161 | } |
| | 162 | }}} |
| | 163 | |
| | 164 | * Description... ? |