Challenge

Project 2

1.Ans:

OFDM Simulation System

clc;
close all;
clear all;

N = 64; %No of Symbols
Q = 1; %No of RF Chain or antennas, both on Tx & Rx
M = 4; %QAM Order
c_snr = 0;
for SNR = 0:5:15
SNR
c_snr = c_snr + 1;
user_data_symbols = randi(M,Q,N)-1;
qam_data = qammod(user_data_symbols,M);

CP_size = 16;
G_matrix = zeros(Q,CP_size);

bt_blocked_fdomain = [qam_data G_matrix];
bt_blocked_tdomain = zeros(size(bt_blocked_fdomain));

for k= 1:Q
bt_blocked_tdomain(k,CP_size+1:end) = ifft(bt_blocked_fdomain(k,1:N),N);
bt_blocked_tdomain(k,1:CP_size) = bt_blocked_tdomain(k,end-CP_size+1:end);
end

K = 1.38e-23;
T = 290;
B = 20e6;
Np = 10*log10(K*T*B);
Sp = SNR + Np + 30 + 30;

Noise_samples = wgn(Q,N+CP_size,Np,'Complex');

hi = randn(1,3) + j*randn(1,3);
pdp = [1 0.01 0.001];

hi_normalized = pdp.*hi/max(hi);

br = filter(hi_normalized,1,bt_blocked_tdomain);

sig_plus_noise = 10^(Sp/10)*bt_blocked_tdomain + Noise_samples;

sig_dropped_CP = sig_plus_noise(1:Q,CP_size+1:end);

chan_est = fft(hi_normalized,N);

sig_fdomain = zeros(Q,N);

for k=1:Q
sig_fdomain(k,:) = fft(sig_dropped_CP(k,1:N),N)./chan_est;
end

recovered_samples = qamdemod(sig_fdomain,M);
bit_error_rate(c_snr) = biterr(user_data_symbols,recovered_samples);
end
figure(1);
semilogy(0:5:15, bit_error_rate/(Q*N*sqrt(M))); grid on;
xlabel('SNR in db'); ylabel('BER');

figure(2);
scatterplot(reshape(sig_fdomain,1,Q*N));
%surf(abs(sig_plus_noise));
%xlabel('Time Samples'); ylabel('RF Chain');

2.Ans:

MIMO-OFDM Simulation

clc;
close all;
clear all;

N = 1024; %No of Symbols
Q = 4; %No of RF Chain or antennas, both on Tx & Rx
M = 4; %QAM Order
c_snr = 0;
for SNR = 0:5:100
SNR
c_snr = c_snr + 1;
user_data_symbols = randi(M,Q,N)-1;
qam_data = qammod(user_data_symbols,M);

CP_size = 20;
G_matrix = zeros(Q,CP_size);

bt_blocked_fdomain = [qam_data G_matrix];
bt_blocked_tdomain = zeros(size(bt_blocked_fdomain));

for k= 1:Q
bt_blocked_tdomain(k,CP_size+1:end) = ifft(bt_blocked_fdomain(k,1:N),N);
bt_blocked_tdomain(k,1:CP_size) = bt_blocked_tdomain(k,end-CP_size+1:end);
end

K = 1.38e-23;
T = 290;
B = 20e6;
Np = 10*log10(K*T*B);
Sp = SNR + Np + 30 + 30;

Noise_samples = wgn(Q,N+CP_size,Np);

sig_plus_noise = 10^(Sp/10)*bt_blocked_tdomain + Noise_samples;

sig_dropped_CP = sig_plus_noise(1:Q,CP_size+1:end);

sig_fdomain = zeros(Q,N);

for k=1:Q
sig_fdomain(k,:) = fft(sig_dropped_CP(k,1:N),N);
end

recovered_samples = qamdemod(sig_fdomain,M);
bit_error_rate(c_snr) = biterr(user_data_symbols,recovered_samples);
end
figure;
semilogy(0:5:100, bit_error_rate/(Q*N*2)); grid on;
xlabel('SNR in db'); ylabel('BER');

figure;
surf(abs(sig_plus_noise));
xlabel('Time Samples'); ylabel('RF Chain');

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.