Impact-Site-Verification: dbe48ff9-4514-40fe-8cc0-70131430799e

Search This Blog

Investigation the generation, transmission and reception of the OFDM signal without channel noise or HPA effect

%==========================================================================

% The mfile investigates the generation, transmission and reception of

% the OFDM signal without channel noise or HPA effect

%==========================================================================

clear all

clc

close 

%   ---------------

%   A: Setting Parameters

%   ---------------

M = 4;                          %   QPSK signal constellation

no_of_data_points = 64;        %   have 64 data points

block_size = 8;                 %   size of each ofdm block

cp_len = ceil(0.1*block_size);  %   length of cyclic prefix

no_of_ifft_points = block_size;           %   8 points for the FFT/IFFT

no_of_fft_points = block_size;

%   ---------------------------------------------

%   B:  %   +++++   TRANSMITTER    +++++

%   ---------------------------------------------

%   1.  Generate 1 x 64 vector of data points phase representations

data_source = randsrc(1, no_of_data_points, 0:M-1);

figure(1)

stem(data_source); grid on; xlabel('data points'); ylabel('transmitted data phase representation')

title('Transmitted Data "O"')

%   2.  Perform QPSK modulation

qpsk_modulated_data = pskmod(data_source, M);

scatterplot(qpsk_modulated_data);title('qpsk modulated transmitted data')

%   3.  Do IFFT on each block

%   Make the serial stream a matrix where each column represents a pre-OFDM

%   block (w/o cyclic prefixing)

%   First: Find out the number of colums that will exist after reshaping

num_cols=length(qpsk_modulated_data)/block_size;

data_matrix = reshape(qpsk_modulated_data, block_size, num_cols);

 

%   Second: Create empty matix to put the IFFT'd data

cp_start = block_size-cp_len;

cp_end = block_size;

 

%   Third: Operate columnwise & do CP

for i=1:num_cols,

    ifft_data_matrix(:,i) = ifft((data_matrix(:,i)),no_of_ifft_points);

    %   Compute and append Cyclic Prefix

    for j=1:cp_len,

       actual_cp(j,i) = ifft_data_matrix(j+cp_start,i);

    end

    %   Append the CP to the existing block to create the actual OFDM block

    ifft_data(:,i) = vertcat(actual_cp(:,i),ifft_data_matrix(:,i));

end

 

%   4.  Convert to serial stream for transmission

[rows_ifft_data cols_ifft_data]=size(ifft_data);

len_ofdm_data = rows_ifft_data*cols_ifft_data;

 

%   Actual OFDM signal to be transmitted

ofdm_signal = reshape(ifft_data, 1, len_ofdm_data);

figure(3)

plot(real(ofdm_signal)); xlabel('Time'); ylabel('Amplitude');

title('OFDM Signal');grid on;

%   ------------------------------------------

%   %   +++++   RECEIVER    +++++

%   ------------------------------------------

 

%   1.  Pass the ofdm signal through the channel

recvd_signal = ofdm_signal;

 

%   4.  Convert Data back to "parallel" form to perform FFT

recvd_signal_matrix = reshape(recvd_signal,rows_ifft_data, cols_ifft_data);

 

%   5.  Remove CP

recvd_signal_matrix(1:cp_len,:)=[];

 

%   6.  Perform FFT

for i=1:cols_ifft_data,

    %   FFT

    fft_data_matrix(:,i) = fft(recvd_signal_matrix(:,i),no_of_fft_points);

end

 

%   7.  Convert to serial stream

recvd_serial_data = reshape(fft_data_matrix, 1,(block_size*num_cols));

 

%   8.  Demodulate the data

qpsk_demodulated_data = pskdemod(recvd_serial_data,M);

scatterplot(qpsk_modulated_data);title('qpsk modulated received data')

 

figure(5)

stem(qpsk_demodulated_data,'rx');

grid on;xlabel('data points');ylabel('received data phase representation');title('Received Data "X"')  

 

Free Certification: MATLAB Free Courses

 









 



Join us on Telegram: https://t.me/matlabcastor

No comments

Popular Posts

Followers