This project was developed as an assignment for the SEL0616 - Communication Principles discipline, offered in the first semester of 2024 by professor Mateus Isaac de Oliveira Souza at the Electrical and Computing Engineering Department - SEL, São Carlos School of Engineering - EESC, University of São Paulo - USP, Brazil.
This project aims to practically expose, using code examples, the knowledge learned during the course regarding amplitude modulation and demodulation (AM), specifically Double-SideBand Suppressed-Carrier modulation, or DSB-SC, and Synchronous Demodulation.
Two main references were used as a basis for solving the proposed problems. For the conceptual part of Amplitude Modulation (AM), the course's main textbook Modern Digital and Analog Communication Systems (Lathi's book) was used, and for the part concerning Digital Signal Processing and the use of the fft
, fftshift
, and ifft
functions, we used Professor Emiliano Rezende Martins' book Essentials of Signals and Systems, focusing on Chapter 8 - The Discrete Fourier Transform (DFT).
DSB-SC_Modulation
├── docs # Project Documentation Files (all in Brazilian Portuguese)
│ ├── final_assignment.pdf # The submitted assignment
│ └── project_specification_pt_br.pdf # The original specification
├── flake.lock
├── flake.nix
├── LICENSE
├── nix
│ └── shell.nix # Project's dependencies
├── plots # The plots generated by the source code
│ ├── a_plot.png
│ ├── ...
│ └── more_plot.png
├── README.md # This README (u are here!)
└── src # The source code of the project
├── amp_normalize.m
├── delimit_window.m
├── half_power_bandwidth.m
└── main.m # The actual script
First ensure that you have all the dependencies needed to run the project. We used octaveFull package at NixOS Linux distribution within the ghostscript package to allow saving the plots as pngs directly.
We don't have any idea of how to download this dependencies in other distros, but if you want to use Nix (the package manager) to manage the dependencies just execute the lines below.
$ git clone https://github.com/CarlosCraveiro/DSB-SC_Modulation.git
$ cd DSB-SC_Modulation/
$ nix --experimental-features 'nix-command flakes' # Ensure that you have flakes support
$ nix develop -c $SHELL # Download the development environment (the needed dependencies)
$ cd src/
$ octave
And at octave shell just set the frequency of the carrier wave (by default is 2.0MHz) by setting an environment variable and execute the main script.
octave> fc=500000 # Sets the frequency of the carrier to 0.5MHz
octave> main
Some of the plots that you should see are:
Student | USP Registration Number |
---|---|
Carlos Henrique Craveiro Aquino Veras | 12547187 |
Ivan Roberto Wagner Pancheniak Filho | 12624224 |
Beatriz Aimee Teixeira Furtado Braga | 12547934 |