{"id":25429994,"url":"https://github.com/davidyslu/interferencenulling","last_synced_at":"2025-10-31T19:30:23.142Z","repository":{"id":93934211,"uuid":"132573518","full_name":"davidyslu/InterferenceNulling","owner":"davidyslu","description":"Simulate interference nulling in simple MIMO OFDM with BPSK demodulation","archived":false,"fork":false,"pushed_at":"2019-04-16T03:21:28.000Z","size":375,"stargazers_count":5,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-07T16:12:13.316Z","etag":null,"topics":["matlab","mimo","ofdm"],"latest_commit_sha":null,"homepage":"","language":"MATLAB","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/davidyslu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-05-08T07:48:26.000Z","updated_at":"2024-08-14T04:01:21.000Z","dependencies_parsed_at":null,"dependency_job_id":"e0266de5-bc15-4eec-9c68-dca6d58724bc","html_url":"https://github.com/davidyslu/InterferenceNulling","commit_stats":null,"previous_names":["davidyslu/interferencenulling"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidyslu%2FInterferenceNulling","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidyslu%2FInterferenceNulling/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidyslu%2FInterferenceNulling/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidyslu%2FInterferenceNulling/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davidyslu","download_url":"https://codeload.github.com/davidyslu/InterferenceNulling/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239223841,"owners_count":19602872,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["matlab","mimo","ofdm"],"created_at":"2025-02-17T02:33:08.985Z","updated_at":"2025-10-31T19:30:23.019Z","avatar_url":"https://github.com/davidyslu.png","language":"MATLAB","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Interference Nulling in Simulation\n\nIn this repository, we are going to simulate \"interference nulling\" in simple MIMO OFDM with BPSK demodulation by using the example code on [WARPLab](https://warpproject.org/trac/wiki/WARPLab/Examples/OFDM) `wl_example_siso_ofdm_txrx.m`. This repository is extended from my another repository - [Simple SISO OFDM MATLAB simulation](https://github.com/yungshenglu/Simple_SISO_OFDM).\n\n\u003e **NOTCIE:** This repository is the assignment in NCTU course \"Wireless Communication Systems 2018\". If you are taking this course, please do not duplicate from this repository. All rights reserved.\n\n---\n## Description\n\nThe sample code `wl_example_siso_ofdm_txrx.m` follows the following steps.\n1. Generate OFDM transmit samples\n2. Send samples via WARP or Simulation transmission\n3. Decode the received samples\n4. Calculate SNR / channels and plot\n\nIn the part of signal generation,\n1. Generate preambles\n2. Generate digital bits\n3. Modulate digital bits to frequency-domain samples\n4. Add pilot samples\n5. Convert frequency sample to time samples via FFT\n6. Insert CP (Cyclic Prefix)\n7. Reshape symbols to 1D samples\n\nIn the part of decoding,\n1. Packet detection\n2. CFO correction (useless in simulation)\n3. Channel estimation\n4. Remove CP\n5. Convert time samples to frequency samples via FFT\n6. Decode frequency samples\n7. SFO correction\n\n### Interference Nulling Simulation\n\n1. Modify [Simple SISO OFDM MATLAB simulation](https://github.com/yungshenglu/Simple_SISO_OFDM) Code (Tx) - `signal_gen.m`\n    * Extend the code to `Tx1` (antenna 1) and `Tx2` (antenna 2)\n        * A vector of digital bits (`0` or `1`)\n        * Modulate them to two sequences of frequency-domain signals ($X[k]$)\n    * Generate random channels $H_1[k]$ and $H_2[k]$\n        * In Matlab, `H_i[ k ] = ( randn() + 1i * randn() ) / sqrt( 2 )`\n        * One channel for each subcarrier across all symbols\n    * Precode frequency-domain signals by unit beamforming vector $w$\n        * Antenna 1: $X_1’[k] = w_1[k] X[k]$\n        * Antenna 2: $X_2’[k] = w_2[k] X[k]$\n        * $(w_1[k], w_2[k])$ is a unit vector, i.e., $w_1^2[k] + w_1^2 [k]= 1$.\n    * Multiply the frequency-domain signals by the randomly generated unit frequency-domain channel\n        * $Y_1 = H_1[k] * X_1’[k]$\n        * $Y_2 = H_2[k] * X_2’[k]$\n        * Convert frequency-domain signals to time-domain signals $(y_1, y_2)$\n2. Modify [Simple SISO OFDM MATLAB simulation](https://github.com/yungshenglu/Simple_SISO_OFDM) Code (Rx) - `decode.m`\n    * Sum up the two time-domain signals\n        * $y = y_1 + y_2$\n    * Generate noise to simulate different SNR (as in [Simple SISO OFDM MATLAB simulation](https://github.com/yungshenglu/Simple_SISO_OFDM))\n        * Make sure $(E[y_1^2 + y_2^2]) / N = \\mathrm{SNR}$\n        * Not $E[ (y_1 + y_2) ^ 2 ] / N = \\mathrm{SNR}$\n    * Learn the channel $H_1$ and $H_2$\n    * Decode the received signal via SISO decoding (as in [Simple SISO OFDM MATLAB simulation](https://github.com/yungshenglu/Simple_SISO_OFDM))\n    * Compare the SNR with and without precoding\n        * `SNR-1`:\n            * `Tx1` sends the non-precoded signals $y_1$ ($y_1 = ifft(H_1X)$) along, and Rx decodes $y_1$\n        * `SNR-2`:\n            * `Tx2` sends the non-precoded signals $y_2$ ($y_2 = ifft(H_2X)$) along, and Rx decodes $y_2$\n        * `SNR-orig`:\n            * `Tx1` and `Tx2` send the non-precoded signals simultaneously ($y = ifft(H_1 X_1 + H_2 X_2)$)\n            * `Rx` decodes the combined original signals\n        * `SNR-null`:\n            * `Tx1` and `Tx2` send precoded signals simultaneously ($y = ifft(H_1 W_1 X_1 + H_2 W_2 X_2)$)\n            * `Rx` decodes the combined precoded signals\n3. Plot the amplitude of the combined signal, `abs(y)` (SNR: 10dB)\n4. Plot the SNR of the signal\n    * Only `Tx1`\n    * Only `Tx2`\n    * Combined signal without precoding\n    * Combined signal with precoding\n\n---\n## Execution\n\n\u003e **NOTICE:** Make sure you have already installed MATLAB on your machine\n\n1. Open your MATLAB IDE and run `simulation.m`\n2. If succeed, you will get some figures as follow:\n    * Rx Signal Amplitude (Simulated SNR: 5 dB)\n        ![](res/Rx_5dB.png)\n    * Rx Signal Amplitude (Simulated SNR: 10 dB)\n        ![](res/Rx_10dB.png)\n    * Rx Signal Amplitude (Simulated SNR: 15 dB)\n        ![](res/Rx_15dB.png)\n    * Rx Signal Amplitude (Simulated SNR: 20 dB)\n        ![](res/Rx_20dB.png)\n    * Rx Signal Amplitude (Simulated SNR: 25 dB)\n        ![](res/Rx_25dB.png)\n    * SNR decoded\n        ![](res/SNR_decoded.png)\n\n---\n## Contributor\n\n\u003e **NOTICE:** You can follow the contributing process [CONTRIBUTING.md](CONTRIBUTING.md) to join me. I am very welcome any issue!\n\n* [David Lu](https://github.com/yungshenglu)\n\n---\n## License\n\n\u003e **NOTICE:** This repository is the assignment in NCTU course \"Wireless Communication Systems 2018\". If you are taking this course, please do not duplicate from this repository. All rights reserved.\n\n[GNU GENERAL PUBLIC LICENSE Version 3](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidyslu%2Finterferencenulling","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavidyslu%2Finterferencenulling","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidyslu%2Finterferencenulling/lists"}