⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fig_stbc.m

📁 张贤达老师 通信信号处理4-9章的程序 这本书是张老师的经典之作。
💻 M
字号:
%%%%%%%%%% Space Diversity Simulation based on <Introduction to %%%%%%%
%%%%%%%%%%%%%%%   Space-Time wireless Communications>    %%%%%%%%%%%%%%

clear
DataNum = 100000;
Mr = 2;
Mt = 2;
Es = 1;

%%%%%%%%%%%%%% Generating Data Symbol %%%%%%%%%%%%%
Data = sign(rand(DataNum,1)-0.5);

%%%%%%%%%%%%%%%%%%%%%% AWGN %%%%%%%%%%%%%%%%%%%%%%%
% M = 1
% for i = 1:8
%     SNR(i) = (i-1)*2;
%     Noise = sqrt(Es*10^(-SNR(i)/10))*(randn(DataNum,M)+j*randn(DataNum,M))/sqrt(2);
%     for k = 1:DataNum
%         z = sqrt(Es)*Data(k)+Noise(k);
%         if (abs(z-1) <= abs(z+1))
%             RecovData(k) = 1;
%         else
%             RecovData(k) = -1;
%         end
%     end
%     BER(i) = length(find(Data ~= RecovData'))/DataNum;
% end
% semilogy(SNR,BER)  
% grid on

%%%%%%%%%%%%%%% Rayleigh Channel No Diversity %%%%%%%%%%%%%%%%%%%%%%
% M = 1;
% for i = 1:8
%     SNR(i) = (i-1)*2;
%     Noise = sqrt(Es*10^(-SNR(i)/10))*(randn(DataNum,M)+j*randn(DataNum,M))/sqrt(2);
%     for k = 1:DataNum
%         h = (randn(1,1)+j*randn(1,1))/sqrt(2);
%         y = sqrt(Es)*h*Data(k)+Noise(k);
%         z = conj(h)*y;
%         if (abs(z-1) <= abs(z+1))
%             RecovData(k) = 1;
%         else
%             RecovData(k) = -1;
%         end
%     end
%     BER(i) = length(find(Data ~= RecovData'))/DataNum;
% end
% semilogy(SNR,BER)  
% grid on
%%%%%%%%%%%%%% Repeating Coding Scheme %%%%%%%%%%%%
% M = 1;
% for i = 1:8
%     SNR(i) = (i-1)*2;
%     Noise = sqrt(Es*10^(-SNR(i)/10))*(randn(DataNum,M)+j*randn(DataNum,M))/sqrt(2);
%     for k = 1:DataNum
%         h = (randn(M,1)+j*randn(M,1))/sqrt(2);
%         y = sqrt(Es/M)*h*Data(k)+Noise(k,:)';
%         z = h'*y;
%         if (abs(z-1) <= abs(z+1))
%             RecovData(k) = 1;
%         else
%             RecovData(k) = -1;
%         end
%     end
%     BER(i) = length(find(Data ~= RecovData'))/DataNum;
% end
% semilogy(SNR,BER)  
% grid on

%%%%%%%%%%%%% Receive Antenna Diversity %%%%%%%%%%%%%
% for i = 1:8
%     SNR(i) = (i-1)*2;
%     Noise = sqrt(Es*10^(-SNR(i)/10))*(randn(DataNum,Mr)+j*randn(DataNum,Mr))/sqrt(2);
%     for k = 1:DataNum
%         h = (randn(Mr,1)+j*randn(Mr,1))/sqrt(2);
%         y = sqrt(Es)*h*Data(k)+Noise(k,:)';
%         z = h'*y;
%         if (abs(z-1) <= abs(z+1))
%             RecovData(k) = 1;
%         else
%             RecovData(k) = -1;
%         end
%     end
%     BER(i) = length(find(Data ~= RecovData'))/DataNum;
% end
% semilogy(SNR,BER)  
% grid on

%%%%%%% Transmit Diversity: channel unknown to the transmitter (MISO)  %%%%%
% for i =  1:8
%     SNR(i) = (i-1)*2;
%     Noise = sqrt(Es*10^(-SNR(i)/10))*(randn(DataNum,1)+j*randn(DataNum,1))/sqrt(2);
%     for k = 1:DataNum/2
%         h = (randn(Mt,1)+j*randn(Mt,1))/sqrt(2);
%         y = sqrt(Es/2)*[h(1) h(2);conj(h(2)) -conj(h(1))]*Data((k-1)*2+1:k*2)+Noise((k-1)*2+1:k*2);
%         z = sqrt(Es/2)*norm(h,'fro')^2*Data((k-1)*2+1:k*2)+[h(1) h(2);conj(h(2)) -conj(h(1))]'*Noise((k-1)*2+1:k*2);
%         if (abs(z(1)-1) < abs(z(1)+1))
%             RecovData((k-1)*2+1) = 1;
%         else
%             RecovData((k-1)*2+1) = -1;
%         end
%         if (abs(z(2)-1) < abs(z(2)+1))
%             RecovData(k*2) = 1;
%         else
%             RecovData(k*2) = -1;
%         end
%     end
%     BER(i) =  length(find(Data ~= RecovData'))/DataNum;
% end
% semilogy(SNR,BER)
% grid on

%%%%%%% Transmit Diversity: channel known to the transimitter (MISO) %%%%%%
for i = 1:8
    SNR(i) = (i-1)*2;
    Noise = sqrt(Es*10^(-SNR(i)/10))*(randn(DataNum,1)+j*randn(DataNum,1))/sqrt(2);
    for k = 1:DataNum
        h = (randn(Mt,1)+j*randn(Mt,1))/sqrt(2);
        w = sqrt(Mt)*h'/norm(h,'fro');
        y = sqrt(Es/Mt)*h'*w'*Data(k)+Noise(k);
        if (abs(y-1) < abs(y+1))
            RecovData(k) = 1;
        else
            RecovData(k) = -1;
        end
    end
    BER(i) =  length(find(Data ~= RecovData'))/DataNum;
end
semilogy(SNR,BER)
grid on

%%%%%%%% MIMO: channel unknown to the transmitter (Alamouti) %%%%%%%%%%
for i = 1:8
    SNR(i) = (i-1)*2;
    Noise = sqrt(Es*10^(-SNR(i)/10))*(randn(DataNum,1)+j*randn(DataNum,1))/sqrt(2);
    for k = 1:DataNum
        h = (randn(Mt,1)+j*randn(Mt,1))/sqrt(2);
        w = sqrt(Mt)*h'/norm(h,'fro');
        y = sqrt(Es/Mt)*h'*w'*Data(k)+Noise(k);
        if (abs(y-1) < abs(y+1))
            RecovData(k) = 1;
        else
            RecovData(k) = -1;
        end
    end
    BER(i) =  length(find(Data ~= RecovData'))/DataNum;
end

FONTSIZE=0.315;         % 单位为厘米;  
LINEWIDTH_AXES=1.2;%140/42;  % corresponding to 0.140mm 
LINEWIDTH_WAVE=0.5;%180/42;  % corresponding to 0.180mm
figNumber=figure('Name','      ', 'Visible','on');
set(gcf,'Color','white');
semilogy(SNR,BER,'red','LineWidth',LINEWIDTH_WAVE);  
grid on
xlabel('SNR   (dB)','FontUnits','centimeters','FontName','Times New Roman','FontSize',FONTSIZE);  
ylabel('SER','FontUnits','centimeters','FontName','Times New Roman','FontSize',FONTSIZE);
set(gca,'XColor','blue','YColor','blue','FontUnits','centimeters','FontName','Times New Roman','FontSize',FONTSIZE,'LineWidth',LINEWIDTH_AXES);
set(figNumber,'PaperPosition',[0.634518 6.34518 20.3046*0.8 15.2284*0.8]);     Shrink the figure size  











⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -