% 2 USERS
clear all;
ep=0.1;
EbNo=1:30;
% NS = number of OFDM symbols to transmit
NS = 100;
% modulation = 'qam';
M = 2;
% N = number of carriers in OFDM symbol
N = 52;
% BPS = number of bits per OFDM symbol
BPS = N*log2(M);
% index for carriers in OFDM symbol
% don't use DC component
carriers = (1:104)+2;
% IFFT size
ifftsize = 64;
% Input Bit Stream is normally Distributed
input_bit_stream = sign(randn(1,BPS*NS));
input_bit_stream(input_bit_stream == -1) = 0;
input_bit_stream1 = sign(randn(1,BPS*NS));
input_bit_stream1(input_bit_stream1 == -1) = 0;
% PERFORM SERIAL TO PARALLEL CONVERSION
% work on whole data stream at once
%function y = series2parallel(input_bit_stream,N)
% x = 1:1:10;
% N=2;
L=length(input_bit_stream);
% L1=length(input_bit_stream);
q=floor(L/N);
newvec=zeros(N,q);
% for i=1:q
% newvec(1:N,i)=x((1+(i-1)*N):i*N);
% end
newvec=reshape(input_bit_stream,N,q);
newvec1=reshape(input_bit_stream1,N,q);
y=newvec;
y1=newvec1
parallel_data=newvec;% PERFORM MODULATION
parallel_data1=newvec1;
% using indicated modulation type and M-ary alphabet
%disp(['Modulating with ' modulation ' and ' num2str(M) '-ary Alphabet'])
modulated_data = pskmod(parallel_data,M);
modulated_data1 = pskmod(parallel_data1,M);
%modulated_data = modulate(modem.qammod(M),parallel_data);
%modulated_data = (modulated_data/max(abs(modulated_data)));
% CREATE OFDM SYMBOLS
disp('Transmitting OFDM symbols')
carriers1 = carriers(1:52);
carriers2 = carriers(53:104);
for l=1:length(EbNo)
k = 1;
for n = 1:NS
ofdm_symbol = zeros(1,ifftsize);
ofdm_symbol1 = zeros(1,ifftsize);
% Map modulated data to FFT bins in OFDM symbol
ofdm_symbol(carriers1) = modulated_data(k:k+51);
ofdm_symbol1(carriers2) = modulated_data1(k:k+51);
% Time Signal to transmit
tx_signal = ifft(ofdm_symbol,ifftsize);
tx_signal1 = ifft(ofdm_symbol1,ifftsize);
% DOPPLER SHIFT
tx_signal2=tx_signal+tx_signal1
rx_signal = tx_signal2.*exp((j*pi*ep/ifftsize)*(0:ifftsize-1));
noise = sqrt(1/(2*log2(M)*10^(EbNo(l)/10)))*(randn(1,64)+j*randn(1,64));
rx_signal = rx_signal + noise;
% FFT
received_ofdm = fft(rx_signal, ifftsize);
% Extract data from carriers in OFDM symbol
received_symbols(k:k+51) = received_ofdm(carriers1);
k = k + 52;
end
% PERFROM DEMODULATION
disp('Performing Demodulation')
received_data = pskdemod(received_symbols,M);
%PERFORM PARALLEL TO SERIAL CONVERSION
disp('Performing Parallel to Serial Conversion')
%output_bit_stream = parallel2series(received_data, log2(M));
output_bit_stream = ptsmk(received_data);
output_bit_stream = output_bit_stream';
% CALCULATE BER
disp('Calculating BER ')
BER(l)= sum(xor(input_bit_stream, output_bit_stream))/length(input_bit_stream)
end
semilogy(EbNo, BER(1,:),'bo-','Linewidth',2)
grid on
hold on
clear all% 5 USERS
ep = 0.35;
EbNo=1:30;
% NS = number of OFDM symbols to transmit
NS = 100;
% modulation = 'qam';
M = 2;
% N = number of carriers in OFDM symbol
N = 52;
% BPS = number of bits per OFDM symbol
BPS = N*log2(M);
% index for carriers in OFDM symbol
% don't use DC component
carriers = (1:260)+2;
% IFFT size
ifftsize = 64;
% Input Bit Stream is normally Distributed
input_bit_stream = sign(randn(1,BPS*NS));
input_bit_stream(input_bit_stream == -1) = 0;
input_bit_stream1 = sign(randn(1,BPS*NS));
input_bit_stream1(input_bit_stream1 == -1) = 0;
input_bit_stream2 = sign(randn(1,BPS*NS));
input_bit_stream2(input_bit_stream2 == -1) = 0;
input_bit_stream3 = sign(randn(1,BPS*NS));
input_bit_stream3(input_bit_stream3 == -1) = 0;
input_bit_stream4 = sign(randn(1,BPS*NS));
input_bit_stream4(input_bit_stream4 == -1) = 0;
L=length(input_bit_stream);
q=floor(L/N);
newvec=zeros(N,q);
newvec=reshape(input_bit_stream,N,q);
newvec1=reshape(input_bit_stream1,N,q);
newvec2=reshape(input_bit_stream2,N,q);
newvec3=reshape(input_bit_stream3,N,q);
newvec4=reshape(input_bit_stream4,N,q);
y=newvec;
y1=newvec1
y2=newvec2
y3=newvec3
y4=newvec4
parallel_data=newvec;% PERFORM MODULATION
parallel_data1=newvec1;
parallel_data2=newvec2;
parallel_data3=newvec3;
parallel_data4=newvec4;
modulated_data = pskmod(parallel_data,M);
modulated_data1 = pskmod(parallel_data1,M);
modulated_data2 = pskmod(parallel_data2,M);
modulated_data3 = pskmod(parallel_data3,M);
modulated_data4 = pskmod(parallel_data4,M);
% CREATE OFDM SYMBOLS
disp('Transmitting OFDM symbols')
carriers1= carriers(1:52);
carriers2 = carriers(53:104);
carriers3 = carriers(105:156);
carriers4 = carriers(157:208);
carriers5 = carriers(209:260);
for l=1:length(EbNo)
k = 1;
for n = 1:NS
ofdm_symbol = zeros(1,ifftsize);
ofdm_symbol1 = zeros(1,ifftsize);
ofdm_symbol2 = zeros(1,ifftsize);
ofdm_symbol3 = zeros(1,ifftsize);
ofdm_symbol4 = zeros(1,ifftsize);
% Map modulated data to FFT bins in OFDM symbol
ofdm_symbol(carriers1) = modulated_data(k:k+51);
ofdm_symbol1(carriers2) = modulated_data1(k:k+51);
ofdm_symbol2(carriers3) = modulated_data2(k:k+51);
ofdm_symbol3(carriers4) = modulated_data3(k:k+51);
ofdm_symbol4(carriers5) = modulated_data4(k:k+51);
% Time Signal to transmit
tx_signal = ifft(ofdm_symbol,ifftsize);
tx_signal1 = ifft(ofdm_symbol1,ifftsize);
tx_signal2 = ifft(ofdm_symbol2,ifftsize);
tx_signal3 = ifft(ofdm_symbol3,ifftsize);
tx_signal4 = ifft(ofdm_symbol4,ifftsize);
% DOPPLER SHIFT
tx_signal5=tx_signal+tx_signal1+tx_signal2+tx_signal3+tx_signal4
rx_signal = tx_signal5.*exp((j*pi*ep/ifftsize)*(0:ifftsize-1));
noise = sqrt(1/(2*log2(M)*10^(EbNo(l)/10)))*(randn(1,64)+j*randn(1,64));
rx_signal = rx_signal + noise;
% FFT
received_ofdm = fft(rx_signal, ifftsize);
% Extract data from carriers in OFDM symbol
received_symbols(k:k+51) = received_ofdm(carriers1);
k = k + 52;
end
% PERFROM DEMODULATION
disp('Performing Demodulation')
received_data = pskdemod(received_symbols,M);
%PERFORM PARALLEL TO SERIAL CONVERSION
disp('Performing Parallel to Serial Conversion')
%output_bit_stream = parallel2series(received_data, log2(M));
output_bit_stream = ptsmk(received_data);
output_bit_stream = output_bit_stream';
% CALCULATE BER
disp('Calculating BER ')
BER(l)= sum(xor(input_bit_stream, output_bit_stream))/length(input_bit_stream)
end
semilogy(EbNo, BER(1,:),'cyand-','Linewidth',2)
grid on
hold on
clear all% 15 USERS
ep = 0.45;
EbNo=1:30;
% NS = number of OFDM symbols to transmit
NS = 100;
% modulation = 'qam';
M = 2;
% N = number of carriers in OFDM symbol
N = 52;
% BPS = number of bits per OFDM symbol
BPS = N*log2(M);
% index for carriers in OFDM symbol
% don't use DC component
carriers = (1:780)+2;
% IFFT size
ifftsize = 64;
% Input Bit Stream is normally Distributed
input_bit_stream = sign(randn(1,BPS*NS));
input_bit_stream(input_bit_stream == -1) = 0;
input_bit_stream1 = sign(randn(1,BPS*NS));
input_bit_stream1(input_bit_stream1 == -1) = 0;
input_bit_stream2 = sign(randn(1,BPS*NS));
input_bit_stream2(input_bit_stream2 == -1) = 0;
input_bit_stream3 = sign(randn(1,BPS*NS));
input_bit_stream3(input_bit_stream3 == -1) = 0;
input_bit_stream4 = sign(randn(1,BPS*NS));
input_bit_stream4(input_bit_stream4 == -1) = 0;
input_bit_stream5 = sign(randn(1,BPS*NS));
input_bit_stream5(input_bit_stream5 == -1) = 0;
input_bit_stream6 = sign(randn(1,BPS*NS));
input_bit_stream6(input_bit_stream6 == -1) = 0;
input_bit_stream7 = sign(randn(1,BPS*NS));
input_bit_stream7(input_bit_stream7 == -1) = 0;
input_bit_stream8 = sign(randn(1,BPS*NS));
input_bit_stream8(input_bit_stream8 == -1) = 0;
input_bit_stream9 = sign(randn(1,BPS*NS));
input_bit_stream9(input_bit_stream9 == -1) = 0;
input_bit_stream10= sign(randn(1,BPS*NS));
input_bit_stream10(input_bit_stream10 == -1) = 0;
input_bit_stream11= sign(randn(1,BPS*NS));
input_bit_stream11(input_bit_stream11 == -1) = 0;
input_bit_stream12 = sign(randn(1,BPS*NS));
input_bit_stream12(input_bit_stream12 == -1) = 0;
input_bit_stream13 = sign(randn(1,BPS*NS));
input_bit_stream13(input_bit_stream13 == -1) = 0;
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
OFDM is a frequency-division multiplexing (FDM) scheme used as a digital multi-carrier modulation method. A large number of closely spaced orthogonal sub-carrier signals are used to carry data on several parallel data streams or channels.
资源推荐
资源详情
资源评论
收起资源包目录
OFDMA.rar (1个子文件)
OFDMA.m 14KB
共 1 条
- 1
资源评论
APei
- 粉丝: 60
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功