% Parameters
bitStream = [1 0 1 1 0 1];  % Example bit stream
chipSequence = [1 -1 1 -1]; % Example chip sequence
 
% DSSS Encoding (Spreading)
spreadSignal = dsss_spread(bitStream, chipSequence);
 
% DSSS Decoding (Despreading)
recoveredBits = dsss_despread(spreadSignal, chipSequence);
 
% Display results
disp('Original bit stream:');
disp(bitStream);
disp('Spread signal:');
disp(spreadSignal);
disp('Recovered bit stream:');
disp(recoveredBits);
 
 
% Function for DSSS Spreading(dsss_spread.m)
function spreadSignal = dsss_spread(bitStream, chipSequence)
    numBits = length(bitStream);
    numChips = length(chipSequence);
    spreadSignal = zeros(1, numBits * numChips);
    
    idx = 1;
    for bit = bitStream
        % Encode each bit with the chip sequence
        if bit == 0
            spreadSignal(idx:idx+numChips-1) = -chipSequence;
        else
            spreadSignal(idx:idx+numChips-1) = chipSequence;
        end
        idx = idx + numChips;
    end
end

% Function for DSSS Despreading(dsss_despread.m)
function recoveredBits = dsss_despread(spreadSignal, chipSequence)
    numChips = length(chipSequence);
    numBits = length(spreadSignal) / numChips;
    recoveredBits = zeros(1, numBits);
    
    for i = 1:numBits
        % Extract the corresponding chips
        chipValues = spreadSignal((i-1)*numChips + :i*numChips);
        
        % Perform correlation with the chip sequence
        correlation = dot(chipValues, chipSequence);
        
        % Decision logic based on correlation
        if correlation > 0
            recoveredBits(i) = 1;
        else
            recoveredBits(i) = 0;
        end
    end
end