From b781cea7eb14e3d24a99f311a8cfc9c669cf72c3 Mon Sep 17 00:00:00 2001 From: Bastian Bloessl Date: Mon, 30 Nov 2015 07:06:24 -0800 Subject: [PATCH] sim: change directory structure --- .gitignore | 8 +- examples/herpderp.grc | 1078 ----------------- .../simulations/awgn}/Makefile | 0 .../simulations/awgn}/parse.py | 0 .../simulations/awgn/sim.grc | 0 workspace/plot.png | Bin 77431 -> 0 bytes workspace/run | 32 - workspace/wifi_loopback_noGUI.py | 192 --- 8 files changed, 7 insertions(+), 1303 deletions(-) delete mode 100644 examples/herpderp.grc rename {workspace => utils/simulations/awgn}/Makefile (100%) rename {workspace => utils/simulations/awgn}/parse.py (100%) rename workspace/wifi_loopback_noGUI.grc => utils/simulations/awgn/sim.grc (100%) delete mode 100644 workspace/plot.png delete mode 100755 workspace/run delete mode 100755 workspace/wifi_loopback_noGUI.py diff --git a/.gitignore b/.gitignore index 453ced4..8fdadcc 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,7 @@ -workspace/*/ +build +examples/*.py +.cproject +.project +.pydevproject +.settings +*.pyc diff --git a/examples/herpderp.grc b/examples/herpderp.grc deleted file mode 100644 index bb524a2..0000000 --- a/examples/herpderp.grc +++ /dev/null @@ -1,1078 +0,0 @@ - - - - Sat Feb 1 18:28:19 2014 - - options - - author - - - - window_size - 1280, 1024 - - - category - Custom - - - comment - - - - description - - - - _enabled - True - - - _coordinate - (7, 4) - - - _rotation - 0 - - - generate_options - no_gui - - - id - wifi_loopback - - - max_nouts - 0 - - - qt_qss_theme - - - - realtime_scheduling - - - - run_command - {python} -u {filename} - - - run_options - prompt - - - run - True - - - thread_safe_setters - - - - title - - - - - variable - - comment - - - - _enabled - True - - - _coordinate - (176, 11) - - - _rotation - 0 - - - id - out_buf_size - - - value - 96000 - - - - blocks_file_sink - - append - False - - - alias - - - - comment - - - - affinity - - - - _enabled - False - - - file - /tmp/ofdm.bin - - - _coordinate - (896, 187) - - - _rotation - 0 - - - id - blocks_file_sink_0 - - - type - byte - - - unbuffered - True - - - vlen - 1 - - - - blocks_message_strobe - - alias - - - - comment - - - - affinity - - - - _enabled - True - - - _coordinate - (48, 131) - - - _rotation - 0 - - - id - blocks_message_strobe_0 - - - maxoutbuf - 0 - - - msg - pmt.intern("".join("x" for i in range(pdu_length))) - - - minoutbuf - 0 - - - period - interval - - - - blocks_multiply_const_vxx - - alias - - - - comment - - - - const - (10**(snr/10.0))**.5 - - - affinity - - - - _enabled - True - - - _coordinate - (440, 427) - - - _rotation - 0 - - - id - blocks_multiply_const_vxx_0 - - - type - complex - - - maxoutbuf - 0 - - - minoutbuf - 0 - - - vlen - 1 - - - - blocks_null_sink - - alias - - - - bus_conns - [[0,],] - - - comment - - - - affinity - - - - _enabled - True - - - _coordinate - (232, 545) - - - _rotation - 0 - - - id - blocks_null_sink_0 - - - type - complex - - - num_inputs - 1 - - - vlen - 1 - - - - blocks_null_sink - - alias - - - - bus_conns - [[0,],] - - - comment - - - - affinity - - - - _enabled - True - - - _coordinate - (480, 633) - - - _rotation - 0 - - - id - blocks_null_sink_1 - - - type - float - - - num_inputs - 1 - - - vlen - 1 - - - - blocks_pdu_to_tagged_stream - - alias - - - - comment - - - - affinity - - - - _enabled - True - - - _coordinate - (136, 635) - - - _rotation - 0 - - - id - blocks_pdu_to_tagged_stream_0 - - - type - float - - - tag - packet_len - - - maxoutbuf - 0 - - - minoutbuf - 0 - - - - parameter - - alias - - - - comment - Default: 1 -Else: 0 - - - _enabled - True - - - _coordinate - (480, 11) - - - _rotation - 0 - - - id - chan_est - - - label - - - - short_id - - - - type - intx - - - value - 1 - - - - channels_channel_model - - alias - - - - block_tags - False - - - comment - - - - affinity - - - - _enabled - True - - - epsilon - 1.0 - - - freq_offset - freq_offset - - - _coordinate - (664, 395) - - - _rotation - 0 - - - id - channels_channel_model_0 - - - maxoutbuf - 0 - - - minoutbuf - 0 - - - noise_voltage - .5**.5 - - - seed - 0 - - - taps - 1.0 - - - - parameter - - alias - - - - comment - 0, 1, ..., 6, 7 - - - _enabled - True - - - _coordinate - (760, 11) - - - _rotation - 0 - - - id - encoding - - - label - - - - short_id - - - - type - intx - - - value - 0 - - - - foo_packet_pad2 - - alias - - - - comment - - - - affinity - - - - debug - False - - - delay_sec - 0.001 - - - delay - False - - - _enabled - True - - - _coordinate - (272, 395) - - - _rotation - 0 - - - id - foo_packet_pad2_0 - - - maxoutbuf - 0 - - - minoutbuf - out_buf_size - - - pad_front - 500 - - - pad_tail - 0 - - - - foo_wireshark_connector - - alias - - - - comment - - - - affinity - - - - debug - False - - - _enabled - False - - - _coordinate - (688, 195) - - - _rotation - 0 - - - id - foo_wireshark_connector_0 - - - maxoutbuf - 0 - - - minoutbuf - 0 - - - tech - 127 - - - - parameter - - alias - - - - comment - A float. -Default: 0 -Min: -0.1 -Max: 0.1 - - - _enabled - True - - - _coordinate - (664, 11) - - - _rotation - 0 - - - id - freq_offset - - - label - - - - short_id - - - - type - eng_float - - - value - 0 - - - - ieee802_11_ofdm_mac - - bss_mac - [0xff, 0xff, 0xff, 0xff, 0xff, 0xff] - - - alias - - - - comment - - - - affinity - - - - dst_mac - [0x42, 0x42, 0x42, 0x42, 0x42, 0x42] - - - _enabled - True - - - _coordinate - (416, 139) - - - _rotation - 0 - - - id - ieee802_11_ofdm_mac_0 - - - maxoutbuf - 0 - - - minoutbuf - 0 - - - src_mac - [0x23, 0x23, 0x23, 0x23, 0x23, 0x23] - - - - ieee802_11_ofdm_parse_mac - - alias - - - - comment - - - - affinity - - - - debug - True - - - _enabled - True - - - _coordinate - (112, 259) - - - _rotation - 180 - - - id - ieee802_11_ofdm_parse_mac_0 - - - log - False - - - maxoutbuf - 0 - - - minoutbuf - 0 - - - - import - - alias - - - - comment - - - - _enabled - True - - - _coordinate - (280, 11) - - - _rotation - 0 - - - id - import_0 - - - import - import math - - - - parameter - - alias - - - - comment - PDU Interval (ms). -Default: 100 -Min: 10 -Max: 1000 - - - _enabled - True - - - _coordinate - (848, 11) - - - _rotation - 0 - - - id - interval - - - label - - - - short_id - - - - type - intx - - - value - 1000 - - - - parameter - - alias - - - - comment - An integer. -Min: 0 -Max: 1500 - - - _enabled - True - - - _coordinate - (384, 11) - - - _rotation - 0 - - - id - pdu_length - - - label - - - - short_id - - - - type - intx - - - value - 500 - - - - parameter - - alias - - - - comment - A float. -Default: 10 -Min: -15 -Max: 30 - - - _enabled - True - - - _coordinate - (576, 11) - - - _rotation - 0 - - - id - snr - - - label - - - - short_id - - - - type - eng_float - - - value - 10 - - - - wifi_phy_hier - - alias - - - - comment - - - - affinity - - - - _enabled - True - - - _coordinate - (408, 281) - - - _rotation - 180 - - - id - wifi_phy_hier_0 - - - maxoutbuf - 0 - - - minoutbuf - 0 - - - chan_est - chan_est - - - encoding - encoding - - - - blocks_message_strobe_0 - ieee802_11_ofdm_mac_0 - strobe - app in - - - blocks_multiply_const_vxx_0 - channels_channel_model_0 - 0 - 0 - - - blocks_pdu_to_tagged_stream_0 - blocks_null_sink_1 - 0 - 0 - - - channels_channel_model_0 - wifi_phy_hier_0 - 0 - 0 - - - foo_packet_pad2_0 - blocks_multiply_const_vxx_0 - 0 - 0 - - - foo_wireshark_connector_0 - blocks_file_sink_0 - 0 - 0 - - - ieee802_11_ofdm_mac_0 - wifi_phy_hier_0 - phy out - mac_in - - - ieee802_11_ofdm_parse_mac_0 - blocks_pdu_to_tagged_stream_0 - fer - pdus - - - wifi_phy_hier_0 - blocks_null_sink_0 - 1 - 0 - - - wifi_phy_hier_0 - ieee802_11_ofdm_parse_mac_0 - mac_out - in - - - wifi_phy_hier_0 - foo_packet_pad2_0 - 0 - 0 - - diff --git a/workspace/Makefile b/utils/simulations/awgn/Makefile similarity index 100% rename from workspace/Makefile rename to utils/simulations/awgn/Makefile diff --git a/workspace/parse.py b/utils/simulations/awgn/parse.py similarity index 100% rename from workspace/parse.py rename to utils/simulations/awgn/parse.py diff --git a/workspace/wifi_loopback_noGUI.grc b/utils/simulations/awgn/sim.grc similarity index 100% rename from workspace/wifi_loopback_noGUI.grc rename to utils/simulations/awgn/sim.grc diff --git a/workspace/plot.png b/workspace/plot.png deleted file mode 100644 index c134c4ec764c6dd19bf7a22957f01cc88d314800..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77431 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 Storing results in ./$result_dir." -echo - -for e in {0..3} -do - for s in `seq 1.0 2 9.0` - do - for t in `seq 1 1 $ntrials` - do - echo - echo ">>> >>> Running trial $t of $ntrials." - make result=$result_dir t=$t n=20 c=1 s=$s o=0 e=$e i=100 - done - done -done - -./parse.py $result_dir $ntrials diff --git a/workspace/wifi_loopback_noGUI.py b/workspace/wifi_loopback_noGUI.py deleted file mode 100755 index 29d3f4c..0000000 --- a/workspace/wifi_loopback_noGUI.py +++ /dev/null @@ -1,192 +0,0 @@ -#!/usr/bin/env python2 -# -*- coding: utf-8 -*- -################################################## -# GNU Radio Python Flow Graph -# Title: Wifi Loopback Nogui -# Generated: Sat Nov 21 10:57:29 2015 -################################################## - -import os -import sys -sys.path.append(os.environ.get('GRC_HIER_PATH', os.path.expanduser('~/.grc_gnuradio'))) - -from gnuradio import blocks -from gnuradio import channels -from gnuradio import eng_notation -from gnuradio import gr -from gnuradio.eng_option import eng_option -from gnuradio.filter import firdes -from optparse import OptionParser -from wifi_phy_hier import wifi_phy_hier # grc-generated hier_block -import foo -import ieee802_11 -import math -import pmt - - -class wifi_loopback_noGUI(gr.top_block): - - def __init__(self, chan_est=1, encoding=0, freq_offset=0, interval=500, nmessages=50, ntrials=0, resultdir="0", snr=10): - gr.top_block.__init__(self, "Wifi Loopback Nogui") - - ################################################## - # Parameters - ################################################## - self.chan_est = chan_est - self.encoding = encoding - self.freq_offset = freq_offset - self.interval = interval - self.nmessages = nmessages - self.ntrials = ntrials - self.resultdir = resultdir - self.snr = snr - - ################################################## - # Variables - ################################################## - self.out_buf_size = out_buf_size = 96000 - - ################################################## - # Blocks - ################################################## - self.wifi_phy_hier_0 = wifi_phy_hier( - encoding=encoding, - chan_est=chan_est, - ) - self.ieee802_11_ofdm_mac_0 = ieee802_11.ofdm_mac(([0x23, 0x23, 0x23, 0x23, 0x23, 0x23]), ([0x42, 0x42, 0x42, 0x42, 0x42, 0x42]), ([0xff, 0xff, 0xff, 0xff, 0xff, 0xff])) - self.foo_wireshark_connector_0 = foo.wireshark_connector(127, False) - self.foo_periodic_msg_source_0 = foo.periodic_msg_source(pmt.intern("Hello World!"), interval, nmessages, True, False) - self.foo_packet_pad2_0 = foo.packet_pad2(False, False, 0.001, 1000, 1000) - (self.foo_packet_pad2_0).set_min_output_buffer(96000) - self.channels_channel_model_0 = channels.channel_model( - noise_voltage=.5**.5, - frequency_offset=freq_offset, - epsilon=1.0, - taps=(1.0, ), - noise_seed=0, - block_tags=False - ) - self.blocks_null_sink_0 = blocks.null_sink(gr.sizeof_gr_complex*1) - self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((((10**(snr/10.0))**0.5)/(2**0.5), )) - self.blocks_file_sink_0_0 = blocks.file_sink(gr.sizeof_char*1, "" + resultdir + "/ofdm_" + str(ntrials) + "_" + str(nmessages) + "_" + str(snr) + "_" + str(encoding) + "_" + str(interval) + ".pcap", False) - self.blocks_file_sink_0_0.set_unbuffered(True) - - ################################################## - # Connections - ################################################## - self.msg_connect((self.foo_periodic_msg_source_0, 'out'), (self.foo_wireshark_connector_0, 'in')) - self.msg_connect((self.foo_periodic_msg_source_0, 'out'), (self.ieee802_11_ofdm_mac_0, 'app in')) - self.msg_connect((self.ieee802_11_ofdm_mac_0, 'phy out'), (self.wifi_phy_hier_0, 'mac_in')) - self.msg_connect((self.wifi_phy_hier_0, 'mac_out'), (self.foo_wireshark_connector_0, 'in')) - self.connect((self.blocks_multiply_const_vxx_0, 0), (self.channels_channel_model_0, 0)) - self.connect((self.channels_channel_model_0, 0), (self.wifi_phy_hier_0, 0)) - self.connect((self.foo_packet_pad2_0, 0), (self.blocks_multiply_const_vxx_0, 0)) - self.connect((self.foo_wireshark_connector_0, 0), (self.blocks_file_sink_0_0, 0)) - self.connect((self.wifi_phy_hier_0, 1), (self.blocks_null_sink_0, 0)) - self.connect((self.wifi_phy_hier_0, 0), (self.foo_packet_pad2_0, 0)) - - def get_chan_est(self): - return self.chan_est - - def set_chan_est(self, chan_est): - self.chan_est = chan_est - self.wifi_phy_hier_0.set_chan_est(self.chan_est) - - def get_encoding(self): - return self.encoding - - def set_encoding(self, encoding): - self.encoding = encoding - self.blocks_file_sink_0_0.open("" + self.resultdir + "/ofdm_" + str(self.ntrials) + "_" + str(self.nmessages) + "_" + str(self.snr) + "_" + str(self.encoding) + "_" + str(self.interval) + ".pcap") - self.wifi_phy_hier_0.set_encoding(self.encoding) - - def get_freq_offset(self): - return self.freq_offset - - def set_freq_offset(self, freq_offset): - self.freq_offset = freq_offset - self.channels_channel_model_0.set_frequency_offset(self.freq_offset) - - def get_interval(self): - return self.interval - - def set_interval(self, interval): - self.interval = interval - self.blocks_file_sink_0_0.open("" + self.resultdir + "/ofdm_" + str(self.ntrials) + "_" + str(self.nmessages) + "_" + str(self.snr) + "_" + str(self.encoding) + "_" + str(self.interval) + ".pcap") - - def get_nmessages(self): - return self.nmessages - - def set_nmessages(self, nmessages): - self.nmessages = nmessages - self.blocks_file_sink_0_0.open("" + self.resultdir + "/ofdm_" + str(self.ntrials) + "_" + str(self.nmessages) + "_" + str(self.snr) + "_" + str(self.encoding) + "_" + str(self.interval) + ".pcap") - - def get_ntrials(self): - return self.ntrials - - def set_ntrials(self, ntrials): - self.ntrials = ntrials - self.blocks_file_sink_0_0.open("" + self.resultdir + "/ofdm_" + str(self.ntrials) + "_" + str(self.nmessages) + "_" + str(self.snr) + "_" + str(self.encoding) + "_" + str(self.interval) + ".pcap") - - def get_resultdir(self): - return self.resultdir - - def set_resultdir(self, resultdir): - self.resultdir = resultdir - self.blocks_file_sink_0_0.open("" + self.resultdir + "/ofdm_" + str(self.ntrials) + "_" + str(self.nmessages) + "_" + str(self.snr) + "_" + str(self.encoding) + "_" + str(self.interval) + ".pcap") - - def get_snr(self): - return self.snr - - def set_snr(self, snr): - self.snr = snr - self.blocks_file_sink_0_0.open("" + self.resultdir + "/ofdm_" + str(self.ntrials) + "_" + str(self.nmessages) + "_" + str(self.snr) + "_" + str(self.encoding) + "_" + str(self.interval) + ".pcap") - self.blocks_multiply_const_vxx_0.set_k((((10**(self.snr/10.0))**0.5)/(2**0.5), )) - - def get_out_buf_size(self): - return self.out_buf_size - - def set_out_buf_size(self, out_buf_size): - self.out_buf_size = out_buf_size - - -def argument_parser(): - parser = OptionParser(option_class=eng_option, usage="%prog: [options]") - parser.add_option( - "-c", "--chan-est", dest="chan_est", type="intx", default=1, - help="Set chan_est [default=%default]") - parser.add_option( - "-e", "--encoding", dest="encoding", type="intx", default=0, - help="Set encoding [default=%default]") - parser.add_option( - "-o", "--freq-offset", dest="freq_offset", type="eng_float", default=eng_notation.num_to_str(0), - help="Set freq_offset [default=%default]") - parser.add_option( - "-i", "--interval", dest="interval", type="intx", default=500, - help="Set interval [default=%default]") - parser.add_option( - "-n", "--nmessages", dest="nmessages", type="intx", default=50, - help="Set nmessages [default=%default]") - parser.add_option( - "-t", "--ntrials", dest="ntrials", type="intx", default=0, - help="Set ntrials [default=%default]") - parser.add_option( - "-r", "--resultdir", dest="resultdir", type="string", default="0", - help="Set resultdir [default=%default]") - parser.add_option( - "-s", "--snr", dest="snr", type="eng_float", default=eng_notation.num_to_str(10), - help="Set snr [default=%default]") - return parser - - -def main(top_block_cls=wifi_loopback_noGUI, options=None): - if options is None: - options, _ = argument_parser().parse_args() - - tb = top_block_cls(chan_est=options.chan_est, encoding=options.encoding, freq_offset=options.freq_offset, interval=options.interval, nmessages=options.nmessages, ntrials=options.ntrials, resultdir=options.resultdir, snr=options.snr) - tb.start() - tb.wait() - - -if __name__ == '__main__': - main()