Hi Jordan. I watched your video about implementing OFDM in Matlab. However I'm getting some errors in the reshaping of the image, I'm getting BERs of 30% and 50% from the same parameters you use in your video, could you help me out? I don't know why the code is failing
Nice work actually I'm working on a project where I have to design OFDM based Tx and Rx could you please send me the code it would be very helpful in my project
Hello Jordan could you please share the code??? It will be really helpful, I ran this code but I am getting the BER=0.22, don't know why? whereas you showed in the video BER=.098. could you please help me? thanks
I'm working on a project where I have to design Analysis of SNR Metrics for a Typical Underwater Acoustic OFDM System. Could you please send me the code it would be very helpful in my project
hey jordan. i'm facing issue with knnsearch function at symbol demodulation section Error says:"Error using imag Not enough input arugment". Have any idea how I can fix that.
Please help me if you can with the questions below, if its not possible, can you indicate who /where could help me? About OFDM ( to LTE 4 G) 1- bandwidth allocated to each carrier and carrier amount allocated to each user ;2- number of subcarriers per carrier and quantity of points of IFFT / FFT multiplexing ;3 subcarriers to the reference ( synchronization , AGC , equalizing , etc. );4 subcarriers unsigned (to avoid interference between adjacent carriers ) ;5- sampling frequency of the modulated carrier ;6- type convolutional code (FEC );7-kinds modulation ( BPSK , QPSK , QAM) ;8- scrambling ;9- equalization algorithm ;10- estimation algorithm for signal demodulation ; (ctoledonunes@hotmail.com)
Hello, congratulations, nice video. After constellation mapper, the phasors into the IFFT block, but the IFFT is a sum. How can the output be parallel?
He does! But only one pilot in the frequency domain for the first OFDM symbol block, see line 125. He assumes the first n_fft symbols of the image are known to the receiver.
Nice video! Can I ask what method was used to remove the cyclic prefix at the receiver side? At the receiver side ----- not on the transmitter side. Thanks!
Great presentation! Looking at the matlab code, Why is the AWGN added before the channel convolution? In a typical model, the signal should 1st pass through a channel and only then an AWGN is added.
here is the code !! :) enjoy
clear all
close all
clc
%% simulation parameters
%modulation method: BPSK, QPSK, SPSK, 16QAM, 32QAM, 64QAM
mod_method = 'QPSK';
% IFFT/FFT size
n_fft = 64;
%size of cyclic prefix extension
n_cpe = 16;
%target SNR (dB)
snr = 20;
%number of channel taps (1 == no channel)
n_taps = 8;
%channel estimation method: none, LS
ch_est_method = 'LS';
%option to save plot to file
save_file = 0;
%calculate modulation order from modulation method
mod_methods = {'BPSK', 'QPSK', '8PSK', '16QAM', '32QAM', '64QAM'};
mod_order = find (ismember (mod_methods, mod_method));
%% input data do binary stream
im = imread('baboon.bmp');
im_bin = dec2bin(im(:))';
im_bin = im_bin(:);
%% binary stream to symbols
%parse binary stream into mod_order bit symbols
%pads input signal to appropriate length
sym_rem = mod( mod_order-mod( length( im_bin), mod_order), mod_order);
padding = repmat ( '0', sym_rem, 1);
im_bin_padded = [im_bin; padding];
cons_data = reshape( im_bin_padded, mod_order, length(im_bin_padded)/mod_order)';
cons_sym_id = bin2dec(cons_data);
%% symbol modulation
%BPSK
if mod_order == 1
mod_ind = 2^(mod_order-1);
n = 0:pi/mod_ind:2*pi-pi/mod_ind;
in_phase = cos(n);
quadrature = sin(n);
symbol_book = (in_phase + quadrature*1i)';
end
%phase shift keying about unit circle
if mod_order == 2 || mod_order == 3
mod_ind = 2^(mod_order-1);
n = 0: pi/mod_ind: 2*pi-pi/mod_ind;
in_phase = cos(n+pi/4);
quadrature = sin(n+pi/4);
symbol_book = (in_phase + quadrature*1i)';
end
%16QAM, 64QAM modulation
if mod_order == 4 || mod_order == 64
mod_ind = sqrt(2^mod_order);
in_phase = repmat(linspace(-1, 1, mod_ind), mod_ind, 1);
quadrature = repmat(linspace(-1, 1, mod_ind)', 1, mod_ind);
symbol_book = in_phase(:) + quadrature(:)*1i;
end
%32QAM modulation
%generates 6x6 constellation and removes corners
if mod_order == 5
mod_ind = 6;
in_phase = repmat(linspace(-1, 1, mod_ind), mod_ind, 1);
quadrature = repmat(linspace(-1, 1, mod_ind)', 1, mod_ind);
symbol_book = in_phase(:) + quadrature(:)*1i;
symbol_book = symbol_book([2:5 7:30 32:35]);
end
%modulate data according to symbol_book
X = symbol_book(cons_sym_id+1);
%% use IFFT to move to time domain
%pad input signal to appropriate length
fft_rem = mod(n_fft-mod(length(X), n_fft), n_fft);
X_padded = [X; zeros(fft_rem,1)];
X_blocks = reshape(X_padded, n_fft, length(X_padded)/n_fft);
x = ifft(X_blocks);
%add cyclic prefix extension and shift from parallel to serial
x_cpe = [x(end-n_cpe+1:end,:);x];
x_s = x_cpe(:);
%add AWGN
%calculate data power
data_pwr = mean(abs(x_s.^2));
%add noise to channel
noise_pwr = data_pwr/10^(snr/10);
noise = normrnd(0,sqrt(noise_pwr/2),size(x_s)) + normrnd(0, sqrt(noise_pwr/2), size(x_s))*1i;
x_s_noise = x_s + noise;
%measure SNR
snr_meas = 10*log10(mean(abs(x_s.^2))/mean(abs(noise.^2)));
%% apply fading channel
g = exp(-(0:n_taps-1));
g = g/norm(g);
x_s_noise_fading = conv(x_s_noise, g, 'same');
%% use fft to move to frequency domain
%remove cyclic prefix extension and shift from serial to parallel
x_p = reshape(x_s_noise_fading, n_fft+n_cpe, length(x_s_noise_fading)/(n_fft+n_cpe));
x_p_cpr = x_p(n_cpe + 1:end,:);
%move to frequency domain
X_hat_blocks = fft(x_p_cpr);
%% estimate channel
if n_taps > 1
switch(ch_est_method)
case 'none'
case 'LS'
G = X_hat_blocks(:,1)./X_blocks(:,1);
X_hat_blocks = X_hat_blocks./repmat(G,1,size(X_hat_blocks,2));
end
end
%% symbol demodulation
%remove fft padding
X_hat = X_hat_blocks(:);
X_hat = X_hat(1:end-fft_rem);
%recover data from modulated symbols
rec_syms = knnsearch([real(symbol_book) imag(symbol_book)], [real(X_hat) imag(X_hat)]) - 1;
%parse to binary stream & remove symbol padding
rec_syms_cons = dec2bin(rec_syms);
rec_im_bin = reshape(rec_syms_cons', numel(rec_syms_cons),1);
rec_im_bin = rec_im_bin(1:end-sym_rem);
ber = sum(abs(rec_im_bin - im_bin))/length(im_bin);
%% recover image
rec_im = reshape(rec_im_bin,8, numel(rec_im_bin)/8);
rec_im = uint8(bin2dec(rec_im'));
rec_im = reshape(rec_im,size(im));
%% generate plots
%transmit constellation
subplot(2,2,1);
plot(X, 'x', 'linewidth', 2, 'markersize', 10);
xlim([-2 2]);
ylim([-2 2]);
xlabel('In Phase');
ylabel('Quadrature');
if n_taps > 1
title(sprintf('Poslani konstelacijski dijagram
\
m%s Modulacija
Multipath Channel Taps: %d', mod_method, n_taps));
else
title(sprintf('Poslani konstelacijski dijagram
\
m%s Modulacija', mod_method));
end
grid on;
%recovered constellation
subplot(2,2,2);
plot(X_hat(1:500:end),'x','markersize',3);
xlim([-2 2]);
ylim([-2 2]);
xlabel('In Phase');
ylabel('Quadrature');
if n_taps > 1
title(sprintf('Primljeni konstelacijski dijagram
\
mMeasured SNR: %.2f db
Channel Estimation: %s', snr_meas, ch_est_method));
else
title(sprintf('bfPrimljeni konstelacijski dijagram
\
mMeasured SNR: %.2f dB', snr_meas));
end
grid on;
%original image
subplot(2,2,3);
imshow(im);
title('\bfPoslana slika');
%recovered image
subplot(2,2,4);
imshow(rec_im);
title(sprintf('\\bfOporavljena slika
\
mBER: %.2g', ber));
%position figure
%set(gcf,'Position',[680 287 698 691]);
%save figure
if save_file
print(sprintf('Plots/%s_%.0ffft_%.0fcpe_%0fdB_%.0ftaps_%s',mod_method, n_fft, n_cpe, snr, n_taps, ch_est_method), '-dmeta');
end
Very very nice job! You talk clearly and you kept things easy to understand.
Category is Comedy? It's a tad dry standup performance for my taste, but I learned a lot!
Great video!
perfect. could you you help me with the that code please?
Hi Jordan. I watched your video about implementing OFDM in Matlab. However I'm getting some errors in the reshaping of the image, I'm getting BERs of 30% and 50% from the same parameters you use in your video, could you help me out? I don't know why the code is failing
am trying to do this on same boaed in gnu radio any help is appreciated
Great presentation. Is the code available somewhere? thx.
link for the code
kr.mathworks.com/matlabcentral/fileexchange/67156-ofdm-channel-estimation-in-matlab
can be used this script in digital fm IBOC? with WB=200 khz and df=19 KHZ
Line 146 you need to write rec_im = uint8(bin2dec(num2str(rec_im')));
Otherwise error will come
THANKS VERY NICE I want PDF FILE
Nice work actually I'm working on a project where I have to design OFDM based Tx and Rx could you please send me the code it would be very helpful in my project
mail id lijingvarghese@gmail.com
Hello Jordan could you please share the code???
It will be really helpful, I ran this code but I am getting the BER=0.22, don't know why? whereas you showed in the video BER=.098. could you please help me? thanks
I'm working on a project where I have to design Analysis of SNR Metrics for a Typical
Underwater Acoustic OFDM System. Could you please send me the code it would be very helpful in my project
hey jordan. i'm facing issue with knnsearch function at symbol demodulation section Error says:"Error using imag Not enough input arugment". Have any idea how I can fix that.
Great!!!
Alguem conseguiu o codigo?
Congratulation Jordan.I loved your exploration. Can you help me I have some doubts?
+Claudia Toledo (ctoledonunes@hotmail.com)
Please help me if you can with the questions below, if its not possible,
can you indicate who /where could help me?
About OFDM ( to LTE 4 G)
1- bandwidth allocated to each carrier and carrier amount allocated to each user ;2- number of subcarriers per carrier and quantity of points of IFFT / FFT multiplexing ;3 subcarriers to the reference ( synchronization , AGC , equalizing , etc. );4 subcarriers unsigned (to avoid interference between adjacent carriers ) ;5- sampling frequency of the modulated carrier ;6- type convolutional code (FEC );7-kinds modulation ( BPSK , QPSK , QAM) ;8- scrambling ;9- equalization algorithm ;10- estimation algorithm for signal demodulation ;
(ctoledonunes@hotmail.com)
can you plese send me your code , fyi my email (hamid20101995@gmail.com) and thank you
Bro if u still get notifications . It would be of great help if you could provide me with the code
Your tutorial is very helpful. I am interesting could you send me the MATLAB code please
youeng75@gmail.com
me too i'm interesting would you send me the MATLAB code please it's very important for my thesis please : saimbouchra@gmail.com
Hello. You receive the matlab code from Jordan? Thanks
can you plese send me your code, or give me yuor mail
Hi everyone, I didn't receive the code yet.
Hi Jordan,Is it possible to get the code?
Good job. Is the code online?
+potobill yes
+areeb saldin aight. thanks
Hi... where's the code
Hello, could you send me this code ? Appreciate !!
Did you get it?
@@christianruales5519 ha ha
Hello, congratulations, nice video.
After constellation mapper, the phasors into the IFFT block, but the IFFT is a sum. How can the output be parallel?
+Jordan Street
image.slidesharecdn.com/thamkhaoofdm-tutorial-150608094800-lva1-app6891/95/tham-khao-ofdm-tutorial-7-638.jpg?cb=1433756946
cons_sym_id does not work
your video is very interesting can you share with me your Matlab code
Your tutorial is very helpful. can u please send me the matlab code ?
my email- mgarai63@outlook.com
Hi Jordan Street, Thank you for your sharing! Your lecture is very helpful for my project. Would you mind sharing your matlab code with me!
Thanks!
my email is: hungnt515@gmail.com
please could you send me the MATLAB code :)and Thank you
Please i am doing something on vlc and I want to use ofdm .....please can you send me the code ....and any additional information. .Thanks
email is josh.abolade@gmail.com
Hi Joshua Abolade, please can you send me the matlab code? email is smaouiachraf290@gmail.com. thank you
How come he did not use any of the pilot schemes in this project.
He does! But only one pilot in the frequency domain for the first OFDM symbol block, see line 125. He assumes the first n_fft symbols of the image are known to the receiver.
Very good! Is it possible to get the code???
code dede yar bhai hoga :p
I have the code...incase anyone is interested.
please share with me.. irridzuan12@gmail.com
thanks
please share with me bhatmahadev6@gmail.com
can you please send it to kashmirger@gmail.com
please share the code with me rnsiram@gmail.com
send me the code on rlk7772626@gmail.com
Hi can you send me this matlab code? Thanks :)
Elizabeth Butler Sure thing! Thanks for asking, it’s on it’s way!
Did you get the code? can you send it to me as well? jayant.b@somaiya.edu
@@JordanStreet jordan please provide us.code
hey please can you giive the code?
please i study PHD in Cairo and need help from you in matlab my paper can send to me your email please to send to you my problems
I have got an error in reshape function, plz can you help(line 40)
please send code
Nice video! Can I ask what method was used to remove the cyclic prefix at the receiver side? At the receiver side ----- not on the transmitter side. Thanks!
Does someone have the same simulation code for Fbmc help urgent for assignment 🙏🙏
Please i want to lecture , i need it because the Graduation project
Your tutorial is very helpful. can u please send me the matlab code ?
your video is very helpful I am interesting could you send me the MATLAB code please
zdggerp@gmail.com
Since the code is available elsewhere, Why didn't you accept to send it ! what's the problem in sharing the code with others ?
om ar then go get the code from elsewhere :)
i said that because you said "I will not give it since there is a plenty of examples existing"
Great presentation! Looking at the matlab code, Why is the AWGN added before the channel convolution? In a typical model, the signal should 1st pass through a channel and only then an AWGN is added.
I noticed the same issue, so I compared the code to the Yong Soo OFDM book samples and indeed, it is flipped.