/DSB-SC_Modulation

Demonstrates concepts of Amplitude Modulation (AM) using Matlab/GNU Octave to modulate using DSB-SC a sinc(x), demodulate synchronously and perform a Low Pass filtering at frequency domain.

Primary LanguageMATLABGNU General Public License v3.0GPL-3.0

Project - Communication Principles

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.

Introduction:

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).

Project Organization:

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

How to run:

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:

original_message

modulated_message_time_plot

modulated_message_frequency_plot

Demodulated_message_spectrum_with_filter

recovered_message

Authors:

Student USP Registration Number
Carlos Henrique Craveiro Aquino Veras 12547187
Ivan Roberto Wagner Pancheniak Filho 12624224
Beatriz Aimee Teixeira Furtado Braga 12547934