clc; clear; close all; tic; N=128; M=[4 16 32 64]; D=5; c=0.15; nt=0.1289; nr=0.9500; N_ofdm=1000; snr_dB=1:18; SNR=10.^(snr_dB./10); for kk=1:length(snr_dB) N_fft=N*2+2; for jj=1:length(M) base_data=randi([0 1],1,N*N_ofdm*log2(M(jj))); data_temp1= reshape(base_data,log2(M(jj)),[])'; data_temp2= bi2de(data_temp1); mod_data = qammod(data_temp2,M(jj)); data=reshape(mod_data,N,[])'; H_data=zeros(N_ofdm,N_fft); H_data(:,2:N_fft/2)= data; H_data(:,N_fft/2+2:N_fft)= conj(fliplr(data)); ifft_data=ifft(H_data,[],2); ifft_data=ifft_data+0.02*ones(size(ifft_data)); Noise=awgn(ifft_data,SNR(kk),'measured')-ifft_data; Rx_data=ifft_data*nt*nr*exp(-c*D)+Noise; Rx_data=Rx_data/(nt*nr*exp(-c*D)) fft_data=fft(Rx_data,[],2); Rx_psk_data=fft_data(:,2:N_fft/2); demodulation_data = qamdemod(Rx_psk_data',M(jj)); demodulation_data= reshape(demodulation_data,[],1); temp1=de2bi(demodulation_data); err(kk,jj)=sum(sum((temp1~=data_temp1))); end BER(kk,:)=err(kk,:)./(N*N_ofdm*log2(M(jj))); end figure(); for a=1:length(M) semilogy(snr_dB,BER(:,a),'*-','LineWidth',1.5);hold on; end
时间: 2023-06-16 20:07:35 浏览: 87
ga_main_gamain_tic函数_遗传算法源码_AllClear_
这段代码是用来模拟无线通信系统中的 BER(误比特率)与 SNR(信噪比)之间的关系。其中,N是子载波数目,M是调制方式,D是传输距离,c是衰减系数,nt和nr是发射和接收天线的增益,N_ofdm是OFDM符号数目。
代码中先生成随机的二进制数据,然后将其进行 M-QAM 调制,生成调制后的数据。接着,对调制后的数据进行 OFDM 变换,加上高斯白噪声,进行逆变换,并加上信道衰减。最后,对接收到的数据进行 FFT 变换,并将其还原为二进制数据,计算误码率。
代码最后使用 semilogy 函数将误码率与信噪比之间的关系画出来,以便对无线通信系统的性能进行分析。
阅读全文