% case1: AWGN Channel
clear
clc
close all
numSamplesPerSymbol=8;
BitRate = 16000;
BaudRate = BitRate/2;
SymbolDuration = 1/BaudRate;
SamplingFrequency= numSamplesPerSymbol * BaudRate;
nIters = 20;
LogEbN0=[0:10];
lenSIm=length(LogEbN0);
% Symbol Repetition --
hTransmitFilter = ones(1,numSamplesPerSymbol);
hReceiveFilter = hTransmitFilter;
AvBER = zeros(1,lenSIm);
% Symbol Repeitition
for EbN0Index = 1:lenSIm
for iters=1:nIters
%The transmitter
BitStreamLength = 10000;
BitStream = rand(1, BitStreamLength) > 0.5;
[BitStreamOne, BitStreamTwo ] = SerialToParallel( BitStream);
[I_SymbolsTx, Q_SymbolsTx] = DQPSKEncoder(BitStreamOne, BitStreamTwo);
[I_WaveformTx, Q_WaveformTx] = TransmitFilter(I_SymbolsTx, Q_SymbolsTx, ...
hTransmitFilter, numSamplesPerSymbol );
% Power Calculation
EbN0 = 10^( LogEbN0(EbN0Index) / 10);
Eb1=sum(I_WaveformTx .* I_WaveformTx) / BitStreamLength;
Eb2=sum(Q_WaveformTx .* Q_WaveformTx) / BitStreamLength;
N0 = (Eb1+Eb2) / EbN0;
sigma_N0=sqrt(N0);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Channel Transmit %%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% [I_WaveformRx, Q_WaveformRx] = AWGNChannel(I_WaveformTx, Q_WaveformTx, N0);
I_WaveformRx = I_WaveformTx+ sigma_N0;
Q_WaveformRx = Q_WaveformTx + sigma_N0;
[I_SymbolRx, Q_SymbolRx] = Receivefilter(I_WaveformRx, Q_WaveformRx, ...
hReceiveFilter, numSamplesPerSymbol);
[BitStreamOneRx, BitStreamTwoRx] = DQPSKDecoder(I_SymbolRx, Q_SymbolRx);
BitStreamRx = ParallelToStream(BitStreamOneRx, BitStreamTwoRx);
Errors=sum( BitStream ~= BitStreamRx);
BER(iters) = Errors/BitStreamLength;
end
AvBER( EbN0Index ) = sum(BER) / nIters ;
end
semilogy(LogEbN0, AvBER, '*');
grid on
xlabel('Eb/No(dB)');
ylabel('Pe');