看不懂matlab工具箱,matlab程序看不懂,跪求大神解释啊

%function [Ber] = DSCDMA_NOCODEINTLVR();

clear

clc

fprintf('Start! Please waiting ...\n');

%%%%%%%%%%%%%% 需要调整的参数 %%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%% V 表示车速 10km每小时 100km/h 300km/h

%%%%%%%%%%%SNR 表示信噪比,一般去0:5:20

%%%%%%%%%% SF_Bit 表示扩频比特 可以取 2 4 6 8

%%%%%%%%%% Plt_Num 表示 信道估计平均的长度,可以取 8到256

%%%%%%%%%% channel parameters 信道参数 %%%%%%%%%%%%%%%

C = 3e8;

Fc = 2.11e9;

V = 10; %km/h

Tc = 1/1.2288e6; %Chip duration according to digital bandwidth

%%%%%%% 扩频增益 信道估计用的导频数目 %%%%%%%%%%%%%

SF_Bit= 2;

Plt_Num = 256; %Symbol:The integrated length for pilot estimation

SF=2^SF_Bit; %Spread factor

SF_DB=10*log10(SF);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%% Generating the Walsh code matrix. The sequence number is from 0 to SF - 1 %%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Index = 1;

Wal_Mat = 1;

for k = 1 : SF_Bit

Wal_Mat = [ Wal_Mat Wal_Mat.*((1-2*bitget(Index,k))*ones(1,size(Wal_Mat,2)))];

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%% Preparing parameters for encoding and interleaver %%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Fram_Len = ceil( 2/(100*SF*Tc) - 0.5); %Signal length.

Half_FLen = Fram_Len/2;

Calculate_Num = 30*Fram_Len;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Parameters for simulation the multipath channel with modified Jakes model %%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Del_Idx=[1 2 3 4 6]; %Model B with rate = 1

Del_Gain=[0.8084 0.462 0.253 0.259 0.0447]; % The energe of the fore two paths are combined as one path.

Sample_Rate = 1;

Max_Del=max(Del_Idx); %Max time delay

Path_Num=length(Del_Idx); %Time invariant multipath

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%% Parameters for receiver %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Win_Len = 12; %Window length for searching

Max_Num = 3; %Stong paths

fpname = strcat(mfilename, '.dat');

fp=fopen(fpname,'a+');

fprintf(fp,strcat('\n%%Created at from \n'));

fprintf(fp,'%%SF = %3d\t\tPlt_Num = %4d\t\tSpeed = %3dkm/h\t\tHalf_FLen=%5d\t\tCalculate_Num=%7d\n',SF,Plt_Num,V,Half_FLen,Calculate_Num);

fprintf(fp,'%%SNR BER\n');

fclose(fp);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%% Start %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for SNR = 20

fprintf('*****SNR = %5.3f*****\n',SNR);

PN_RegStateI = [zeros(1,14) 1];

PN_RegStateQ = [zeros(1,14) 1];

PN_PolynI = [0 1 0 0 0 1 1 1 0 1 0 0 0 0 1];

PN_PolynQ = [0 0 1 1 1 0 0 0 1 1 1 1 0 0 1];

Time_BeginCH = 0;

Data_Length = 0;

Err_Num = 0;

while ( Data_Length < Calculate_Num )

% the source signal

TxSymbols = 1 - 2*randint(1,Fram_Len,2);

% QPSK modulation

TempTxSymbols = reshape(TxSymbols,2,length(TxSymbols)/2);

TxSignal = TempTxSymbols(1,:) + j*TempTxSymbols(2,:);

% Signal Repeat

TxSig_Repeat=kron(TxSignal,ones(1,SF));

% produce the walsh sequence with the same rate as PN code

Walsh_Sequence = repmat(Wal_Mat,1,length(TxSignal));

%produce the PN code sequence

PN_SequenceI = zeros(1,length(TxSig_Repeat));

PN_SequenceQ = zeros(1,length(TxSig_Repeat));

[PN_SequenceI,PN_RegStateI] = PnGen(PN_PolynI,PN_RegStateI,length(TxSig_Repeat));

[PN_SequenceQ,PN_RegStateQ] = PnGen(PN_PolynQ,PN_RegStateQ,length(TxSig_Repeat));

PN_Complex = PN_SequenceI + j*PN_SequenceQ;

%combine the PN code and Walsh code

WalPN_Complex = PN_Complex.*Walsh_Sequence;

% spreading the singal and pilot symbols added

TxSig_WalPN = TxSig_Repeat.*WalPN_Complex + PN_Complex;

% passing the channel

TxSig_WalPNM = kron(TxSig_WalPN,ones(1,Sample_Rate));

CH_Data = MultiCHannel(Del_Gain,Fc,V,Tc,length(TxSig_WalPNM),Time_BeginCH,[0.8 0.28]);

Time_BeginCH = Time_BeginCH + length(TxSig_WalPNM);

for i = 1 : length(Del_Idx)

if Del_Idx(1,i) > 1

Temp_Sig(i,:) = [ zeros(1,Del_Idx(1,i)-1) TxSig_WalPNM(1,[1:end-Del_Idx(1,i)+1])];

else

Temp_Sig(i,:) = TxSig_WalPNM(1,[1:end]);

end

end

TxSig_WalPNCh = sum(Temp_Sig.*CH_Data,1);

%%%%%%%%% add AWGN noise %%%%%%%%%%%%%%%%%%%%%%%%%%%

TxSig_WalPNChN = TxSig_WalPNCh +[1 j]*randn(2,length(TxSig_WalPNCh))*10^((-SNR+SF_DB)/20);

Down_WalPNChN = TxSig_WalPNChN(1:Sample_Rate:end); %derepeat the signal

% Estimation and RAKE receiver

%%%%%%% de spreading %%%%%%%%%%%%%%%

for i = 1 : 12

if i > 1

Temp_RecSig(i,:) = Down_WalPNChN(1,[i:end 1:i-1]).*conj(PN_Complex);

else

Temp_RecSig(i,:) = Down_WalPNChN(1,[i:end]).*conj(PN_Complex);

end

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% channel estimation and channel choose channel combination %%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for i = 1:Half_FLen/Plt_Num

Temp_EstCH = sum( Temp_RecSig( :,(i-1)*Plt_Num*SF+1:i*Plt_Num*SF ),2);

[Tmp Max_Idx] = sort(Temp_EstCH);

Str_Idx = Max_Idx( end - Max_Num + 1:end );

EstCH = Temp_EstCH(Str_Idx)/(2*Plt_Num*SF);

for uu = 1 : Plt_Num

RecSig((i-1)*Plt_Num+uu)=Wal_Mat(1,:)*Temp_RecSig(Str_Idx,(i-1)*Plt_Num*SF+(uu-1)*SF+1:(i-1)*Plt_Num*SF+uu*SF).'*conj(EstCH)/SF;

end

end

% Adjust and Comparison

Rec_Adjust = reshape([real(RecSig);imag(RecSig)],1,length(RecSig)*2);

Err_Num = Err_Num + sum( sign(Rec_Adjust) ~= TxSymbols )

Data_Length = Data_Length + length(TxSymbols);

end

Ber = Err_Num/Data_Length

fp=fopen(fpname, 'a+');

fprintf(fp,'%5.2f\t',SNR);

fprintf(fp,'%10.8f\n',Ber);

fclose(fp);

end

人打赏

0人 点赞

主帖获得的天涯分:0

举报 |

楼主

|

楼主发言:3次 发图:0张 | 添加到话题 |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值