Vous êtes sur la page 1sur 9

clear all clc close % % M = 4,n=511,m=9 no_of_data_points =493; block_size = 7; cp_len = ceil(0.

1*block_size); no_of_ifft_points = block_size; no_of_fft_points = block_size; % % QPSK signal constellation have 256 data points size of each ofdm block length of cyclic prefix 8 points for the FFT/IFFT % --------------------------------------------% ++ % --------------------------------------------% Generate random data points data_source = randsrc(1, no_of_data_points, 0:1); subplot(3,2,1); stem(data_source); xlabel('Data Points'); ylabel('Amplitude') title('Transmitted Data') % creation of galois field and rs encoding msg1=gf(data_source,m); code1=rsenc(msg1,n,no_of_data_points); w=double(code1.x); h=w(1:no_of_data_points); d=[h zeros(1,18)]; +++++ TRANSMITTER +++ --------------Setting Parameters ---------------

% % % %

Perform QPSK modulation

qpsk_modulated_data = pskmod(d,4); % % Do IFFT on each block cyclic prefixing

num_cols=length(qpsk_modulated_data)/block_size; data_matrix = reshape(qpsk_modulated_data, block_size, num_cols); % Create empty matix to put the IFFT'd data

cp_start = block_size-cp_len; cp_end = block_size; % 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 % 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); subplot(3,2,2); plot(real(ofdm_signal)); xlabel('Time'); ylabel('Amplitude'); title('OFDM Signal');

%------------------GENERATION OF PN SEQUENCE----------G=8; % Code length sd1 =[0 0 0 0 1]; PN1=[]; for j=1:G PN1=[PN1 sd1(5)]; if sd1(1)==sd1(4) temp1=0; else temp1=1; end sd1(1)=sd1(2); sd1(2)=sd1(3); sd1(3)=sd1(4); sd1(4)=sd1(5); sd1(5)=temp1; end subplot(3,2,3); stem(PN1) title('PN sequence')

% -------------------------------% Estimation +++++ % -------------------------------% Create a random channel +++++ CHANNEL

channel = randn(1,block_size) + sqrt(-1)*randn(1,block_size); channel = [1 1 1 0 0 0 0 0];%[1,randint(1,7)]%[1 1 1 0 0 0 1 1]% subplot(3,2,4); stem(channel);

title('channel'); pn_only_otpt=conv(channel,PN1);

estimated_channel=deconv(pn_only_otpt,PN1); subplot(3,2,5); stem(estimated_channel); title('estimated channel'); % -----------------------------------------% +++++ % -----------------------------------------awgn_noise=awgn(ofdm_signal,15); tran_noisy_signal=ofdm_signal+awgn_noise; channel_op=conv(channel,tran_noisy_signal); +++++ RECEIVER

recvd_noise_free_signal=deconv(channel_op,estimated_channel);

% Convert Data back to "parallel" form to perform FFT recvd_signal_matrix = reshape(recvd_noise_free_signal,rows_ifft_data, cols_ifft_data); % Remove CP recvd_signal_matrix(1:cp_len,:)=[]; % Perform FFT for i=1:cols_ifft_data, % FFT fft_data_matrix(:,i) = fft(recvd_signal_matrix(:,i),no_of_fft_points); end % Convert to serial stream recvd_serial_data = reshape(fft_data_matrix, 1,(block_size*num_cols));

% Demodulate the data qpsk_demodulated_data = pskdemod(recvd_serial_data,M); subplot(3,2,6); stem(qpsk_demodulated_data,'rx'); xlabel('Data Points'); ylabel('Amplitude') title('Recieved Data ') %converting the data again to galois field and rs decoding s=gf(qpsk_demodulated_data,9); g=rsdec(s,n,no_of_data_points); v=double(g.x);

%-----------------------------%--------Further Calculation to find BIT ERROR RATE against increasing SNR----------%------------------------------------% Pass the ofdm signal through the channel for snr=0:1:30 sc=snr+1; awgn_noise=awgn(ofdm_signal,snr); tran_noisy_signal=ofdm_signal+awgn_noise; channel_op=conv(tran_noisy_signal,channel);

recvd_noise_free_signal=deconv(channel_op,estimated_channel);

% Convert Data back to "parallel" form to perform FFT recvd_signal_matrix = reshape(recvd_noise_free_signal,rows_ifft_data, cols_ifft_data); % Remove CP recvd_signal_matrix(1:cp_len,:)=[]; % Perform FFT for i=1:cols_ifft_data, % FFT fft_data_matrix(:,i) = fft(recvd_signal_matrix(:,i),no_of_fft_points); end % Convert to serial stream recvd_serial_data = reshape(fft_data_matrix, 1,(block_size*num_cols)); % Demodulate the data v1 = pskdemod(recvd_serial_data,M); s=gf(v1,9); g=rsdec(s,n,no_of_data_points); v=double(g.x);

asnr(:,sc)=snr; QPSK(:,sc)=ber(data_source,v); end %display(QPSK);

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

%--------------------------------------------------------------------------%----------------------------------------------------------------------%---------------------------------------------------------------------CALCULATION for BPSK-% Perform BPSK modulation

bpsk_modulated_data = pskmod(d,2);

% %

Do IFFT on each block cyclic prefixing

num_cols=length(bpsk_modulated_data)/block_size; data_matrix = reshape(bpsk_modulated_data, block_size, num_cols); % Create empty matix to put the IFFT'd data

cp_start = block_size-cp_len; cp_end = block_size; % 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 % 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);

% Pass the ofdm signal through the channel for snr=0:1:30 sc=snr+1; awgn_noise=awgn(ofdm_signal,snr); tran_noisy_signal=ofdm_signal+awgn_noise; channel_op=conv(tran_noisy_signal,channel);

recvd_noise_free_signal=deconv(channel_op,estimated_channel);

% Convert Data back to "parallel" form to perform FFT recvd_signal_matrix = reshape(recvd_noise_free_signal,rows_ifft_data, cols_ifft_data); % Remove CP recvd_signal_matrix(1:cp_len,:)=[]; % Perform FFT for i=1:cols_ifft_data, % FFT fft_data_matrix(:,i) = fft(recvd_signal_matrix(:,i),no_of_fft_points); end % Convert to serial stream recvd_serial_data = reshape(fft_data_matrix, 1,(block_size*num_cols)); % Demodulate the data bpsk_demodulated_data = pskdemod(recvd_serial_data,2); s=gf(bpsk_demodulated_data,9); g=rsdec(s,n,no_of_data_points); v=double(g.x); asnr(:,sc)=snr; BPSK(:,sc)=ber(data_source,v); end %display(BPSK);

%--------------------------------------------------------------------------%---------------------------------------------------------------------%--------------------------------------------------------------------------%----------------------------------------------------------------------%---------------------------------------------------------------------CALCULATION for Mary PSK--% Perform M-ary PSK modulation

mpsk_modulated_data = pskmod(d,16);

% %

Do IFFT on each block cyclic prefixing

num_cols=length(mpsk_modulated_data)/block_size; data_matrix = reshape(mpsk_modulated_data, block_size, num_cols); % Create empty matix to put the IFFT'd data

cp_start = block_size-cp_len; cp_end = block_size;

% 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 % 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);

% Pass the ofdm signal through the channel for snr=0:1:30 sc=snr+1; awgn_noise=awgn(ofdm_signal,snr); tran_noisy_signal=ofdm_signal+awgn_noise; channel_op=conv(tran_noisy_signal,channel);

recvd_noise_free_signal=deconv(channel_op,estimated_channel);

% Convert Data back to "parallel" form to perform FFT recvd_signal_matrix = reshape(recvd_noise_free_signal,rows_ifft_data, cols_ifft_data); % Remove CP recvd_signal_matrix(1:cp_len,:)=[]; % Perform FFT for i=1:cols_ifft_data, % FFT fft_data_matrix(:,i) = fft(recvd_signal_matrix(:,i),no_of_fft_points); end % Convert to serial stream recvd_serial_data = reshape(fft_data_matrix, 1,(block_size*num_cols)); % Demodulate the data mpsk_demodulated_data = pskdemod(recvd_serial_data,16);

s=gf(mpsk_demodulated_data,9); g=rsdec(s,n,no_of_data_points); v=double(g.x); asnr(:,sc)=snr; MPSK(:,sc)=ber(data_source,v); end % display(MPSK);

%------------------------------------------------------------------------%-------------------------------------------------------------% Perform M-ary PSK modulation

mpsk_modulated_data = pskmod(d,8);

% %

Do IFFT on each block cyclic prefixing

num_cols=length(mpsk_modulated_data)/block_size; data_matrix = reshape(mpsk_modulated_data, block_size, num_cols); % Create empty matix to put the IFFT'd data

cp_start = block_size-cp_len; cp_end = block_size; % 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 % 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);

% Pass the ofdm signal through the channel for snr=0:1:30 sc=snr+1;

awgn_noise=awgn(ofdm_signal,snr); tran_noisy_signal=ofdm_signal+awgn_noise; channel_op=conv(tran_noisy_signal,channel);

recvd_noise_free_signal=deconv(channel_op,estimated_channel);

% Convert Data back to "parallel" form to perform FFT recvd_signal_matrix = reshape(recvd_noise_free_signal,rows_ifft_data, cols_ifft_data); % Remove CP recvd_signal_matrix(1:cp_len,:)=[]; % Perform FFT for i=1:cols_ifft_data, % FFT fft_data_matrix(:,i) = fft(recvd_signal_matrix(:,i),no_of_fft_points); end % Convert to serial stream recvd_serial_data = reshape(fft_data_matrix, 1,(block_size*num_cols)); % Demodulate the data mpsk_demodulated_data = pskdemod(recvd_serial_data,8); s=gf(mpsk_demodulated_data,9); g=rsdec(s,n,no_of_data_points); v=double(g.x); asnr(:,sc)=snr; MMPSK(:,sc)=ber(data_source,v); end %display(MMPSK); %subplot(3,3,7); figure(10); plot(asnr,QPSK,'-r*',asnr,BPSK,':ob',asnr,MPSK,'--+g',asnr,MMPSK,'-..c'); h=legend('QPSK','BPSK','M=16 PSK','M=8 PSK',1); title('BER'); grid on;

This is OFDM transmission,implemented with RSCode.Also compared by digital modulations tech(Bpsk...

Vous aimerez peut-être aussi