Question: do the following matlab code using QPSK instead of BPSK: clc; clear all; close all; training_lenght=10^4;%the length of training data training_data=randi([0,1],1,training_lenght);%generating random training data qpsk=comm.BPSKModulator;%we
do the following matlab code using QPSK instead of BPSK:
clc; clear all; close all;
training_lenght=10^4;%the length of training data
training_data=randi([0,1],1,training_lenght);%generating random training data
qpsk=comm.BPSKModulator;%we used bpsk modulation
training_data=transpose(training_data);%transposed the data because qpsk takes a vertical matrix
training_data=qpsk(training_data);
training_data=transpose(training_data);%transposed it back to its original shape
h=[0.74 -0.514 0.37];%we chose a three tap channel
chan_len=length(h);
P=sum(abs(training_data).^2)/training_lenght;
snr=db2pow(10);
var=P/snr;
n=sqrt(var).*randn(1,training_lenght+2);%generated a random noise
y=conv(h,training_data)+n;%going through the channel
equalizer_length=30;
equalizer=zeros(1,equalizer_length);
Rvv0=(training_data*training_data')/(training_lenght+chan_len-1);%the power of the equalizer input, the output of the channel
max_step=2/(equalizer_length*Rvv0);%step size must be between this value and 0
step_size=max_step*0.0125;%I choose step size arbitrarily
for i1=1:training_lenght-equalizer_length+1
equalizer_ip = fliplr(y(i1:i1+equalizer_length-1));%equalizer input
error = training_data(i1+equalizer_length-1)- equalizer*equalizer_ip.';% instantaneous error
equalizer = equalizer + step_size*error*equalizer_ip;
end
message_length=10^5;
message=randi([0,1],1,message_length);%generating random data to transmit
message2=transpose(message);
mod_message=qpsk(message2);
mod_message=transpose(mod_message);
P=sum(abs(mod_message).^2)/length(mod_message);
var=P/snr;
n=sqrt(var).*randn(1,message_length+2);%generated a random noise
channel_output=conv(h,mod_message)+n;
equalizer_output=conv(equalizer,channel_output);
equalizer_output=equalizer_output(1:message_length);
qpskdemod = comm.BPSKDemodulator;
equalizer_output=transpose(equalizer_output);
y= qpskdemod(equalizer_output);
y=transpose(y);
BER=0;
for i=1:message_length
if y(i) ~= message(i)
BER=BER+1;
end
end
BER=BER/message_length;
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
