Skip to main content

MATLAB Code for Pulse Position Modulation (PPM) and Demodulation

 

MATLAB Code

% Set parameters
fs = 1000; % Sampling rate in Hz
t = 0:1/fs:1; % Time vector spanning 1 second
analogSignal = (sin(2 * pi * 2 * t) + 1) / 2; % Generate a 2 Hz sine wave, scaled to [0,1]

samplesPerPulse = 100; % Define number of samples per pulse
ppmWidthFraction = 0.1; % Fraction of samplesPerPulse used for pulse width

% Perform PPM modulation
[ppmSignal, ppmPulseTrain] = ppmModulate(analogSignal, samplesPerPulse, ppmWidthFraction);

% Perform PPM demodulation
demodulatedSignal = ppmDemodulate(ppmSignal, samplesPerPulse);

% Display the demodulated signal values
disp('Demodulated Signal:');
disp(demodulatedSignal);

% Plot results
figure;

% Plot original analog signal
subplot(3, 1, 1);
plot(t, analogSignal, 'b');
title('Original 2 Hz Sine Wave');
xlabel('Time (s)');
ylabel('Amplitude');

% Plot modulated PPM signal
subplot(3, 1, 2);
stem(ppmSignal(1:1000), 'filled');
title('Pulse Position Modulated (PPM) Signal');
xlabel('Sample Index');
ylabel('Amplitude');

% Plot demodulated signal
subplot(3, 1, 3);
samples = 1:1000;
plot(samples / 1000, demodulatedSignal(1:1000), 'r');
title('Recovered Demodulated Signal');
xlabel('Sample Index (x10^3)');
ylabel('Normalized Pulse Position');

% Function for PPM Modulation
function [ppmSignal, ppmPulseTrain] = ppmModulate(analogSignal, samplesPerPulse, ppmWidthFraction)
pulseWidth = round(ppmWidthFraction * samplesPerPulse); % Compute pulse width
ppmSignal = zeros(1, length(analogSignal) * samplesPerPulse); % Initialize PPM signal
ppmPulseTrain = zeros(1, length(analogSignal) * samplesPerPulse); % Initialize pulse train

for i = 1:length(analogSignal)
% Calculate the pulse's starting position within the symbol period
pulsePosition = round(analogSignal(i) * (samplesPerPulse - pulseWidth));

% Determine the start and end indices of the pulse
startIndex = (i - 1) * samplesPerPulse + pulsePosition + 1;
endIndex = min(startIndex + pulseWidth - 1, i * samplesPerPulse);

% Assign pulse in the PPM signal and pulse train
ppmSignal(startIndex:endIndex) = 1;
ppmPulseTrain(startIndex:endIndex) = 1;
end
end

% Function for PPM Demodulation
function demodulatedSignal = ppmDemodulate(ppmSignal, samplesPerPulse)
numSymbols = length(ppmSignal) / samplesPerPulse; % Determine number of symbols
demodulatedSignal = zeros(1, numSymbols); % Initialize demodulated signal

for i = 1:numSymbols
startIndex = (i - 1) * samplesPerPulse + 1;
endIndex = i * samplesPerPulse;
segment = ppmSignal(startIndex:endIndex);

% Locate the first occurrence of the pulse
pulsePosition = find(segment == 1, 1);

if ~isempty(pulsePosition)
% Normalize the pulse position to a range of [0,1]
demodulatedSignal(i) = (pulsePosition - 1) / samplesPerPulse;
else
demodulatedSignal(i) = 0; % Assign zero if no pulse is detected
end
end
end

Output


 

 

 

 

 

 

Copy the code from here

 

Further Reading 


People are good at skipping over material they already know!

View Related Topics to







Admin & Author: Salim

s

  Website: www.salimwireless.com
  Interests: Signal Processing, Telecommunication, 5G Technology, Present & Future Wireless Technologies, Digital Signal Processing, Computer Networks, Millimeter Wave Band Channel, Web Development
  Seeking an opportunity in the Teaching or Electronics & Telecommunication domains.
  Possess M.Tech in Electronic Communication Systems.


Contact Us

Name

Email *

Message *

Popular Posts

BER vs SNR for M-ary QAM, M-ary PSK, QPSK, BPSK, ...

📘 Overview of BER and SNR 🧮 Simulator for BER calculation of m-ary QAM and m-ary PSK 🧮 Simulator for Constellation Diagram of m-ary QAM 🧮 Simulator for Constellation Diagram of m-ary PSK 🧮 MATLAB Code for BER calculation of M-ary QAM, M-ary PSK, QPSK, BPSK, ... 🧮 MATLAB Code for BER calculation of ASK, FSK, and PSK 🧮 MATLAB Code for BER calculation of Alamouti Scheme 🧮 Different approaches to calculate BER vs SNR 📚 Further Reading Modulation Constellation Diagrams BER vs. SNR BER vs SNR for M-QAM, M-PSK, QPSk, BPSK, ... What is Bit Error Rate (BER)? The abbreviation BER stands for bit error rate, which indicates how many corrupted bits are received (after the demodulation process) compared to the total number of bits sent in a communication process. It is defined as,  In mathematics, BER = (number of bits received in error / total number of transmitted bits)...

UGC NET Electronic Science Previous Year Question Papers

Home / Engineering & Other Exams / UGC NET 2022: Previous Year Question Papers ...   NET | GATE | ESE | UGC-NET (Electronics Science, Subject code: 88 ) UGC Net Electronic Science Questions Paper With Answer Key Download Pdf [December 2024] UGC Net Electronic Science Questions Paper With Answer Key Download Pdf [June 2024] UGC Net Electronic Science Questions Paper With Answer Key Download Pdf [December 2023] UGC Net Electronic Science Questions Paper With Answer Key Download Pdf [June 2023] UGC Net Electronic Science Questions Paper With Answer Key Download Pdf [December 2022]  UGC Net Electronic Science Questions Paper With Answer Key Download Pdf [June 2022]   UGC Net Electronic Science Questions Paper With Answer Key Download Pdf [December 2021] UGC Net Electronic Science Questions With Answer Key Download Pdf [June 2020] UGC Net Electronic Science Questions With Answer Key Download Pdf [December 2019] UGC Net Electronic Science Questions With Answer...

Constellation Diagrams of ASK, PSK, and FSK

📘 Overview 🧮 Simulator for constellation diagrams of ASK, FSK, and PSK 🧮 Theory 🧮 MATLAB Codes 🧮 Simulator for constellation diagrams of m-ary PSK 🧮 Simulator for constellation diagrams of m-ary QAM 📚 Further Reading BASK (Binary ASK) Modulation: Transmits one of two signals: 0 or -√Eb, where Eb​ is the energy per bit. These signals represent binary 0 and 1.    BFSK (Binary FSK) Modulation: Transmits one of two signals: +√Eb​ ( On the y-axis, the phase shift of 90 degrees with respect to the x-axis, which is also termed phase offset ) or √Eb (on x-axis), where Eb​ is the energy per bit. These signals represent binary 0 and 1.  BPSK (Binary PSK) Modulation: Transmits one of two signals: +√Eb​ or -√Eb (they differ by 180 degree phase shift), where Eb​ is the energy per bit. These signals represent binary 0 and 1.    Simulator for BASK, BPSK, and BFSK Constellation Diagrams ...

Comparisons among ASK, PSK, and FSK | And the definitions of each

https://www.salimwireless.com/2024/11/constellation-diagram-in-matlab.html 📘 Overview 🧮 Simulator 🧮 Noise Sensitivity, Bandwidth, Complexity, etc. 🧮 MATLAB Code for BER vs. SNR Analysis of ASK, FSK, and PSK 🧮 MATLAB Code for Constellation Diagrams of ASK, FSK, and PSK 🧮 Simulator for ASK, FSK, and PSK Generation 🧮 Simulator for ASK, FSK, and PSK Constellation 🧮 Some Questions and Answers 📚 Further Reading Modulation ASK, FSK & PSK Constellation MATLAB Simulink MATLAB Code Comparisons among ASK, PSK, and FSK    Comparisons among ASK, PSK, and FSK   Simulator for Calculating Bandwidth of ASK, FSK, and PSK The baud rate represents the number of symbols transmitted per second. Both baud rate and bit rate are same for binary ASK, FSK, and PSK. Select Modulation Type: ASK FSK PSK Baud Rat...

Alamouti Scheme for 2x2 MIMO in MATLAB

📘 Overview & Theory 🧮 MATLAB Code for Alamouti Scheme 🧮 MATLAB Code for BER vs. SNR for Alamouti Scheme 🧮 Alamouti Scheme Transmission Table 📚 Further Reading    Read about the Alamouti Scheme first MATLAB Code for Alamouti's Precoding Matrix for 2 X 2 MIMO % Clear any existing data and figures clc; clear; close all; % Define system parameters transmitAntennas = 2; % Number of antennas at the transmitter receiveAntennas = 2; % Number of antennas at the receiver symbolCount = 1000000; % Number of symbols to transmit SNR_dB = 15; % Signal-to-Noise Ratio in decibels % Generate random binary data for transmission rng(10); % Set seed for reproducibility transmitData = randi([0, 1], transmitAntennas, symbolCount); % Perform Binary Phase Shift Keying (BPSK) modulation modulatedSymbols = 1 - 2 * transmitData; % Define Alamouti's Precoding Matrix precodingMatrix = [1 1; -1i 1i]; % Encode and transmit data using Alamouti scheme transmittedSym...

MATLAB Code for Pulse Amplitude Modulation (PAM) and Demodulation

📘 Overview & Theory 🧮 MATLAB Code 1 🧮 MATLAB Code 2 🧮 MATLAB Code for Pulse Amplitude Modulation and Demodulation of Digital data 🧮 Other Pulse Modulation Techniques (e.g., PWM, PPM, DM, and PCM) 📚 Further Reading   Pulse Amplitude Modulation (PAM) & Demodulation MATLAB Script clc; clear all; close all; fm= 10; % frequency of the message signal fc= 100; % frequency of the carrier signal fs=1000*fm; % (=100KHz) sampling frequency (where 1000 is the upsampling factor) t=0:1/fs:1; % sampling rate of (1/fs = 100 kHz) m=1*cos(2*pi*fm*t); % Message signal with period 2*pi*fm (sinusoidal wave signal) c=0.5*square(2*pi*fc*t)+0.5; % square wave with period 2*pi*fc s=m.*c; % modulated signal (multiplication of element by element) subplot(4,1,1); plot(t,m); title('Message signal'); xlabel ('Time'); ylabel('Amplitude'); subplot(4,1,2); plot(t,c); title('Carrier signal'); xlabel('Time'); ylabel('Amplitu...

Channel Impulse Response (CIR)

Channel Impulse Response (CIR) 📘 Overview & Theory 📘 How does the channel impulse response affect the signal? 🧮 MATLAB Codes 📚 Further Reading Wireless Signal Processing CIR, Doppler Shift & Gaussian Random Variable  The Channel Impulse Response (CIR) is a concept primarily used in the field of telecommunications and signal processing. It provides information about how a communication channel responds to an impulse signal.   What is the Channel Impulse Response (CIR) ? It describes the behavior of a communication channel in response to an impulse signal. In signal processing,  an impulse signal has zero amplitude at all other times and amplitude  ∞ at time 0 for the signal. Using a Dirac Delta function, we can approximate this.  ...(i) δ( t) now has a very intriguing characteristic. The answer is 1 when the Fourier Transform of  δ( t) is calculated. As a result, all frequencies ar...

MATLAB code for Pulse Code Modulation (PCM) and Demodulation

📘 Overview & Theory 🧮 Quantization in Pulse Code Modulation (PCM) 🧮 MATLAB Code for Pulse Code Modulation (PCM) 🧮 MATLAB Code for Pulse Amplitude Modulation and Demodulation of Digital data 🧮 Other Pulse Modulation Techniques (e.g., PWM, PPM, DM, and PCM) 📚 Further Reading MATLAB Code for Pulse Code Modulation clc; close all; clear all; fm=input('Enter the message frequency (in Hz): '); fs=input('Enter the sampling frequency (in Hz): '); L=input('Enter the number of the quantization levels: '); n = log2(L); t=0:1/fs:1; % fs nuber of samples have tobe selected s=8*sin(2*pi*fm*t); subplot(3,1,1); t=0:1/(length(s)-1):1; plot(t,s); title('Analog Signal'); ylabel('Amplitude--->'); xlabel('Time--->'); subplot(3,1,2); stem(t,s);grid on; title('Sampled Sinal'); ylabel('Amplitude--->'); xlabel('Time--->'); % Quantization Process vmax=8; vmin=-vmax; %to quanti...