MATLAB Code
clc;clear;
close all;
% Parameters
fs = 1000; % Sampling frequency
msgLength = 100; % Length of the message
pnLength = 50; % Length of PN sequence
silenceLength = 20; % Length of silence before and after
lagAmount = 50; % Amount of lag (can be negative for lead)
threshold = 0.5; % Threshold for correlation peak detection
% Generate Unique PN Sequences
pnPrefix = 2 * (randi([0, 1], 1, pnLength) - 0.5);
pnPostfix = 2 * (randi([0, 1], 1, pnLength) - 0.5);
% Generate Message
originalMessage = (randi([0, 1], 1, msgLength));
message = 2*originalMessage - 1;
% Construct Dataframe
dataframe = [pnPrefix, message, pnPostfix];
% Introduce Lag or Lead
if lagAmount > 0
%laggedFrame = [zeros(1, lagAmount), dataframe(1:end - lagAmount)];
laggedFrame = [zeros(1, lagAmount), dataframe];
else
laggedFrame = [dataframe(-lagAmount + 1:end), zeros(1, -lagAmount)];
end
% Correlation with PN Sequences
corrPrefix = xcorr(laggedFrame, pnPrefix);
corrPostfix = xcorr(laggedFrame, pnPostfix);
% Normalize Correlation
corrPrefix = corrPrefix / max(corrPrefix);
corrPostfix = corrPostfix / max(corrPostfix);
% Adjust indices to align with laggedFrame
corrLen = length(laggedFrame);
prefixIndices = (1:length(corrPrefix)) - corrLen;
postfixIndices = (1:length(corrPostfix)) - corrLen;
% Detect Peaks in Correlation (Apply Threshold)
prefixPeaks = prefixIndices(corrPrefix > threshold);
postfixPeaks = postfixIndices(corrPostfix > threshold);
% Estimate Start and End of Message
if ~isempty(prefixPeaks)
startMessage = max(1, prefixPeaks(1) + length(pnPrefix));
else
startMessage = -1; % Detection failed
end
if ~isempty(postfixPeaks)
endMessage = min(length(laggedFrame), postfixPeaks(end) - length(pnPostfix) - 1);
else
endMessage = -1; % Detection failed
end
% Retrieve Original Message
if startMessage > 0 && endMessage > 0 && endMessage > startMessage
retrievedMessage = laggedFrame(startMessage+1:endMessage+pnLength+1)>0;
else
retrievedMessage = [];
end
% Display Original Message
disp('Original Message:'), disp(originalMessage);
% Display Results
disp('Retrieved Message:'), disp(retrievedMessage);
% Plot Results
figure;
subplot(3, 1, 1); plot(dataframe); title('Original Dataframe');
subplot(3, 1, 2); plot(laggedFrame); title('Lagged/Lead Dataframe');
subplot(3, 1, 3); plot(corrPrefix, 'b'); hold on; plot(corrPostfix, 'r');
title('Correlation with PN Sequences');
legend('Prefix Correlation', 'Postfix Correlation');
Output
Original Message:
1 0 0 0 1 1 0 1 1 0 0 0 0 1 0 0 1 1 0 1 1 ......
1 0 0 0 1 1 0 1 1 0 0 0 0 1 0 0 1 1 0 1 1 ......
Retrieved Message:
1 0 0 0 1 1 0 1 1 0 0 0 0 1 0 0 1 1 0 1 1 ......
1 0 0 0 1 1 0 1 1 0 0 0 0 1 0 0 1 1 0 1 1 ......
Copy the aforementioned MATLAB Code from here
Further Reading