clear all;
tic
%--------------------------------仿真参数----------------------------------
CR=1.8; %剪波率
T=1;%符号长度
fs_filter=1024;%滤波器的采样率
N=1024;%子载波个数
N_symbol=64;%symbol个数
MQAM=4;%4QAM调制
TR=8;%预留子载波数
Index_TR=1:TR;
PAPR0_dB=0:0.2:16;
PAPR0=10.^(PAPR0_dB/10);
number_X=zeros(1,length(PAPR0));
number_Y=zeros(1,length(PAPR0));
N_time=10;%仿真次数
% win=blackman(32768);
% ffs=64;
% Px=zeros(N_time,32768);
% variance_r_n=zeros(1,N_time);
% variance_i_n=zeros(1,N_time);
for n_time=1:N_time
if(mod(n_time,2)==0)
n_time
end
%------------------------------产生数据符号--------------------------------
rand_bit=randint(N,N_symbol,[0,MQAM-1]);%产生随机数据
signal=qammod(rand_bit,MQAM);%QAM调制
% signal(Index_TR,:)=zeros(TR,N_symbol);
%-------------------------------滤波器设计---------------------------------
rolloff=1;%滚降系数
L=4*fs_filter;%滤波器长度
h_sqrt_nyquist = rcosine(1,fs_filter,'fir/sqrt',rolloff,L/(2*fs_filter));%产生滤波器
%-----------------------------OFDM-OQAM发送端------------------------------
% signal_new=zeros(N,2*N_symbol);
% % signal_new(:,1)=[1 -1 1 -1 1 -1 1 -1];
% % signal_new(:,2)=[-1 1 -1 1 -1 1 -1 1];
% signal_real=real(signal);
% signal_imag=imag(signal);
% signal_new(:,1:2:2*N_symbol-1)=signal_real;
% signal_new(:,2:2:2*N_symbol)=signal_imag;
signal_new=zeros(N,2*N_symbol);
signal_new(2,4)=1;
signal_modulation=zeros(N,2*N_symbol);
for n=1:N
signal_modulation(n,:)=signal_new(n,:)*exp(1i*(n-1)*pi/2);
signal_modulation(n,2:2:2*N_symbol)=signal_modulation(n,2:2:2*N_symbol)*exp(1i*pi/2);
end
signal_ifft=zeros(2*N_symbol,N);
signal_filtered=zeros(2*N_symbol,length(h_sqrt_nyquist));
signal_carrier=zeros(2*N_symbol,length(h_sqrt_nyquist)+(2*N_symbol-1)*fs_filter/2);
for n=1:2*N_symbol
signal_ifft(n,:)=ifft(signal_modulation(:,n),N)*N;
signal_ifft(n,:)=circshift(signal_ifft(n,:).',-N/2*(n-1)).';
signal_filtered(n,1:N)=signal_ifft(n,:).*h_sqrt_nyquist(1:N);
signal_filtered(n,N+1:2*N)=signal_ifft(n,:).*h_sqrt_nyquist(N+1:2*N);
signal_filtered(n,2*N+1:3*N)=signal_ifft(n,:).*h_sqrt_nyquist(2*N+1:3*N);
signal_filtered(n,3*N+1:4*N)=signal_ifft(n,:).*h_sqrt_nyquist(3*N+1:4*N);
signal_filtered(n,4*N+1:(length(h_sqrt_nyquist)))=signal_ifft(n,(length(h_sqrt_nyquist)-4*N)).*h_sqrt_nyquist(4*N+1:(length(h_sqrt_nyquist)));
signal_filtered_shift=[zeros(1,(n-1)*fs_filter/2),signal_filtered(n,:)];
signal_carrier(n,:)=[signal_filtered_shift,zeros(1,length(signal_carrier)-length(signal_filtered_shift))];
end
signal_transmit=sum(signal_carrier);
ffs=1024;
[Px(n_time,:),fxx]=pwelch(signal_transmit,window,[],32768,ffs);%估计功率谱
% Signal_Power=abs(signal_transmit).^2;
% for n=3:62
% Max_Power=max(Signal_Power((n-1)*fs_filter+1+L/2:n*fs_filter+L/2));
% Mean_Power=mean(Signal_Power((n-1)*fs_filter+1+L/2:n*fs_filter+L/2));
% PAPR=Max_Power/Mean_Power;
% number_X=number_X+(PAPR0<=PAPR);
% end
%---------------------------------------------clipping---------------------
% signal_transmit_clipping=signal_transmit;
% clipping=signal_transmit(abs(signal_transmit).^2>CR*Mean_Power);
% clipping=sqrt(CR*Mean_Power)*clipping./abs(clipping);
% signal_transmit_clipping(abs(signal_transmit_clipping).^2>CR*Mean_Power)=clipping;
% clipping_noise=signal_transmit-signal_transmit_clipping;
% % l=1;
% % for k=1:length(clipping_noise)
% % if(clipping_noise(k)~=0)
% % clipping_noise_index1(l)=k;
% % l=l+1;
% % end
% % end
% canceling_signal=zeros(N,N_symbol);
% canceling_signal(Index_TR,1)=ones(TR,1);
% canceling_signal_new=zeros(N,2*N_symbol);
% canceling_signal_new(:,1:2:2*N_symbol-1)=canceling_signal;
% canceling_signal_modulation=zeros(N,2*N_symbol);
% for n=1:N
% canceling_signal_modulation(n,:)=canceling_signal_new(n,:)*exp(1i*(n-1)*pi/2);
% end
% canceling_signal_ifft=zeros(2*N_symbol,N);
% canceling_signal_filtered=zeros(2*N_symbol,length(h_sqrt_nyquist));
% canceling_signal_carrier=zeros(2*N_symbol,N+length(h_sqrt_nyquist)-1+(2*N_symbol-1)*fs_filter/2);
% for n=1:2*N_symbol
% canceling_signal_ifft(n,:)=ifft(canceling_signal_modulation(:,n),N)*N;
% A=circshift(canceling_signal_ifft(n,:).',5).';
% canceling_signal_filtered(n,1:N)=canceling_signal_ifft(n,:).*h_sqrt_nyquist(1:N);
% canceling_signal_filtered(n,N+1:2*N)=canceling_signal_ifft(n,:).*h_sqrt_nyquist(N+1:2*N);
% canceling_signal_filtered(n,2*N+1:3*N)=canceling_signal_ifft(n,:).*h_sqrt_nyquist(2*N+1:3*N);
% canceling_signal_filtered(n,3*N+1:4*N)=canceling_signal_ifft(n,:).*h_sqrt_nyquist(3*N+1:4*N);
% canceling_signal_filtered(n,4*N+1:(length(h_sqrt_nyquist)))=canceling_signal_ifft(n,(length(h_sqrt_nyquist)-4*N)).*h_sqrt_nyquist(4*N+1:(length(h_sqrt_nyquist)));
% canceling_signal_filtered_shift=[zeros(1,(n-1)*fs_filter/2),canceling_signal_filtered(n,:)];
% canceling_signal_carrier(n,:)=[canceling_signal_filtered_shift,zeros(1,length(signal_carrier)-length(canceling_signal_filtered_shift))];
% end
% canceling_signal_transmit=sum(canceling_signal_carrier);
% [A,B]=max(canceling_signal_transmit);
%
% signal_transmit2=signal_transmit-filtering;
%
% % [Px2(n_time,:),fxx]=pwelch(signal_transmit2,win,[],32768,ffs);%估计功率谱
%
% Signal_Power=abs(signal_transmit2).^2;
%
% for n=5:124
% Max_Power=max(Signal_Power((n-1)*fs_filter+1+L/2:n*fs_filter+L/2));
% Mean_Power=mean(Signal_Power((n-1)*fs_filter+1+L/2:n*fs_filter+L/2));
% PAPR=Max_Power/Mean_Power;
% number_Y=number_Y+(PAPR0<=PAPR);
% end
%----------------------------OFDM-OQAM接收端-------------------------------
signal_received=signal_transmit;
h_sqrt_nyquist_shift=zeros(2*N_symbol,length(signal_received));
signal_received_filtered=zeros(2*N_symbol,length(signal_received));
signal_received_filtered1=zeros(2*N_symbol,N*(L/fs_filter+N_symbol));
for n=1:2*N_symbol
h_sqrt_nyquist_temp=[zeros(1,(n-1)*fs_filter/2),h_sqrt_nyquist];
h_sqrt_nyquist_shift(n,:)=[h_sqrt_nyquist_temp,zeros(1,length(signal_received)-length(h_sqrt_nyquist_temp))];
signal_received_filtered(n,:)=h_sqrt_nyquist_shift(n,:).*signal_received;
signal_received_filtered1(n,:)=[signal_received_filtered(n,:),zeros(1,length(signal_received_filtered1)-length(signal_received_filtered))];
end
signal_received_filtered_new=zeros(2*N_symbol,N);
signal_received_fft=zeros(2*N_symbol,N);
signal_received_demodulation=zeros(2*N_symbol,N);
signal_received_demodulation1=zeros(2*N_symbol,N);
for n=1:2*N_symbol
for m=1:N
signal_received_filtered_new(n,m)=sum(signal_received_filtered1(n,1+(m-1):N:(N*(L/fs_filter+N_symbol-1)+(m-1))));
end
signal_received_fft(n,:)=fft(signal_received_filtered_new(n,:),N);
end
for n=1:N
signal_received_demodulation(:,n)=signal_received_fft(:,n)*exp(-1i*(n-1)*pi/2);
end
signal_received_demodulation1(1:2:2*N_symbol-1,:)=real(signal_received_demodulation(1:2:2*N_symbol-1,:));
signal_received_demodulation1(2:2:2*N_symbol,:)=imag(signal_received_demodulation(2:2:2*N_symbol,:));
% variance_real=mean((signal_demod_real_filtered_down(:,1:N_symbol).'-real(signal).').^2);%实部信号不同载波上方差
% variance_imag=mean((signal_demod_imag_filtered_down(:,1:N_symbol).'-imag(signal).').^2);%虚部信号不同载波上方差
% variance_r_n(n_time)=mean(variance_real);
% variance_i_n(n_time)=mean(variance_imag);
end
% variance_r=mean(variance_r_n);
% variance_i=mean(variance_i_n);
% Pxx=mean(Px);
% Pxx2=mean(Px2);
%----------------------------PAPR图-------------------------------
% CCDF_X=number_X/N_time/60;
% CCDF_Y=number_Y/N_time/60;
% semilogy(PAPR0_dB,CCDF_X,'.-k');
% hold on;
% semilogy(PAPR0_dB,CCDF_Y,'o-b');
%----------------------------功率谱图-------------------------------
% figure;
% plot(fxx,10*log10(Pxx),'b');
%