📄 shi.txt
字号:
%OFDM仿真程序%
clear
IFFT_bin_length=128;
carrier_count=128;
bits_per_symbol=2;
symbols_per_carrier=10;
N_number=carrier_count*symbols_per_carrier*bits_per_symbol;
carriers=1:carrier_count;
N_snr=40; % 每比特信噪比
snr=8; %信噪比间隔
%产生发送序列%
X=randint(1,N_number);
%QPSK调制%
s=(X.*2-1)/sqrt(2);
sreal=s(1:2:N_number);simage=s(2:2:N_number);
X1=sreal+j.*simage;
%串并转换%
X2=reshape(X1,carrier_count,symbols_per_carrier).';
%IFFT%
IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);
IFFT_modulation(:,carriers)=X2;
X3=(ifft(IFFT_modulation,IFFT_bin_length,2));
%串并变换%
nu=carrier_count*symbols_per_carrier;
X4=reshape(X3,1,nu);
%经过信道%
fd=100; %多普勒频移
r=6; %多径数
a=[0.123 0.3 0.5 0.6 0.8 0.9]; %多径的幅度
d=[2 5 6 8 9 13]; %各径的延迟
T=1; %系统采样周期
th=[90 0 72 144 216 288]*pi./180;%相移
h=zeros(1,carrier_count);
hh=[];
for k=1:r
h1=a(k)*exp(j*((2*pi*T*fd*d(k)/carrier_count)));
hh=[hh,h1];
end
h(d+1)=hh;
%--------------------------------------------------------
channel1=zeros(size(X4));
channel1(1+d(1):length(X4))=hh(1)*X4(1:length(X4)-d(1));
channel2=zeros(size(X4));
channel2(1+d(2):length(X4))=hh(2)*X4(1:length(X4)-d(2));
channel3=zeros(size(X4));
channel3(1+d(3):length(X4))=hh(3)*X4(1:length(X4)-d(3));
channel4=zeros(size(X4));
channel4(1+d(4):length(X4))=hh(4)*X4(1:length(X4)-d(4));
channel5=zeros(size(X4));
channel5(1+d(5):length(X4))=hh(5)*X4(1:length(X4)-d(5));
channel6=zeros(size(X4));
channel6(1+d(6):length(X4))=hh(6)*X4(1:length(X4)-d(6));
%---------------------------------------------------------------
Tx_data=X4+channel1+channel2+channel3+channel4;
Error_ber=[];
Error_ser=[];%误符号率
for snr_db=0:snr:N_snr
code_power=0;
code_power=[norm(Tx_data)]^2/(length(Tx_data));%信号的符号功率
%bit_power=var(Tx_data);
bit_power=code_power/bits_per_symbol;%比特功率
noise_power=10*log10((bit_power/(10^(snr_db/10))));%噪声功率
end
noise=wgn(1,length(Tx_data),noise_power,'complex');%产生GAUSS白噪声信号
Y=Tx_data+noise;
%串并变换%
X5=reshape(Y,10,128);
X6=(fft(IFFT_modulation,IFFT_bin_length,2));
X7=reshape(X6,1,nu);
%QPSK解调%
y_real=sign(real(X7));
y_image=sign(imag(X7));
y_re=y_real./sqrt(2);
y_im=y_image./sqrt(2);
r00=[];
for k=1:length(y_real);
r00=[r00,[y_real(k),y_image(k)]];
end
for i=1:2560
if r00(i)==-1
XX(i)=0;
else
XX(i)=1;
end
end
XX;
%-------------------------------------------------------------
dif_bit=X-XX;
ber_snr=0;
%纪录误比特数
for k=1:N_number;
if dif_bit(k)~=0;
ber_snr=ber_snr+1;
end
end;
Error_ber=[];
Error_ber=[Error_ber,ber_snr];
BER=zeros(1,length(0:snr:N_snr));
BER=Error_ber./N_number;
%做图%
i=0:snr:N_snr;
semilogy(i,BER,'-*r');
hold on;
grid on;
hold off
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -