A] Description of the transmission scheme Assume a baseband transmission scheme
ID: 2085203 • Letter: A
Question
A] Description of the transmission scheme
Assume a baseband transmission scheme that sends a stream of binary rectangular pulses of height A = ±1 V (assume that the positive pulse represents a binary 1 and the negative pulse represents a binary 0). This is the polar or antipodal signaling. The transmitted signal is contaminated by additive noise (the noise is added to the signal). For the detection scheme, we will assume that the noise has zero mean. The noise process you will generate will have a nonzero mean. However, you will use the mean and variance estimators to determine an estimate of the mean and the variance using the generated noise with no signal transmitted (see the D section of module 8). You will then subtract the estimated mean from the noise process rendering it zero-mean (approximately). You will then use a detector to decide whether a 0 or a 1 was transmitted over a string of bits whose length will be specified the same for everybody. You will compare the received string and the transmitted string to determine the number of errors thereby allowing you to determine an estimate of the average probability of error. The transmitted string will be made of as many 0s as 1s if we assume that the a-priori probability of a 1 or a 0 is 1/2. If the a-priori probability of a 0 is 0.3, then out of 10 bits, 3 of them will be 0s. These numbers may make sense only if the string is very long but we will work with these given parameters.
B] Description of the simulation
Part 1
Learn to generate a Gaussian random variable, and a Laplacian random variable. For the Laplace density function, use information wherever you can find it (example, the Matlab Central website gives an example for the Laplace RV, http://www.mathworks.com/matlabcentral/fileexchange/13705-laplacian-random-number-generator
where the download button is on the top right location. I would like you to run a histogram to show that it has a valid Laplacian density function. Choose a = 0 (zero mean) so that it corresponds to our requirement, and also makes it easier to plot (easy symmetry).
Part 2
Transmit the sequence using the following cases:
Gaussian noise (variance 0.1 and 1) and use two comparators: the first one will compare one single sample to 0, and the second one where you will compare the average of 100 samples (assumed to have been taken within the bit interval) and compare to 0 again. If greater than 0, the bit should have been 1 and 0 otherwise. The comparison will be repeated for the case of unequal probability and the same threshold 0 (which may not be optimum). Compile your results and comment.
Laplacian noise (variance 0.1 and 1) is to be the underlying contamination. Repeat the process. Note that the detector will not be optimum in this case regardless of equal or unequal probabilities.
The sequences you will be working with are
Equal probabilities: 10001100010111101001
Unequal probabilities: 10001000011000001001
Explanation / Answer
Part 1 related figure is generated for laplacian density function using program 2.
Part2 : Gaussian noise case: Number of bit error for given data is around 3.15 for both equal and unequal probabilities when the variance 1. The number of bit generated using equal probability distribution and unequal probability distribution is very less. We do not find any difference for the given data.
Number of bit error for given data is 0 when we sample the data 100 times for both equal and unequal probabilities. It is due to averaging. While averaging, the noise is cancelled because the mean value of noise is zero.
Laplacian noise case: Number of bit error for given data is around 2.45 for both equal and unequal probability data when variance is 1. The error is less compared to Gaussian noise because the density of laplacian noise variable falls sharply when we move away from mean.
Similarly, the number of bit error is 0 when we sample 100 times for both equal and unequal probability data when variance is 0.1.
Demarkation line separates individual MATLAB programs and the program list is as follows:
1) Generation of gaussian noise data and plot its density function using histogram
2) Generation of laplacian noise data and plot its density function using histogram
3) Calculation of bit error for gaussian noise zero mean and variance = 1 with equal probability data
4) Calculation of bit error for gaussian noise zero mean and variance = 0.1 with equal probability data
5) Calculation of bit error for laplacian noise zero mean and variance = 1 with equal probability data
6) Calculation of bit error for laplacian noise zero mean and variance = 0.1 with equal probability data
7) Calculation of bit error for gaussian noise zero mean and variance = 1 with unequal probability data
8) Calculation of bit error for gaussian noise zero mean and variance = 0.1 with unequal probability data
9) Calculation of bit error for laplacian noise zero mean and variance = 1 with unequal probability data
10) Calculation of bit error for laplacian noise zero mean and variance = 0.1 with unequal probability data
------------------------------------------------------------------------------------------------------------------
% Generation of gaussian random variable with mean = 0 and variance = 1
% Generate 1 million random points, here variable 'x' has gaussian noise
x = randn(1000000,1);
% Create an 100 bin histogram, cx has number of noisy data and bx has bin center
[cx,bx] = hist(x,100);
% Normalize the count of noisy samples in each bin
cx = cx/1000000;
figure(1),plot(bx,cx,'LineWidth',2)
% Generation of gaussian random variable with mean = 0 and variance = 0.1
% Generate 1 million random points
x = 0.1*randn(1000000,1);
% Create an 100 bin histogram, cx has number of noisy data and bx has bin center
[cx,bx] = hist(x,100);
% Normalize the count of noisy samples in each bin
cx = cx/1000000;
% plotting the variance = 0.1 on the same plot
hold on,plot(bx,cx,'k-','LineWidth',2)
title('Gaussian density function')
legend('Variance = 1','Variance = 0.1')
grid on
-------------------------------------------------------------------------------------------------------------------
% Generation of laplacian random variable with mean = 0 and variance = 1
% Generate 1 million random points, here variable 'x' has gaussian noise
x = laprnd(1000000,1,0,1);
% Create an 100 bin histogram, cx has number of noisy data and bx has bin center
[cx,bx] = hist(x,100);
% Normalize the count of noisy samples in each bin
cx = cx/1000000;
figure(2),plot(bx,cx,'LineWidth',2)
% Generation of laplacian random variable with mean = 0 and variance = 0.1
% Generate 1 million random points
x = laprnd(1000000,1,0,0.1);
% Create an 100 bin histogram, cx has number of noisy data and bx has bin center
[cx,bx] = hist(x,100);
% Normalize the count of noisy samples in each bin
cx = cx/1000000;
% plotting the variance = 0.1 on the same plot
hold on,plot(bx,cx,'k-','LineWidth',2)
title('Laplacian density function')
legend('Variance = 1','Variance = 0.1')
grid on
--------------------------------------------------------------------------------------------------------------------------------
% Equal probability data, gaussian noise variance = 1
data = [1 0 0 0 1 1 0 0 0 1 0 1 1 1 1 0 1 0 0 1];
modulatedData = data;
% Change zeros to -1
i = find(data==0);
for j=1:length(i)
modulatedData(i(j)) = -1;
end
% Only one sample is recorded
numberBitError = 0;
bitErrorRate = 0;
numSamples = size(data,2);
% Run the process for 10000 times
for k=1:10000;
noise = randn(1,numSamples);
receivedData = modulatedData + noise;
recoveredData = [receivedData >= 0];
[num1,rat1] = biterr(data,recoveredData);
numberBitError = numberBitError + num1;
bitErrorRate = bitErrorRate + rat1;
end
avgBitError = numberBitError/10000;
avgBitErrorRate = bitErrorRate/10000;
% When 100 samples are recorded
for k=1:numSamples
modulatedData100(100*(k-1)+1:100*k) = modulatedData(k);
end
numberBitError100 = 0;
bitErrorRate100 = 0;
numSamples100 = size(modulatedData100,2);
% Run the program for 10000 times
for k=1:10000;
% noise = laprnd(1,numSamples100,0,1);
noise = randn(1,numSamples100);
receivedData100 = modulatedData100 + noise;
% Perform averaging of 100 samples
for j=1:numSamples
receivedData(j) = mean(receivedData100(100*(j-1)+1:100*j));
end
recoveredData = [receivedData >= 0];
[num1,rat1] = biterr(data,recoveredData);
numberBitError100 = numberBitError100 + num1;
bitErrorRate100 = bitErrorRate100 + rat1;
end
avgBitError100 = numberBitError100/10000;
avgBitErrorRate100 = bitErrorRate100/10000;
--------------------------------------------------------------------------------------------------------------
% Equal probability data, gaussian noise variance = 0.1
data = [1 0 0 0 1 1 0 0 0 1 0 1 1 1 1 0 1 0 0 1];
modulatedData = data;
% Change zeros to -1
i = find(data==0);
for j=1:length(i)
modulatedData(i(j)) = -1;
end
% Only one sample is recorded
numberBitError = 0;
bitErrorRate = 0;
numSamples = size(data,2);
% Run the program for 10000 times
for k=1:10000;
noise = 0.1*randn(1,numSamples);
receivedData = modulatedData + noise;
recoveredData = [receivedData >= 0];
[num1,rat1] = biterr(data,recoveredData);
numberBitError = numberBitError + num1;
bitErrorRate = bitErrorRate + rat1;
end
avgBitError = numberBitError/10000;
avgBitErrorRate = bitErrorRate/10000;
% When 100 samples are recorded
for k=1:numSamples
modulatedData100(100*(k-1)+1:100*k) = modulatedData(k);
end
numberBitError100 = 0;
bitErrorRate100 = 0;
numSamples100 = size(modulatedData100,2);
% Run the program for 10000 times
for k=1:10000;
% noise = laprnd(1,numSamples100,0,1);
noise = randn(1,numSamples100);
receivedData100 = modulatedData100 + noise;
% Perform averaging of 100 samples
for j=1:numSamples
receivedData(j) = mean(receivedData100(100*(j-1)+1:100*j));
end
recoveredData = [receivedData >= 0];
[num1,rat1] = biterr(data,recoveredData);
numberBitError100 = numberBitError100 + num1;
bitErrorRate100 = bitErrorRate100 + rat1;
end
avgBitError100 = numberBitError100/10000;
avgBitErrorRate100 = bitErrorRate100/10000;
----------------------------------------------------------------------------------------------
% Equal probability data, laplacian noise variance = 1
data = [1 0 0 0 1 1 0 0 0 1 0 1 1 1 1 0 1 0 0 1];
modulatedData = data;
% Change zeros to -1
i = find(data==0);
for j=1:length(i)
modulatedData(i(j)) = -1;
end
% Only one sample is recorded
numberBitError = 0;
bitErrorRate = 0;
numSamples = size(data,2);
% Run the program for 10000 times
for k=1:10000;
noise = laprnd(1,numSamples,0,1);
receivedData = modulatedData + noise;
recoveredData = [receivedData >= 0];
[num1,rat1] = biterr(data,recoveredData);
numberBitError = numberBitError + num1;
bitErrorRate = bitErrorRate + rat1;
end
avgBitError = numberBitError/10000;
avgBitErrorRate = bitErrorRate/10000;
% When 100 samples are recorded
for k=1:numSamples
modulatedData100(100*(k-1)+1:100*k) = modulatedData(k);
end
numberBitError100 = 0;
bitErrorRate100 = 0;
numSamples100 = size(modulatedData100,2);
% Run the program for 10000 times
for k=1:10000;
% noise = laprnd(1,numSamples100,0,1);
noise = randn(1,numSamples100);
receivedData100 = modulatedData100 + noise;
for j=1:numSamples
receivedData(j) = mean(receivedData100(100*(j-1)+1:100*j));
end
recoveredData = [receivedData >= 0];
[num1,rat1] = biterr(data,recoveredData);
numberBitError100 = numberBitError100 + num1;
bitErrorRate100 = bitErrorRate100 + rat1;
end
avgBitError100 = numberBitError100/10000;
avgBitErrorRate100 = bitErrorRate100/10000;
------------------------------------------------------------------------------------------------------
% Equal probability data, laplacian noise variance = 0.1
data = [1 0 0 0 1 1 0 0 0 1 0 1 1 1 1 0 1 0 0 1];
modulatedData = data;
% Change zeros to -1
i = find(data==0);
for j=1:length(i)
modulatedData(i(j)) = -1;
end
% Only one sample is recorded
numberBitError = 0;
bitErrorRate = 0;
numSamples = size(data,2);
% Run the program for 10000 times
for k=1:10000;
noise = laprnd(1,numSamples,0,0.1);
receivedData = modulatedData + noise;
recoveredData = [receivedData >= 0];
[num1,rat1] = biterr(data,recoveredData);
numberBitError = numberBitError + num1;
bitErrorRate = bitErrorRate + rat1;
end
avgBitError = numberBitError/10000;
avgBitErrorRate = bitErrorRate/10000;
% When 100 samples are recorded
for k=1:numSamples
modulatedData100(100*(k-1)+1:100*k) = modulatedData(k);
end
numberBitError100 = 0;
bitErrorRate100 = 0;
numSamples100 = size(modulatedData100,2);
% Run the program for 10000 times
for k=1:10000;
% noise = laprnd(1,numSamples100,0,1);
noise = randn(1,numSamples100);
receivedData100 = modulatedData100 + noise;
for j=1:numSamples
receivedData(j) = mean(receivedData100(100*(j-1)+1:100*j));
end
recoveredData = [receivedData >= 0];
[num1,rat1] = biterr(data,recoveredData);
numberBitError100 = numberBitError100 + num1;
bitErrorRate100 = bitErrorRate100 + rat1;
end
avgBitError100 = numberBitError100/10000;
avgBitErrorRate100 = bitErrorRate100/10000;
-------------------------------------------------------------------------------------------
% Unequal probability data, gaussian noise variance = 1
data = [1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 1 0 0 1];
modulatedData = data;
% Change zeros to -1
i = find(data==0);
for j=1:length(i)
modulatedData(i(j)) = -1;
end
% Only one sample is recorded
numberBitError = 0;
bitErrorRate = 0;
numSamples = size(data,2);
% Run the process for 10000 times
for k=1:10000;
noise = randn(1,numSamples);
receivedData = modulatedData + noise;
recoveredData = [receivedData >= 0];
[num1,rat1] = biterr(data,recoveredData);
numberBitError = numberBitError + num1;
bitErrorRate = bitErrorRate + rat1;
end
avgBitError = numberBitError/10000;
avgBitErrorRate = bitErrorRate/10000;
% When 100 samples are recorded
for k=1:numSamples
modulatedData100(100*(k-1)+1:100*k) = modulatedData(k);
end
numberBitError100 = 0;
bitErrorRate100 = 0;
numSamples100 = size(modulatedData100,2);
% Run the program for 10000 times
for k=1:10000;
noise = randn(1,numSamples100);
receivedData100 = modulatedData100 + noise;
% Perform averaging of 100 samples
for j=1:numSamples
receivedData(j) = mean(receivedData100(100*(j-1)+1:100*j));
end
recoveredData = [receivedData >= 0];
[num1,rat1] = biterr(data,recoveredData);
numberBitError100 = numberBitError100 + num1;
bitErrorRate100 = bitErrorRate100 + rat1;
end
avgBitError100 = numberBitError100/10000;
avgBitErrorRate100 = bitErrorRate100/10000;
--------------------------------------------------------------------------------------------------------------
% Unequal probability data, gaussian noise variance = 0.1
data = [1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 1 0 0 1];
modulatedData = data;
% Change zeros to -1
i = find(data==0);
for j=1:length(i)
modulatedData(i(j)) = -1;
end
% Only one sample is recorded
numberBitError = 0;
bitErrorRate = 0;
numSamples = size(data,2);
% Run the program for 10000 times
for k=1:10000;
noise = 0.1*randn(1,numSamples);
receivedData = modulatedData + noise;
recoveredData = [receivedData >= 0];
[num1,rat1] = biterr(data,recoveredData);
numberBitError = numberBitError + num1;
bitErrorRate = bitErrorRate + rat1;
end
avgBitError = numberBitError/10000;
avgBitErrorRate = bitErrorRate/10000;
% When 100 samples are recorded
for k=1:numSamples
modulatedData100(100*(k-1)+1:100*k) = modulatedData(k);
end
numberBitError100 = 0;
bitErrorRate100 = 0;
numSamples100 = size(modulatedData100,2);
% Run the program for 10000 times
for k=1:10000;
% noise = laprnd(1,numSamples100,0,1);
noise = randn(1,numSamples100);
receivedData100 = modulatedData100 + noise;
% Perform averaging of 100 samples
for j=1:numSamples
receivedData(j) = mean(receivedData100(100*(j-1)+1:100*j));
end
recoveredData = [receivedData >= 0];
[num1,rat1] = biterr(data,recoveredData);
numberBitError100 = numberBitError100 + num1;
bitErrorRate100 = bitErrorRate100 + rat1;
end
avgBitError100 = numberBitError100/10000;
avgBitErrorRate100 = bitErrorRate100/10000;
----------------------------------------------------------------------------------------------
% Unequal probability data, laplacian noise variance = 1
data = [1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 1 0 0 1];
modulatedData = data;
% Change zeros to -1
i = find(data==0);
for j=1:length(i)
modulatedData(i(j)) = -1;
end
% Only one sample is recorded
numberBitError = 0;
bitErrorRate = 0;
numSamples = size(data,2);
% Run the program for 10000 times
for k=1:10000;
noise = laprnd(1,numSamples,0,1);
receivedData = modulatedData + noise;
recoveredData = [receivedData >= 0];
[num1,rat1] = biterr(data,recoveredData);
numberBitError = numberBitError + num1;
bitErrorRate = bitErrorRate + rat1;
end
avgBitError = numberBitError/10000;
avgBitErrorRate = bitErrorRate/10000;
% When 100 samples are recorded
for k=1:numSamples
modulatedData100(100*(k-1)+1:100*k) = modulatedData(k);
end
numberBitError100 = 0;
bitErrorRate100 = 0;
numSamples100 = size(modulatedData100,2);
% Run the program for 10000 times
for k=1:10000;
% noise = laprnd(1,numSamples100,0,1);
noise = randn(1,numSamples100);
receivedData100 = modulatedData100 + noise;
for j=1:numSamples
receivedData(j) = mean(receivedData100(100*(j-1)+1:100*j));
end
recoveredData = [receivedData >= 0];
[num1,rat1] = biterr(data,recoveredData);
numberBitError100 = numberBitError100 + num1;
bitErrorRate100 = bitErrorRate100 + rat1;
end
avgBitError100 = numberBitError100/10000;
avgBitErrorRate100 = bitErrorRate100/10000;
------------------------------------------------------------------------------------------------------
% Unequal probability data, laplacian noise variance = 0.1
data = [1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 1 0 0 1];
modulatedData = data;
% Change zeros to -1
i = find(data==0);
for j=1:length(i)
modulatedData(i(j)) = -1;
end
% Only one sample is recorded
numberBitError = 0;
bitErrorRate = 0;
numSamples = size(data,2);
% Run the program for 10000 times
for k=1:10000;
noise = laprnd(1,numSamples,0,0.1);
receivedData = modulatedData + noise;
recoveredData = [receivedData >= 0];
[num1,rat1] = biterr(data,recoveredData);
numberBitError = numberBitError + num1;
bitErrorRate = bitErrorRate + rat1;
end
avgBitError = numberBitError/10000;
avgBitErrorRate = bitErrorRate/10000;
% When 100 samples are recorded
for k=1:numSamples
modulatedData100(100*(k-1)+1:100*k) = modulatedData(k);
end
numberBitError100 = 0;
bitErrorRate100 = 0;
numSamples100 = size(modulatedData100,2);
% Run the program for 10000 times
for k=1:10000;
% noise = laprnd(1,numSamples100,0,1);
noise = randn(1,numSamples100);
receivedData100 = modulatedData100 + noise;
for j=1:numSamples
receivedData(j) = mean(receivedData100(100*(j-1)+1:100*j));
end
recoveredData = [receivedData >= 0];
[num1,rat1] = biterr(data,recoveredData);
numberBitError100 = numberBitError100 + num1;
bitErrorRate100 = bitErrorRate100 + rat1;
end
avgBitError100 = numberBitError100/10000;
avgBitErrorRate100 = bitErrorRate100/10000;
-------------------------------------------------------------------------------------------
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.