1 简介
通信的发展日新月异,PPM-UWB通信技术是移动通信的前沿技术,阐述PPM基本原理,利用MATLAB仿真工具对PPM的原理进行仿真,从而以图示方法,能够更加形象的说明,并剖析PPM基本特性和MATLAB仿真技巧.
2 完整代码
%%% 本程序在不考虑多径的情况下,并已知同步时采用干净的本地脉冲信号对跳时ppm系统进行解调 %%%
clear all
Ts=0.4*10^(-9);%the bandwidth is 1/(2*Ts)=2.5*10^9;
%------------------------------
Tbit=16*10^(-9);%the peiod of bit;
fbit=1/Tbit;%speed of transmitted;
%---------------------------------
Tsample=Tbit/10;%the sampling frequency;
fsample=1/Tsample;%frequency of sampling;
%------------------------------------
sampling_point=fsample/fbit; % the number of sampling point in a bit
n=-(sampling_point/2)+1:sampling_point/2; %sampling point
fc=2.5*10^9;%脉冲谱的中心频率
e=exp(1);
t_delay=10;%ppm调制时的时延;
Nf=2;%一个符号用Nf个帧表示;
N=10;M=195;MM=10000;
Ebn0=[-2:2:12];
point_num=2*M+sampling_point;
%信号的行式:
a=0.2;
Tc=0.2;
n=0:0.04:0.36;
s=(1-4*pi*((n-Tc)/a).^2).*exp(-2*pi*((n-Tc)/a).^2);
R=3;
s1=[zeros(1,t_delay) s];
zero_serio=zeros(1,2*M);
zero_serio1=zeros(1,2*M-t_delay);
zero_serio2=zeros(1,t_delay);
ss=[s zero_serio];
sss=[s1 zero_serio1];
zero1=zeros(1,M);
matching_sig=[zero1 s zero1];
ss_rep0=repmat(ss,1,Nf);
ss_rep1=repmat(sss,1,Nf);
power=((norm(ss))^2)/point_num;%一个脉冲的能量;
% 产生一本地信号;
local_sig1=[s (-1)*s zeros(1,point_num-2*sampling_point)];%1*400;
PN_code0=[0,1,1,1,0,1,1,0,0,0,1,1,1,1,1,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,1];
PN_code1=[14,29,27,22,12,24,17,3,7,15,31,30,28,25,19,6,13,26,20,9,18,4,8,16,1,2,5,10,21,11,23];
%计算误码率;
j=1;
ebn0_num=0;
for num=1:2:15
ebn0_num=ebn0_num+1;
ebn0=num-3;
sita=sqrt((power*point_num*0.5)/(10^(ebn0/10)));
for calculate_num=1:MM
%产生信源
source_date=randint(1,N);
%进行ppm调制
date_modulated=[];local_sig=[];
for i=1:N
if source_date(i)==1
date_modulated1=ss_rep1;
else
date_modulated1=ss_rep0;
end
g1=zeros(1,point_num);
g2=zeros(1,point_num);
b1=zeros(1,point_num);
b2=zeros(1,point_num);
if (j>0)&(j<31)
for z=1:20
g1(PN_code1(j)*10+z)=date_modulated1(z);
g2(PN_code1(j+1)*10+z)=date_modulated1(point_num+z);
end
for z=1:2*sampling_point
b1(PN_code1(j)*10+z)=local_sig1(z);
b2(PN_code1(j+1)*10+z)=local_sig1(z);
end
elseif j==31
for z=1:2*sampling_point
g1(PN_code1(j)*10+z)=date_modulated1(z);
g2(PN_code1(1)*10+z)=date_modulated1(point_num+z);
end
for z=1:2*sampling_point
b1(PN_code1(j)*10+z)=local_sig1(z);
b2(PN_code1(1)*10+z)=local_sig1(z);
end
j=0;
else
j=1;
for z=1:2*sampling_point
g1(PN_code1(j)*10+z)=date_modulated1(z);
g2(PN_code1(j+1)*10+z)=date_modulated1(point_num+z);
end
for z=1:2*sampling_point
b1(PN_code1(j)*10+z)=local_sig1(z);
b2(PN_code1(j+1)*10+z)=local_sig1(z);
end
end
date_modulated=[date_modulated g1 g2];
local_sig=[local_sig b1 b2];
j=j+2;
end
%对调制信号加噪
signal_length=length(date_modulated);
noise=sita*randn(1,signal_length);
signal_addnoise=date_modulated+noise;
%对收到的信号进行配匹滤波
%for a=1:sampling_point
% filter_coff_num(a)=s(sampling_point-a+1);
%end
%sig_after_filter=filter(filter_coff_num,1,signal_addnoise);
%sig_after_filter=sig_after_filter((sampling_point/2+1):signal_length);
%sig_after_filter=[sig_after_filter zeros(1,sampling_point/2)];
%对信号进行解调
%for m=1:N
% for k=1:800
% relate(k)=signal_addnoise((m-1)*point_num*2+k)*local_sig((m-1)*point_num*2+k);
% end
% relate_sum(m)=sum(relate);
% end
%判决
% for r=1:N
%% if relate_sum(r)>0
% date_demodulated(r)=0;
% else
% date_demodulated(r)=1;
% end
% end
%计算误码率
% err=Nnz(date_demodulated-source_date)/N;
% sumerr_ratio(calculate_num)=err;
end
% err_ratio(ebn0_num)=sum(sumerr_ratio)/MM
end
figure(1)
subplot(2,1,1);
plot(date_modulated);xlabel('TIME');ylabel('AMPLITUDE');
title('调制信号');
subplot(2,1,2);
plot(signal_addnoise);xlabel('TIME');ylabel('AMPLITUDE');
title('加噪后的调制信号');
grid on;
%UWB-Run from editor debug(F5)-PPM(pulse position modulation)and link analysis of
%UWB monocycle and doublet waveforms.
%传统的UWB系统使用一种被称为单周期monocycle脉形的脉冲
%This m file plots the time and frequency waveforms for PPM 1st and 2nd
%derivative (导数)
%equations used in UWB system analysis. Fudge factors (附加因素)are required to
%correct for inaccuracies in the 1st and 2nd derivative equations.
%Tail to tail on the time wave forms must be considered as the actual pulse width.
%7*PW1 has about 99.9% of the signal power. The frequency spreads and center
%frequencies(fc=center of the spread)are correct as you can verify(fc~1/pw1).
%Change pw(fudge factor)and t for other entered(pw1) pulse widths and
%zooming in on the waveforms.A basic correlation receiver is constructed
%showing the demodulated output information from a comparator(10101)比较器. Perfect sync
%is assumed in the correlation receiver.
%See SETUP and other info at end of program.
%The program is not considered to be the ultimate in UWB link analysis, but is
%configured to show basic concepts of the new technology.
%================================================
pw1=.5e-9;%pulse width in nanosec(纳秒,十亿分之一秒),change to desired width
pw=pw1/2.5;%Fudge factor for inaccurate PWs(approx. 4-5 for 1st der. and
%approx. 2-3 for 2nd der.)
Fs=100e9;%sample frequency
Fn=Fs/2;%Nyquist frequency
t=-1e-9:1/Fs:20e-9;%time vector sampled at Fs Hertz. zoom in/out using (-1e-9:1/Fs:xxxx)
A=1;
%================================================
% EQUATIONS
%================================================
%y=A*(t/pw).*exp(-(t/pw).^2);%1st derivative of Gaussian pulse=Gaussian monocycle
y =A*(1 - 4*pi.*((t)/pw).^2).* exp(-2*pi.*((t)/pw).^2);%2nd derivative of Gaussian
%pulse=doublet(two zero crossings)
% y=y.*sin((2*pi*t*4.5e9).^2)%spectrum notches(multipath)
%================================================
%This series of pulses sets the pulse recurring frequency(PRF)
%at 400MHz(waveform repeats every 2.5e-9 sec)and a
%modulated bit stream(info bit rate=200MHz) of 10101 (5 pulses,can add more)
%using 0.2e-9 as the time delay PPM where a delay = a 0 bit and no delay = a 1 bit.
%One could expand the # of pulses and modulate for a series of
%111111000000111111000000111111 which would give a lower bit rate. You could just
%change the PRF also.This series of redundent pulses also improves the processing gain
%of the receiver by giving more voltage out of the integrator in a correlation
%receiver. For loops or some other method could be used to generate these pulses but for
%myself, I would get lost. This is a brute force method and I can easily copy and paste.
%I will leave that for more energetic souls. Since we basically have the transmitter
%implemented it's time to move on to the correlation receiver design
%and and add interference, multipath and noise with BER capability to
%see if we can demodulate and get 10101 bits out at the 200MHz information bit rate.
% (changed pattern from previous file to 10101)
%==================================================
% 1ST DERIVATIVE MONOCYCLE(PPM WITH 5 PULSES)
%==================================================
%yp=y+ ...
%A*((t-2.5e-9-.2e-9)/pw).*exp(-((t-2.5e-9-.2e-9)/pw).^2)+A*((t-5e-9)/pw).*exp(-((t-5e-9)/pw).^2)+ ...
%A*((t-7.5e-9-.2e-9)/pw).*exp(-((t-7.5e-9-.2e-9)/pw).^2)+A*((t-10e-9)/pw).*exp(-((t-10e-9)/pw).^2);
%==================================================
% 2ND DERIVATIVE DOUBLET(PPM WITH 5 PULSES)
%==================================================
%modulated doublet
yp=y+ ...
A*(1-4*pi.*((t-2.5e-9-.2e-9)/pw).^2).*exp(-2*pi.*((t-2.5e-9-.2e-9)/pw).^2)+ ...
A*(1-4*pi.*((t-5.0e-9)/pw).^2).*exp(-2*pi.*((t-5.0e-9)/pw).^2)+ ...
A*(1-4*pi.*((t-7.5e-9-.2e-9)/pw).^2).*exp(-2*pi.*((t-7.5e-9-.2e-9)/pw).^2)+ ...
A*(1-4*pi.*((t-10e-9)/pw).^2).*exp(-2*pi.*((t-10e-9)/pw).^2);
%unmodulated doublet
B=1;%This shows how the anplitude matching of templet and modulated signal
%plays an important part. Would require AGC on first LNA to hold modulated
%sig constant within an expected multipath range.(B=.4 to .5 causes errors).
yum=B*y+ ...
B*(1-4*pi.*((t-2.5e-9)/pw).^2).*exp(-2*pi.*((t-2.5e-9)/pw).^2)+ ...
B*(1-4*pi.*((t-5.0e-9)/pw).^2).*exp(-2*pi.*((t-5.0e-9)/pw).^2)+ ...
B*(1-4*pi.*((t-7.5e-9)/pw).^2).*exp(-2*pi.*((t-7.5e-9)/pw).^2)+ ...
B*(1-4*pi.*((t-10e-9)/pw).^2).*exp(-2*pi.*((t-10e-9)/pw).^2);
yc=yp.*yum;%yc(correlated output)=yp(modulated)times yum(unmodulated) doublet.
%This is where the correlation occurs in the receiver and would be the
%first mixer in the receiver.
%==================================================
% FFT
%==================================================
%new FFT for modulated doublet
y=yp;%y=modulated doublet
NFFY=2.^(ceil(log(length(y))/log(2)));
FFTY=fft(y,NFFY);%pad with zeros
NumUniquePts=ceil((NFFY+1)/2);
FFTY=FFTY(1:NumUniquePts);
MY=abs(FFTY);
MY=MY*2;
MY(1)=MY(1)/2;
MY(length(MY))=MY(length(MY))/2;
MY=MY/length(y);
f=(0:NumUniquePts-1)*2*Fn/NFFY;
%new fft for unmodulated doublet
y1=yum;%unmodulated doublet
NFFY1=2.^(ceil(log(length(y1))/log(2)));
FFTY1=fft(y1,NFFY1);%pad with zeros
NumUniquePts=ceil((NFFY1+1)/2);
FFTY1=FFTY1(1:NumUniquePts);
MY1=abs(FFTY1);
MY1=MY1*2;
MY1(1)=MY1(1)/2;
MY1(length(MY1))=MY1(length(MY1))/2;
MY1=MY1/length(y1);
f=(0:NumUniquePts-1)*2*Fn/NFFY1;
%new fft for correlated yc
y2=yc;%y2 is the time domain signal output of the multiplier
%(modulated times unmodulated) in the correlation receiver. Plots
%in the time domain show that a simple comparator instead of high speed A/D's
%could be used to recover the 10101 signal depending on integrator design.
%I have not included an integrator in the program but it would be a properly
%constructed low pass filter in an actual receiver.
NFFY2=2.^(ceil(log(length(y2))/log(2)));
FFTY2=fft(y2,NFFY2);%pad with zeros
NumUniquePts=ceil((NFFY2+1)/2);
FFTY2=FFTY2(1:NumUniquePts);
MY2=abs(FFTY2);
MY2=MY2*2;
MY2(1)=MY2(1)/2;
MY2(length(MY2))=MY2(length(MY2))/2;
MY2=MY2/length(y2);
f=(0:NumUniquePts-1)*2*Fn/NFFY2;
%===================================================
% PLOTS
%===================================================
%plots for modulated doublet
figure(1)
subplot(2,2,1); plot(t,y);xlabel('TIME');ylabel('AMPLITUDE');
title('Modulated pulse train');
grid on;
axis([-1e-9,20e-9 -1 1])
subplot(2,2,2); plot(f,MY);xlabel('FREQUENCY');ylabel('AMPLITUDE');
%axis([0 10e9 0 .1]);%zoom in/out
grid on;
subplot(2,2,3); plot(f,20*log10(MY));xlabel('FREQUENCY');ylabel('20LOG10=DB');
%axis([0 20e9 -120 0]);
grid on;
%plots for unmodulated doublet
figure(2)
subplot(2,2,1); plot(t,y1);xlabel('TIME');ylabel('AMPLITUDE');
title('Unmodulated pulse train');
grid on;
axis([-1e-9,10e-9 -1 1])
subplot(2,2,2); plot(f,MY1);xlabel('FREQUENCY');ylabel('AMPLITUDE');
%axis([0 10e9 0 .1]);%zoom in/out
grid on;
subplot(2,2,3); plot(f,20*log10(MY1));xlabel('FREQUENCY');ylabel('20LOG10=DB');
%axis([0 20e9 -120 0]);
grid on;
%plots for correlated yc
figure(3)
subplot(2,2,1); plot(t,y2);xlabel('TIME');ylabel('AMPLITUDE');
title('Receiver correlator output');
grid on;
axis([-1e-9,10e-9 -1 1])
subplot(2,2,2); plot(f,MY2);xlabel('FREQUENCY');ylabel('AMPLITUDE');
axis([0 7e9 0 .025]);%zoom in/out
grid on;
subplot(2,2,3); plot(f,20*log10(MY2));xlabel('FREQUENCY');ylabel('20LOG10=DB');
%axis([0 20e9 -120 0]);
grid on;
%================================================
%Comparator
%================================================
pt=.5;%sets level where threshhold device comparator triggers
H=5;%(volts)
L=0;%(volts)
LEN=length(y2);
for ii=1:LEN;
if y2(ii)>=pt;%correlated output(y2) going above pt threshold setting
pv(ii)=H;%pulse voltage
else;
pv(ii)=L;
end;
end ;
po=pv;%pulse out=pulse voltage
figure(4)
plot(t,po);
axis([-1e-9 11e-9 -1 6])
title('Comparator output');
xlabel('Frequency');
ylabel('Voltage');
grid on;
%===================================================
%SETUP and INFO
%===================================================
%Enter desired pulse width in pw1(.5e-9).
%Change t=-1e-9:1/Fs:(xxxx) to 1e-9.
%Press F5 or run.
%With waveform in plot 2,2,1, set pulse width with fudge factor to .5e-9
%using #s corresponding to chosen waveform. Set from tail to tail.
%Change t=-1e-9:1/Fs:(xxx) to something like 20e-9.Zoom out. I would
%comment in all plot axis and use them for zooming in and out.
%Press F5 and observe waveforms. Print waveforms to compare with next set of
%wave forms.
%Pick another waveform by commenting out existing waveform and repeat as above.
%When you compare the waveforms you will see that the second derivative
%doublet has a center frequency in the spread twice that of the first
%derivative monocycle.
%You would expect this on a second derivative. Picking a doublet waveform
%for transmission (by choice of UWB antenna design) pushes the fc center frequency
%spread out by (two) allowing relief from the difficult design of narrower pulse
%generating circuits in transmitters and receivers. If you chose a monocycle, you would
%need to design your pulse circuits with a much narrower(factor of two)pulse width to
%meet the tough FCC spectral mask from ~3 to 10GHz at-40Dbm. I would guess a
%pulse width of ~ 0.4 to 0.45 nanosec using a doublet at the proper amplitude(A)
%would meet the requirements. The antenna choice at the receiver could
%integrate the doublet to a monocycle so a wave form for the modulated
%monocycle is included. You woud need to construct an unmodulated version
%of the monocycle. Also an unmodulated monocycle template could correlate with a
%modulated doublet extracting the information but the proper sense of the
%monocycle would be required along with proper information delay setup in
%the equations.
%You can zoom in on the waveforms of plot 2,2,1 to see the PPM
%delays generating 10101. Use axis on plot 2,,2,1 for better
%zooming.Comment in the axis.
%Processing gains of greater than 20DB can be achieved by selection of the
%PRF and integrator using high information bit rates. This, when doing a
%link budget, should give enough link margin for multipath conditions with
%a fixed transmitter power at ranges of 3 to 10 meters.
%I didn't include BER checking with noise in the program because I beleive many more
%pulses would be required to get the true picture.
%Perfect sync is assumed in the correlation receiver. You could delay the
%unmodulated doublet waveform and check the correlation properties of the
%waveforms at the receiver and observe how the S/N(or output signal since no noise has been
%added to the program) degrades when not in perfect sync.
%Things to add
%A.more pulses
%B.integrator
%C.noise
%D.BER
3 仿真结果
4 参考文献
[1]陈志贵. (2008). 基于ppm调制的超宽带(uwb)无线电通信. 机电产品开发与创新, 21(6), 3.