clear all;
close all;
fprintf('OFDM 仿真\n\n');
IFFT_bin_length =1024;
carrier_count= 200;
bits_per_symbol= 2;
symbols_per_carrier=50;
% 子载波数 200
% 位数/ 符号 2
% 符号数/ 载波 50
% 训练符号数 10
% 循环前缀长度 T/4
% 调制方式 QDPSK
% 多径信道数 2、3、4(缺省)
% 信道最大时延 7 (单位数据符号)
% 仿真条件 收发之间严格同步
SNR =input('SNR =');
% 输入信噪比参数
baseband_out_length=carrier_count*symbols_per_carrier*bits_per_symbol;
% 计算发送的二进制序列长度
carriers= (1:carrier_count)+(floor(IFFT_bin_length/4)-floor(carrier_count/2));
% 坐标: (1 to 200) + 156 , 157 -- 356
conjugate_carriers=IFFT_bin_length-carriers+2;
% 坐标 :1024 - (157:356) + 2 = 1026 - (157:356) = (869:670)
% 构造共轭时间-载波矩阵,以便应用所谓的RCC,Reduced Computational Complexity算法,即ifft之后结果为实数
% Define the conjugate time-carrier matrix
% 也可以用flipdim函数构造对称共轭矩阵
% 信号发射
baseband_out=round(rand(1,baseband_out_length));
convert_matrix =reshape(baseband_out,bits_per_symbol,length(baseband_out)/bits_per_symbol);
for k=1:(length(baseband_out)/bits_per_symbol)
modulo_baseband(k)=0;
for i= 1:bits_per_symbol
modulo_baseband(k)= modulo_baseband(k) +convert_matrix(i,k)*2^(bits_per_symbol-i);
end
end
carrier_matrix=reshape(modulo_baseband,carrier_count,symbols_per_carrier);
%QDPSK调制
carrier_matrix=[zeros(1,carrier_count);carrier_matrix];
for i=2:(symbols_per_carrier+1)
carrier_matrix(i,:)=rem(carrier_matrix(i,:)+carrier_matrix(i-1,:),2^bits_per_symbol);
end
carrier_matrix = carrier_matrix *((2*pi)/(2^bits_per_symbol));
[X,Y]=pol2cart(carrier_matrix,ones(size(carrier_matrix,1),size(carrier_matrix,2)));
complex_carrier_matrix=complex(X,Y);
% 加训练序列
training_symbols=[1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1 1 j j 1 -1 -j -j -1];
training_symbols=cat(1,training_symbols,training_symbols);
training_symbols=cat(1,training_symbols,training_symbols);
complex_carrier_matrix = cat(1,training_symbols,complex_carrier_matrix);
IFFT_modulation=zeros(4 + symbols_per_carrier+ 1,IFFT_bin_length);
IFFT_modulation(:,carriers)=complex_carrier_matrix;
IFFT_modulation(:,conjugate_carriers)=conj(complex_carrier_matrix);
time_wave_matrix=ifft(IFFT_modulation');
time_wave_matrix = time_wave_matrix';
for i= 1:4 + symbols_per_carrier + 1
windowed_time_wave_matrix(i,:) = real(time_wave_matrix(i,:));
end
ofdm_modulation = reshape(windowed_time_wave_matrix',1,IFFT_bin_length*(4+symbols_per_carrier+1));
Tx_data = ofdm_modulation;
d1 = 4;
al = 0.2;
d2 = 5;
a2 = 0.3;
d3 = 6;
a3 = 0.4;
d4 = 7;
a4 = 0.5;
copy1=zeros(size(Tx_data));
for i=1+d1:length(Tx_data)
copy1(i)=a1*Tx_data(i-d1);
end
copy2=zeros(size(Tx_data));
for i= 1+d2:length(Tx_data)
copy1(i)=a2*Tx_data(i-d2);
end
copy3=zeros(size(Tx_data));
for i= 1+d3:length(Tx_data)
copy1(i)=a3*Tx_data(i-d3);
end
copy4=zeros(size(Tx_data));
for i=1+d4:length(Tx_data)
copy1(i)=a4*Tx_data(i-d4);
end
Tx_data = Tx_data+copy1+copy2;
Tx_signal_power=var(Tx_data);
linear_SNR =10^(SNR/IO);
noise_sigma = Tx_signal_power/linear_SNR;
noise_scale_factor=sqrt(noise_sigma);
noise=randn(1,length(Tx_data))*noise_scale_factor;
Rx_Data = Tx_data +noise;
% 信号接收
Rx_Data_matrix=reshape(Rx_Data,IFFT_bin_length,4+symbols_per_carrier+1);
Rx_spectrum =fft(Rx_Data_matrix);
Rx_carriers = Rx_spectrum(carriers,:);
Rx_training_symbols = Rx_carriers((1:4),:);
Rx_carriers = Rx_carriers((5:55),:);
%信道估计
Rx_training_symbols = Rx_training_symbols/training_symbols;
Rx_training_symbols_deno = Rx_training_symbols^2;
Rx_training_symbols_deno =Rx_training_symbols_deno(1,:)+Rx_training_symbols_deno(2,:)+Rx_training_symbols_deno(3,:)+Rx_training_symbols_deno(4,:);
Rx_training_symbols_nume = Rx_training-symbols(1,:)+Rx_training_symbols(2,:)+Rx_training_symbols(3,:)+Rx_training_symbols(4,:);
Rx_training_symbols_nume =conj(Rx_training_symbols_nume);
Rx_trainmg_symbols = Rx_training_symbols_nume/Rx_traming_symbols_deno;
Rx_trainmg_symbols_2 =cat(1,Rx_training_symbols,Rx_training_symbols);
Rx_training_symbols_4 = cat(1,Rx_training_symbols_2,Rx_training_symbols_2);
Rx_training_symbols_8 = cat(1,Rx_training_symbols_4,Rx_training_symbols_4);
Rx_training_symbols_l6=cat(1,Rx_training_symbols_8,Rx_training_symbols_8);
Rx_training_symbols_32=cat(1,Rx_training_symbols_16,Rx_training_symbols_16);
Rx_training_symbols_48=cat(1,Rx_training_symbols_32,Rx_training_symbols_16);
Rx_training_symbols_50=cat(1,Rx_training_symbols_48,Rx_training_symbols_2);
Rx_training_symbols = cat(1,Rx_training_symbols_50,Rx_training_symbols);
Rx_carriers = Rx_training_symbols*Rx_carriers;
Rx_phase=angle(Rx_carriers)*(180/pi);
phase_negative=find(Rx_phase<0);
Rx_phase(phase_negative)=rem(Rx_phase(phase_negative)+360,360);
Rx_decoded_phase= diff(Rx_phase);
phase_negative=find(Rx_decoded_phase<0);
Rx_decoded_phase(phase_negative)=rem(Rx_decoded_phase(phase_negative)+360,360);
%QDPSK解调
base_phase =360/2^bits_per_symbol;
delta_phase = base_phase/2;
Rx_decoded_symbols = zeros(size(Rx_decoded_phase,1),size(Rx_decoded_phase,2));
for i= 1:(2^bits_per_symbol-1)
center_phase = base_phase*i;
plus_delta =center_phase+delta_phase;
minus_delta = center_phase_delta_phase;
decoded = find((Rx_decoded_phase <=plus_delta)&(Rx_decoded_phase>minus_delta));
Rx_decoded_symbols(decoded)=i;
end
Rx_serial_symbols = reshape(Rx_decoded_symbols,1,size(Rx_decoded_symbols,1)*size(Rx_decoded_symbols,2));
for i= bits_per_symbol:-1:1
if i~= 1
Rx_binary_matrix(i,:)=rem(Rx_serial_symbols,2);
Rx_serial_symbols=floor(Rx_serial_symbols/2);
else
Rx_binary_matrix(i,:)=Rx_serial_symbols;
end
end
baseband_in=reshape(Rx_binary_matrix,1,size(Rx_binary_matrix,1)*size(Rx_binary_matrix,2));
%误码率计算
bit_errors=find(baseband_in~=baseband_out);
bit_error_count=size(bit_errors,2);
total_bits=size(baseband_out,2);
bit_error_rate = bit_error_count/total_bits;
fprintf('%f\n',bit_eror_rate);
matlab_OFDM通信系统的仿真。PDF文件,包括OFDM原理、程序讲解及运行结果
版权申诉
171 浏览量
2022-06-20
21:42:37
上传
评论
收藏 2KB ZIP 举报
wouderw
- 粉丝: 275
- 资源: 2960