通信DHT变换

tic
% Select_Subcarrier 256-128-16
% ************************** 参数设置 ********************************
clear all;
clc;
nloop=3;
Number_Tx=1;
Number_Rx=1;
Number_subcarrier1=256;
CP_length1=Number_subcarrier1/4;
Mod_level=2;
Constellation_size=2^Mod_level;
minSNR=0;
maxSNR=40;
step=4;
numsymbol=3;
% ************************** 信道参数设置 ********************************
fd=133;
tstp=5*1e-8;
tau=1e-9*[0 30 150 31 370 710 1090 1730 2510];
pdb=[0 -1.5 -1.4 -3.6 -0.6 -9.1 -7.0 -12.0 -16.9];
comcase=combntns(1:8,4);
Casesize=nchoosek(8,4);
% ************************** 开始循环 ********************************
for i=1:length(Number_subcarrier1)
    Number_subcarrier=Number_subcarrier1(i);
    CP_length=CP_length1(i);
    %Casesize_1=nchoosek(Number_subcarrier,Number_subcarrier/2);
    %Sele_Bits=fix(log2(Casesize_1));
    Sele_Bits=Number_subcarrier/8*fix(log2(Casesize));
    index=1;
for SNR=minSNR:step:maxSNR
    Numerror=0;
    for a=1:nloop
% ************************** 数据映射 ********************************
        Mapdata=zeros(Number_subcarrier,numsymbol);
        randsize=randi(Casesize,1,Number_subcarrier/8);
        Randdata=randi(Constellation_size,Number_subcarrier/2,numsymbol)-1;
        Moddata=qammod(Randdata,Constellation_size);
        selectcase=selectsubcarriercase(Number_subcarrier,randsize,comcase)';
        Mapdata(selectcase,:)=Moddata;
% ************************** DHT ********************************
        Data_after_DHT=DHT_matrix*Mapdata;
        temp1 = DHT(Data_after_DHT(:,1));
        temp2 = DHT(Data_after_DHT(:,2));
        temp3 = DHT(Data_after_DHT(:,3));
% **************************IFFT ********************************
        IFFTdata1 = ifft(temp1);
        IFFTdata2 = ifft(temp2);
        IFFTdata3 = ifft(temp3);
% **************************IFFT ********************************
%        IFFTdata=ifft(Mapdata);
% ************************** 加CP ********************************
        AddCPdata=[IFFTdata1(Number_subcarrier-CP_length+1:end) IFFTdata1...
            IFFTdata2(Number_subcarrier-CP_length+1:end) IFFTdata2...
            IFFTdata3(Number_subcarrier-CP_length+1:end) IFFTdata3];
        Txsignal=reshape(AddCPdata,numsymbol*(Number_subcarrier+CP_length),1);
% ************************** 信道 ********************************
        rayChanObj=rayleighchan(tstp,fd,tau,pdb);
        FadedSignal= filter(rayChanObj,Txsignal); 
% ************************** 加噪声 ********************************
        SignalPower=sum(abs(Txsignal).^2)./(numsymbol*(Number_subcarrier+CP_length));
        Withnoisedata=awgn(FadedSignal,SNR,10*log10(SignalPower));
% ************************** 去CP ********************************
        Rxsignal=reshape(Withnoisedata,(Number_subcarrier+CP_length),numsymbol);
        MoveCPdata=Rxsignal(CP_length+1:end,:);
% ************************** FFT ********************************
        FFTdata1=fft(MoveCPdata);
        FFTdata11 = DHT(FFTdata1(:,1));
        FFTdata12 = DHT(FFTdata1(:,2));FFTdata13 = DHT(FFTdata1(:,3));
        FFTdata=[FFTdata11;FFTdata12;FFTdata13]';
%***************************信道估计 *******************************
        %***************************完美估计*******************************
        RemoveCPSignal_Cp=Rxsignal_Cp(CP_length+1:end,:);                           
        FFTSignal_cp=fft(RemoveCPSignal_Cp);  
        ChanFreqResponse2=FFTSignal_cp./Mapdata;
        %***************************实际估计*******************************
        %ChanFreqResponse_1=FFTdata./Mapdata;                                       
        %for ii=1:numsymbol
         %ChanFreqResponse2(:,ii)= ChanFreqResponse_1(:,1);                                                                         % estimated channel frequency response (firt colum is used to estimate the other colums)
        %end   
%***************************检测接收信号 *******************************
        Detecdata=FFTdata(:,1)';
        [~,Receiveddataside]=paixu(Detecdata,Number_subcarrier);
        Receiveddata=FFTdata(Receiveddataside',:);
        ChanFreqResponse=ChanFreqResponse2(Receiveddataside',:);
%***************************信号补偿 *******************************
        ChanCompenData=Receiveddata./ChanFreqResponse;
%***************************解调 *******************************   
        Demoddata=qamdemod(ChanCompenData,Constellation_size);     
%***************************计算ber *******************************
        
        Numerror=Numerror+Numerror_1;
    end
    ber=Numerror./((Sele_Bits+numsymbol*Number_subcarrier/2*Mod_level).*nloop);
    fprintf('%d\t%e\n',SNR,ber);
    BER(index)=ber;
    index=index+1;
end
semilogy(minSNR:step:maxSNR,BER,'rs-');
hold on;
end
xlabel('SNR(dB)');
ylabel('BER');
title('Spatial Modulation with OFDM 256-128-16');
grid on;
hold on;
toc

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值