📄 ofdm_general.m
字号:
%**********************OFDM PRINCIPLE***********************
clear all
fprintf ('OFDM Analysis Program\n\n');
defaults = input('To use default parameters that indicate the 802.11a solution, input "1", otherwise input "0": ');
%parameter
if defaults == 1
IFFT_bin_length = 128; % IFFT bin count for Tx, FFT bin count for Rx
carrier_count = 48; % number of carriers
bits_per_symbol = 2; % bits per symbol
symbols_per_carrier = 10; % symbols per carrier
SNR = 10; % channel signal to noise ratio (dB)
CP_ratio= 1/4;
rate=6e6;
else
carrier_count = input('carrier count = ');
IFFT_bin_length = input('IFFT bin length(>carrier count) = ');
bits_per_symbol = input('bits per symbol = ');
symbols_per_carrier = input('symbols per carrier =');
CP_ratio = input('input the ratio of CP to DATA: (default: CP_ratio= 1/4)');
SNR = input('SNR = ');
rate=input('input the rate of the OFDM(6M 6e6,24M,24e6) =');
end
time_per_ofdm=(carrier_count*bits_per_symbol)/rate;
bits_tx=floor(rand(carrier_count*symbols_per_carrier,1)*2);
%*******************convolution****************
%1 convolution
constraint_length=7;
trellis=poly2trellis(constraint_length,[133,171]);
bits_code=convenc(bits_tx,trellis);
%卷积输出bits_code 9600*1
%************interleaving****************
%2 interleaving for QPSK parameter
% N_cbps=96;
% N_bpsc=2;
% %reshape
% bits_for_intrv=reshape(bits_code,100,96);
% %intrlv
% for m=1:numloop
% bits_intrv_out_j(m,:)=tx_interleaving(bits_for_intrv(m,:),N_cbps,N_bpsc);
% end
%交织输出intrv_out_j 100*96
%*******************map******************
%parameter
M=2^bits_per_symbol;
%矩阵变换
bits_for_modtmp=reshape(bits_code,bits_per_symbol,(2*carrier_count*symbols_per_carrier/bits_per_symbol))';
bits_for_mod=bi2de(bits_for_modtmp,'left-msb');
%mapping_QPSK
h=modem.pskmod(M,pi/4);
bits_mod=modulate(h,bits_for_mod);
%*****************IFFT************************
bits_ifft_tmp=reshape(bits_mod,(2*carrier_count/bits_per_symbol),symbols_per_carrier);
bits_ifft=ifft(bits_ifft_tmp,IFFT_bin_length);
%figure(1)
%plot(0:IFFT_bin_length-1,bits_ifft(:,1))
%grid on
%ylabel('Amplitude')
%xlabel('Time')
%title('OFDM Time Signal, One Symbol Period')
% %*******************add CP********************
cp_length=ceil(CP_ratio*IFFT_bin_length);
Num_total=cp_length + IFFT_bin_length;000000000
bits_addcp=zeros(Num_total,symbols_per_carrier);
rowprefix=(IFFT_bin_length - cp_length +1):IFFT_bin_length;
bits_addcp=[bits_ifft(rowprefix,:);bits_ifft];
%figure(2)
%plot(0:Num_total-1,bits_addcp(:,1));
%hold on
%x=zeros(1,20)+cp_length-1;
%y=-0.2:(0.4/20):(0.2-0.02);
%plot(x,y,':r')
%hold on
%x=zeros(1,20)+Num_total-cp_length;
%y=-0.2:(0.4/20):(0.2-0.02);
%plot(x,y,':r')
%grid on
%ylabel('Amplitude')
%xlabel('Time')
%title('OFDM Time Signal Added CP, One Symbol Period')
%********************add window*************
for j = 1:symbols_per_carrier
bits_addwindow(:,j) = real(bits_addcp(:,j)) .* hanning(Num_total);
end
%**********************serial to parallize*************************
bits_window=reshape(bits_addwindow,1,Num_total*symbols_per_carrier);
temp_time = Num_total*symbols_per_carrier;
figure (3)
plot(0:temp_time-1,bits_window)
grid on
ylabel('Amplitude (volts)')
xlabel('Time (samples)')
title('OFDM Time Signal')
bits_fft=abs(fft(bits_window));
bits_fft_log=20*log10(bits_fft);
figure(4)
plot((0:(temp_time-1))/temp_time,bits_fft_log)
grid on
axis([0 1 -30 max(bits_fft_log)])
ylabel('Magnitude (dB)')
xlabel('Normalized Frequency (0.5 = fs/2)')
%title('OFDM Signal Spectrum')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -