function Pb=stbc_ofdm(SNR_dB)
%---------------------------------------------------------
%在时域中对OFDM与STBC结合的仿真(两发一收)
%这里的信道采用的是指数衰落信道(6条径,抽样间隔为20ns)
%---------------------------------------------------------仿真中的已知参数
Eb=1;
SNR=10^(SNR_dB/10);
NoisePower=(Eb/SNR)*1/2;
atten_power = exp(-[0:5]);
path_delay = [0:5]*20;
aver_power=atten_power/sum(atten_power);%进行功率归一化
N=512;%子载波数为512
G=128;%循环前缀为128,128>100
M=512000;
Block=M/N;
bit=sqrt(1/2)*(2*round(rand(1,M))-1);
ofdm_signal=reshape(bit,N,Block);
%---------------------------------------------------------进行空时分组编码
s1=zeros(N,Block);
s2=zeros(N,Block);
s1(:,1:2:Block)=ofdm_signal(:,1:2:Block);
s1(:,2:2:Block)=-conj(ofdm_signal(:,2:2:Block));
s2(:,1:2:Block)=ofdm_signal(:,2:2:Block);
s2(:,2:2:Block)=conj(ofdm_signal(:,1:2:Block));
%---------------------------------------------------------进行IFFT,转化到时域分析
s1_time=sqrt(N)*ifft(s1);
S1=vertcat(s1_time(N-G+1:N,:),s1_time);
Send1=reshape(S1,1,(N+G)*Block);
s2_time=sqrt(N)*ifft(s2);
S2=vertcat(s2_time(N-G+1:N,:),s2_time);
Send2=reshape(S2,1,(N+G)*Block);
%---------------------------------------------------------
for i=1:1:6
h1(i,:)=sqrt(aver_power(i)/2)*(randn(1,Block/2)+j*randn(1,Block/2));
h2(i,:)=sqrt(aver_power(i)/2)*(randn(1,Block/2)+j*randn(1,Block/2));
end
for i=1:1:6
H1(i,:)=reshape(repmat(h1(i,:),2*(N+G),1),1,(N+G)*Block);
H2(i,:)=reshape(repmat(h2(i,:),2*(N+G),1),1,(N+G)*Block);
end
Y1=zeros(1,(N+G)*Block);
Y2=zeros(1,(N+G)*Block);
for i=1:1:6
C1=H1(i,:).*Send1;
C2=H2(i,:).*Send2;
Y1=Y1+horzcat(zeros(1,path_delay(i)),C1(1:(N+G)*Block-path_delay(i)));
Y2=Y2+horzcat(zeros(1,path_delay(i)),C2(1:(N+G)*Block-path_delay(i)));
end
Noise=sqrt(NoisePower)*(randn(1,(N+G)*Block)+j*randn(1,(N+G)*Block));
Y=Y1+Y2+Noise;
y=reshape(Y,N+G,Block);
freq_y=fft(y(G+1:N+G,:))/sqrt(N);
H1_time=zeros(N,Block/2);
H2_time=zeros(N,Block/2);
for i=1:1:6
H1_time(path_delay(i)+1,:)=h1(i,:);
H2_time(path_delay(i)+1,:)=h2(i,:);
end
H1_freq=fft(H1_time);
H2_freq=fft(H2_time);
z=zeros(N,Block);
z(:,1:2:Block)=freq_y(:,1:2:Block).*conj(H1_freq)+conj(freq_y(:,2:2:Block)).*H2_freq;
z(:,2:2:Block)=freq_y(:,1:2:Block).*conj(H2_freq)-conj(freq_y(:,2:2:Block)).*H1_freq;
Z=reshape(z,1,N*Block);
Z=sqrt(1/2)*(2*(real(Z)>=0)-1);
ErrorbitNum=sum(Z~=bit);
Pb=ErrorbitNum/M;
评论0