== **Programmable Metamaterial Antenna For Physical Layer Security** **Members:** Dylan Turner [UG], Prachi Patel [UG] **Project Advisors and Mentors:** Narayan Mandayam, ____ Wu, Hariharan Venkat == **PROJECT OVERVIEW** With the advent of the Internet of Things (IoT) revolution, there is an increasing need to develop low-cost physical layer security protocols for devices. This will reduce the computational power that is required and propagate energy savings to potentially tens of billions of IoT devices. This project proposes a computationally simpler solution that uses Metamaterial antenna arrays that scramble the signal for eavesdroppers from undesired directions. This is called Directional Modulation. [[Image()]] Previous researchers who have worked on this idea have successfully used Directional Modulation to securely transmit small amounts of data using low bandwidth. A problem arises however when larger amounts of data are transmitted, which require more bandwidth. It turns out that the Metamaterial Antenna is frequency-dependent. This means data sent on subcarrier waves with large differences in frequency ranges will be affected differently by the antenna, resulting in errors. [[Image(directional_modulation.png, 500px)]] The solution to this problem, and the focus of our research this summer, is called Symbol Precoding. [[Image(symbol_precoding.png, 500px)]] **Technologies:** GNU Radio, == **PROGRESS LOG** **Week 1 (5/28 - 5/30)** [https://docs.google.com/presentation/d/1ulUIl1nBwaNs0O2fuv4TT23h_kQwHrS-2Z11JWm-oBI/edit#slide=id.p Week 1 Presentation] - The first week was spent meeting with our mentor Hariharan Venkat who presented us with a high-level overview of the project. - Spent much of the day reading the research paper and proposal the project is based on, learning fundamental details of the research. - Learned how to interface with the ORBIT and COSMOS test bed, and practiced connecting and sending commands to nodes. **Week 2 (6/3 - 6/6)** [https://docs.google.com/presentation/d/19VzJLyvQnkogVhyedPnv9HPsKJ1T_B-a/edit#slide=id.p3 Week 2 Presentation] - Familiarized with fundamentals of Orthogonal Frequency Division Multiplexing (OFDM). - Attended the Introduction to Linux presentation. - Installed and configured GNU Radio on our local devices. - Investigated how flowgraphs are converted into Python code, as well as the source code of the built-in OFDM_TX block. - Experimented with creating flow graphs in GNU Radio. - Completed a tutorial with our mentor using COSMOS Sandbox 2, transmitting and receiving OFDM signals from two Software Defined Radios (SDR). **Week 3 (6/10 - 6/13)** [https://docs.google.com/presentation/d/1N5e4vqVl3nbtCQe70nQem6DcnjLgENEn/edit#slide=id.p1 Week 3 Presentation] - Learned how to output to file sink in GNU Radio, allowing us to investigate precisely how data is manipulated through the flow graph. - Traced through the flow graph for the OFDM_TX, viewing the binary output of each block and figuring out its purpose. - Studied the implementation and purpose of the Cyclic Redundancy Check (CRC) block. - Wrote a Python script to convert the complex numbers in Single precision IEEE 752 format to decimal for better human readability. - Attempted to find a way to visualize the output of the OFDM Carrier allocator, but ran into issues because we cannot open Embedded Python blocks on Mac OS due to a GNU Radio bug. Resulted to using a Windows Emulator as a workaround. - Created a Custom Python Block which multiplies the first input vectors by the second input vectors. This is an important step for Symbol Precoding, where we multiply the transmitted symbol vector by a precoding vector. [[Image(OFDM_TX_flowgraph.png, 500px)]] **Week 4 (6/17 - 6/20)** [https://docs.google.com/presentation/d/1UFLwZKgYal1GMLySniCYHX0rZEzJ-sFd/edit#slide=id.p1 Week 4 Presentation] - Created custom python blocks to interact with OFDM Carrier Allocator Block: - Prints its output in a readable format. - Multiplies *specified* carriers by precoded vector. - Studied the math that goes into Symbol Precoding vector calculation. - Began implementing these functions using Python so we can complete our system and begin testing. - After finishing the Precoding Calculation functionality we brought it into GNU Radio as a custom block and fixed many bugs. [[Image(precoding_math.png, 500px)]] **Week 5 (6/24 - 6/27)** [https://docs.google.com/presentation/d/1-oUjhQxZfLdUxi4N1LeEIhOXTh5NGL9K/edit#slide=id.p1 Week 5 Presentation] - Spent many hours comparing output of Hari's matlab code with our new GNU Radio block's output to ensure correct precoding calculations. - Created an Emulator block for testing which would simulate the effects of the antenna on our signal digitally. - Created a Power Control block to ensure that we do not supply a dangerous voltage to our Metamaterial Antenna when we begin real world experiments. [[Image(custom_blocks.png, 500px)]] **Week 6 (7/1 - 7/3)** [https://docs.google.com/presentation/d/1-oUjhQxZfLdUxi4N1LeEIhOXTh5NGL9K/edit#slide=id.p1 Week 6 Presentation] - Modified our custom Python blocks to ensure consistent processing of chunks. This was an issue as a couple of the blocks were processing more data than needed at once, causing downstream blocks to halt unnecessarily. - Hari informed us that our method of utilizing sync words might have been misguided, and we reorganized our flowgraph to reflect these changes. This involved removing sync words from our precoding vector calculations and prepending them to the output. - Researched the Sychmidl and Cox synchronization method. - Fixed small bugs in the Emulator Block, resulting in promising results! As the image below shows, observing a signal from an incorrect angle showed scrambled data, while the correct angle preserved it. [[Image(promising_results.2.png, 500px)]] **Week 7 (7/8 - 7/11)** -