当前位置:文档之家› UWB 超宽带技术 源代码

UWB 超宽带技术 源代码

BIT: 产生原信号二进制比特流PPM-TH: 进行PPM-TH调制Repcode: 进行重复编码TH: 产生TH码TRANSMITTER_2PPM_TH:产生UWB信号waveform: 产生功率归一化的脉冲波形1、FUNCTION: "bit"% 产生二进制原信号% 原信号比特数numbis作为输入function [bits]=bit(numbits)bits=rand(1,numbits)>0.5;%rand产生的是在0~1上均匀分布的随机数%这些数>0.5的几率各是一半,即bis为0,1的几率各半3、FUNCTION: "repcode"% 产生重复编码% 'Ns' :码元重复数function [repbits]=repcode(bits,Ns)numbits = length(bits);temprect=ones(1,Ns);temp1=zeros(1,numbits*Ns);temp1(1:Ns:1+Ns*(numbits-1))=bits;temp2=conv(temp1,temprect);repbits=temp2(1:Ns*numbits);3、FUNCTION: "PPM_TH"% 引入TH码并进行PPM调制% 参数如下:% 'seq':二进制源码% 'fc' :抽样频率% 'Tc' :时隙长度% 'Ts' :脉冲平均重复周期% 'dPPM':PPM引入的时移% 'THcode' :TH码% 产生两个输出:% '2PPMTHseq' :TH和PPM共同调制信号% 'THseq' :未经PPM调制的信号function [PPMTHseq,THseq] = PPM_TH(seq,fc,Tc,Ts,dPPM,THcode) % 调制dt = 1 ./ fc;framesamples = floor(Ts./dt); %每个脉冲的样本数chipsamples = floor (Tc./dt);PPMsamples = floor (dPPM./dt);THp = length(THcode);totlength = framesamples*length(seq);PPMTHseq=zeros(1,totlength);THseq=zeros(1,totlength);% 引入TH码和PPM %s(t)=sum(p(t-jTs-CjTc-aE)) for k = 1 : length(seq)% 脉冲位置,表示第几个脉冲-jTsindex = 1 + (k-1)*framesamples;% 引入TH码,-CjTc,表示第几个时隙kTH = THcode(1+mod(k-1,THp));index = index + kTH*chipsamples;THseq(index) = 1;% 引入PPM时移,-aE,表示在时隙内的位置index = index + PPMsamples*seq(k);PPMTHseq(index) = 1;end4、FUNCTION : "TH"% 产生TH码% Np:跳时码周期% Nh:跳时码最大上界function [THcode]=TH(Nh,Np);THcode = floor(rand(1,Np).*Nh);5、FUNCTION : "transmitter_2PPM_TH"%产生UWB信号% 参数定义如下:% Pow:传输功率% fc;抽样频率% numbits:信号比特数% Ns:每比特脉冲数% Np:跳时码周期% Nh:跳时码最大上界% Ts:脉冲重复周期.% Tc:时隙大小% Tm:脉冲持续时间% tau:脉冲成形因子% dPPM:PPM引入时移% 返回值:% bits:产生比特流% THcode:TH码% Stx:产生信号% ref:未经调制的参照信号function [bits,THcode,Stx,ref]=transmitter_2PPM_TH(fc,numbit,Ns,Ts,dPPM) % 输入参数Pow = -30;numbits = numbit;Tc = 1e-9;Nh = 10;Np = 5;Tm = 0.5e-9;tau = 0.2e-9;G = 1;% 模拟发射步骤% 二进制原信号bits = bit(numbits);repbits = repcode(bits,Ns); % 重复编码THcode = TH(Nh,Np); % 产生TH码[PPMTHseq,THseq] = PPM_TH(repbits,fc,Tc,Ts,dPPM,THcode); % 调制% 成形滤波power = (10^(Pow/10))/1000;Ex = power * Ts;w0 = waveform(fc,Tm,tau);wtx = w0 .* sqrt(Ex);Sa = conv(PPMTHseq,wtx);Sb = conv(THseq,wtx);% 产生输出信号L = floor((Ts*fc))*Ns*numbits;Stx = Sa(1:L);ref = Sb(1:L);if G %绘图F = figure(1);set(F,'Position',[30 120 700 400]);clatmax = numbits*Ns*Ts;time = linspace(0,tmax,length(Stx));P = plot(time,Stx);set(P,'LineWidth',[2]);ylow=-1.5*abs(min(wtx));yhigh=1.5*max(wtx);axis([0 tmax ylow yhigh]);AX=gca;set(AX,'FontSize',12);X=xlabel('时间[s]');set(X,'FontSize',14);Y=ylabel('幅度[V]');set(Y,'FontSize',14);for j = 1 : numbitstj = (j-1)*Ns*Ts;L1=line([tj tj],[ylow yhigh]);set(L1,'Color',[0 0 0],'LineStyle', ...%间隔比特的线'--','LineWidth',[2]);for k = 0 : Ns-1if k > 0tn = tj + k*Nh*Tc;L2=line([tn tn],[ylow yhigh]);set(L2,'Color',[0.5 0.5 0.5],'LineStyle', ...%间隔帧的线'-.','LineWidth',[2]);endfor q = 1 : Nh-1th = tj + k*Nh*Tc + q*Tc;L3=line([th th],[0.8*ylow 0.8*yhigh]);set(L3,'Color',[0.5 0.5 0.5],'LineStyle', ...':','LineWidth',[1]); %间隔时隙的线endendendend6、FUNCTION: "waveform"% 产生功率归一化的脉冲波形,这里采用的是高斯波形的二阶导数% 'fc' :抽样频率% 'Tm' :脉冲持续时间% 'tau' :成形参数function [w0]=waveform(fc,Tm,tau);% 产生波形dt = 1 / fc;OVER = floor(Tm/dt);e = mod(OVER,2);kbk = floor(OVER/2);tmp = linspace(dt,Tm/2,kbk);s = (1-4.*pi.*((tmp./tau).^2)).* ...exp(-2.*pi.*((tmp./tau).^2));if e % 奇数for k=1:length(s)y(kbk+1)=1;y(kbk+1+k)=s(k);y(kbk+1-k)=s(k);endelse % 偶数for k=1:length(s)y(kbk+k)=s(k);y(kbk+1-k)=s(k);endendE = sum((y.^2).*dt);w0 = y ./ (E^0.5); %功率归一化7、FUNCTION : "Gnoise"% 为输入信号引入加性白噪声% 矢量'ebno'包含了各个信噪比值% 'numbits':表示发送端发送的比特数目% 输出:% 经噪声污染的信号output,噪声矩阵noise.function [output,noise] = Gnoise(input,exno,numpulses)Ex = (1/numpulses)*sum(input.^2); %一个单脉冲的平均接收能量ExNo = 10.^(exno./10);No = Ex ./ ExNo;nstdv = sqrt(No./2); %噪声的标准差for j = 1 : length(ExNo)noise(j,:) = nstdv(j) .* randn(1,length(input));output(j,:) = noise(j,:) + input;end8、FUNCTION : "IEEEuwb"% 根据IEEE 802.15.SG3a.产生信道冲激响应% 'fc' :抽样频率% 'TMG':信道增益% 返回:% 1) 'h0':信道冲激响应% 2) 'hf':离散信道冲激响应% 3) 'OT':观察时间OT% 4) 'ts':离散分辨率% 5) 'X':信道增益function [h0,hf,OT,ts,X] = IEEEuwb(fc,ag);% ----------------------------% 输入参数% ----------------------------TMG=ag^2 % 信道总多径增益OT = 200e-9; % 观测时间[s]ts = 1e-9; % 离散分辨率[s]LAMBDA = 0.0223*1e9; % 簇平均到达因子(1/s) lambda = 2.5e9; % 簇内脉冲平均到达因子(1/s)GAMMA = 7.1e-9; % 簇衰减因子gamma = 4.3e-9; % 簇内脉冲衰减因子sigma1 = 10^(3.3941/10); % 簇的信道衰减系数偏差sigma2 = 10^(3.3941/10); % 簇内脉冲信道衰减系数偏差sigmax = 10^(3/10); % 信道幅度增益的标准偏差% 脉冲衰减阈值,当exp(-t/gamma)<rdt时,该脉冲忽略rdt = 0.001;% 峰值阈值[dB],只考虑幅度在峰值-PT范围以内的脉冲PT = 50;G = 1;% -----------------------------------% 簇的形成% -----------------------------------dt = 1 / fc; % 采样频率T = 1 / LAMBDA; % 簇平均到达时间t = 1 / lambda; % 簇内脉冲平均到达时间[s]i = 1;CA T(i)=0; % 第一簇到达时间,初始化为0next = 0;while next < OTi = i + 1;next = next + expinv(rand,T); %产生簇的到达时间,服从p(Tn/Tn-1)=lambda*[-exp(Tn/Tn-1)]if next < OTCA T(i)= next;endend% --------------------------------% 路径% --------------------------------NC = length(CA T); % 参考的簇数logvar = (1/20)*((sigma1^2)+(sigma2^2))*log(10);omega = 1;pc = 0; % 多径数量计数器for i = 1 : NCpc = pc + 1;CT = CA T(i);HT(pc) = CT;next = 0;mx = 10*log(omega)-(10*CT/GAMMA);mu = (mx/log(10))-logvar;a = 10^((mu+(sigma1*randn)+(sigma2*randn))/20);HA(pc) = ((rand>0.5)*2-1).*a;ccoeff = sigma1*randn; % 簇衰减while exp(-next/gamma)>rdtpc = pc + 1;next = next + expinv(rand,t);HT(pc) = CT + next;mx = 10*log(omega)-(10*CT/GAMMA)-(10*next/GAMMA);mu = (mx/log(10))-logvar;a = 10^((mu+ccoeff+(sigma2*randn))/20);HA(pc) = ((rand>0.5)*2-1).*a;endend % for i = 1 : NC% 峰值滤波器peak = abs(max(HA));limit = peak/10^(PT/10);HA = HA .* (abs(HA)>(limit.*ones(1,length(HA))));%凡小于limit的脉冲不输出for i = 1 : pcitk = floor(HT(i)/dt);h(itk+1) = HA(i);end% -------------------------------------------% 离散相应形式% -------------------------------------------N = floor(ts/dt);L = N*ceil(length(h)/N);h0 = zeros(1,L);hf = h0;h0(1:length(h)) = h;for i = 1 : (length(h0)/N)tmp = 0;for j = 1 : Ntmp = tmp + h0(j+(i-1)*N);endhf(1+(i-1)*N) = tmp;end% 功率归一化E_tot=sum(h.^2);h0 = h0 / sqrt(E_tot);E_tot=sum(hf.^2);hf = hf / sqrt(E_tot);mux = ((10*log(TMG))/log(10)) - (((sigmax^2)*log(10))/20);X = 10^((mux+(sigmax*randn))/20);h0 = X.*h0;hf = X.*hf;% -----------------------------% 图形输出% -----------------------------if GTmax = dt*length(h0);time = (0:dt:Tmax-dt);figure(1)S1=stem(time,h0);AX=gca;set(AX,'FontSize',14);T=title('信道冲激响应');set(T,'FontSize',14);x=xlabel('时间[s]');set(x,'FontSize',14);y=ylabel('幅度增益');set(y,'FontSize',14);figure(2)S2=stairs(time,hf);AX=gca;set(AX,'FontSize',14);T=title('离散时间冲激响应');set(T,'FontSize',14);x=xlabel('时间[s]');set(x,'FontSize',14);y=ylabel('幅度增益');set(y,'FontSize',14);end9、FUNCTION: "pathloss"% 根据给定的距离d,衰减因子gamma以及1米处的信号c0将输入信号衰减% 函数返回衰减后的信号rx以及信道增益attnfunction [attn] = pathloss(c0,d,gamma)attn = (c0/sqrt(d^gamma));10、FUNCTION : "PPMcorrmask_R"% 为二进制PPM UWB信号的Rake接收机计算相关掩膜mask % 'ref':未经PPM调制的参考信号% 'fc':抽样频率% 'numpulses' :传输脉冲数目% 'dPPM':PPM时移量% 'rake':离散冲激相应function [mask] =PMcorrmask_R(ref,fc,numpulses,dPPM,rake)dt = 1 / fc;LR = length(ref);% 功率归一化Epulse = (sum((ref.^2).*dt))/numpulses;nref = ref./sqrt(Epulse);% Rake 卷积mref = conv(nref,rake);mref = mref(1:LR);%构造相关掩膜PPMsamples = floor (dPPM ./ dt);sref(1:PPMsamples)=mref(LR-PPMsamples+1:LR);sref(PPMsamples+1:LR)=mref(1:LR-PPMsamples);mask = mref-sref;11、FUNCTION :PPMreceiver% 构造2PPM TH UWB 信号的接收机,并计算平均错误率BER % 'R':表示所使用的波形矩阵,一个波形对应于矩阵的一行% 'mask':表示相关掩膜% 'fc':抽样频率% 'bits' 发射机产生的原始二进制比特流% 'Ns' 每比特的脉冲数(即用几个脉冲表示1比特)% 'Ts' 平均脉冲重复周期,即一帧的长度% 函数返回:% 'RXbits' :存储经解调后的二进制数据流% 'BER':存储计算得到的Prb直(误比特率)%function [RXbits,BER] = PPMreceiver(R,mask,fc,bits,numbit,Ns,Ts) HDSD = 2;% HDSD = 1 --> 硬判决,接收机对表示一个比特的Ns个脉冲逐一独立判断。

相关主题