SNRdB=SNRdBs(i);
for ncf=0:2 %无限幅/限幅/限幅和滤波
if ncf==2
m=ceil(length(h)/2);%h是BPF的数值
else %ceil 是向离它最近的大整数圆整 返回大于或者等于指定表达式的最小整数
m=1;
end
for cr=1:N_CR%限幅比个数
% if ncf==0 & cr<1
% break;
% end
CR=CRs(cr);
nobe=0;
for nblk=1:Nblk %(i)
msgbin=randi(b,1,N); %二进制序列%128*128
%
mdmod = qammod(msgbin,M,'Gray');%调制
% mddem = qamdemod(randi([0 M-1],1,N),M,'Gray');%解调
X = A*modulate(mdmod,msgbin); %4QAM(QPSK)映射
X(1)=0+1i*0; %不使用DC
x=IFFT_oversampling(X,N,L);%过采样 IFFT
x_b=add_CP(x,Ncp*L);%加CP =0
x_b_os=[zeros(1,(N/2-Ncp)*L),x_b,zeros(1,N*L)];%前面和后面补零
x_p=sqrt(2)*real(x_b_os.*exp(1i*wc*t));%数字上变换
if ncf>0
x_p_c=clipping1(x_p,CR); %限幅
x_p=x_p_c;
if ncf>1
x_p_cf=ifft(fft(h,length(x_p)).*fft(x_p));%再加滤波
x_p=x_p_cf;
end
end
if i==N_SNR
CF(nblk)=PAPR(x_p);
end
%以下是用于解调
y_p_n=[x_p(kk1) awgn(x_p(kk2),SNRdB,'measured') x_p(kk3)];%加噪声
y_b=y_p_n.*exp(-1i*wc*t)/sqrt(2);%下变换
Y_b=fft(y_b);
y_b_z=ifft(zero_pasting(Y_b));
y_b_t=y_b_z((N/2-Ncp)*L+m+[0:L:(N+Ncp)*L-1]);
Y_b_f=fft(y_b_t(Ncp+1:end),N)*L;
Y_b_bin=qamdemod(Y_b_f,M,'Gray');
% Y_b_bin=demodulate(mddem,Y_b_f);%解调
nobe=nobe+biterr(msgbin(:,2:end),Y_b_bin(:,2:end));%128*1 biterr函数只对无符号二进制数进行比较,即 0个数/1个数
% if ncf==0
% ber_no(i)=nobe/Nblk/(N-1)/b;
% elseif ncf==1
% ber_c(cr,i)=nobe/Nblk/(N-1)/b;
% else
% ber_cf(cr,i)=nobe/Nblk/(N-1)/b;
% end
end
if ncf==0
ber_no(i)=nobe/Nblk/(N-1)/b;
elseif ncf==1
ber_c(cr,i)=nobe/Nblk/(N-1)/b;
else
ber_cf(cr,i)=nobe/Nblk/(N-1)/b;
end
if i==N_SNR
for iz=1:len_z
CCDF(iz)=sum(CF>z(iz))/Nblk;
end
if ncf==0
CCDF_no=CCDF;
break;
elseif ncf==1
CCDF_c(cr,:)=CCDF;
else
CCDF_cf(cr,:)=CCDF;
end
end
end
end
end
figure(1)
semilogy(z,CCDF_no)
grid on,hold on
for cr=1:N_CR
gs=gss(cr);
semilogy(z,CCDF_c(cr,:),[gs '-'],z,CCDF_cf(cr,:),[gs ':'])%前实线 后虚线
hold on
end
figure(2)
% semilogy(SNRdBs,ber_no,'y');
semilogy(SNRdBs,ber_analytic,'r');
grid on,hold on
for cr=1:N_CR
gs=gss(cr);
semilogy(SNRdBs,ber_c(cr,:),[gs '-'],SNRdBs,ber_cf(cr,:),[gs ':'])
end