资源描述
(无线局域网场景)
一、PBL问题二:
试设计一个完整的无线通信系统物理层的传输方案,规定满足以下指标:
1. Data rate :54Mbps, Pe<=10-5 with Eb/N0 less than 25dB
2. 20 MHz bandwidth at 5 GHz frequency band
3. Channel model :设系统工作在室内环境,有4条径,无多普勒频移,各径的相对时延为:[0 2 4 6],单位为100ns ,多径系数服从瑞利衰落,其功率随时延变化呈指数衰减:[0 -8 -16 -24]。
请给出以下结果:
A. 收发机结构框图,重要参数设定
B. 误比特率仿真曲线(可假定抱负同步与信道估计)
二、系统选择及设计设计
1、系统规定
20MHz带宽实现5GHz频带上的无线通信系统;
速率规定: R=54Mbps;
误码率规定: Pe <=10^ (-5)。
2、方案选取
根据参数的规定,选择802.11a作为方案的基准,并在此基础上进行一些改善,使实际的系统达成设计规定。
802.11a中对于数据速率、调制方式、编码码率及OFDM子载波数目的拟定如表 1 所示。
Data rate
(Mbits/s)
Modulation
Coding rate
(R)
Code bits per subcarrier
(NBPSC)
Coded bits per OFDM symbol
Data bits per OFDM symbol
(NDPSC)
6
BPSK
1/2
1
48
24
9
BPSK
3/4
1
48
36
12
QPSK
1/2
2
96
48
18
QPSK
3/4
2
96
72
24
16-QAM
1/2
4
192
96
36
16-QAM
3/4
4
192
144
48
64-QAM
2/3
6
288
192
54
64-QAM
3/4
6
288
216
表1 802.11a定义的数据速率、调制方式、编码码率及OFDM子载波数目的
与时延扩展、保护间隔、循环前缀及OFDM符号的连续时间相关的参数如表 2 所示。
Parameter
Value
NSD:Number of data subcarries
48
NSP:Number of pilot subcarries
4
NST:Number of subcarries,total
52(NSD+NSP)
ΔF:Subcarrier frenquency spacing
0.3125MZ(=20MHz/64)
TFFT:IFFT/FFT period
3.2μs(1/ΔF)
TPREAMBLE:PLCP preamble duration
16μs(TSHORT+TLONG)
TSIGNAL:Duration of the SIGNAL BPSK-OFDM symbol
4.0μs(TG1+TFFT)
TG1:G1 duration
0.8μs(TFFT/4)
TG2:G2 duration
1.6μs(TFFT/2)
TSYM:Symbol interval
4μs(TG1+TFFT)
TSHORT:Short training sequence duration
8μs(10*TFFT/4)
TLONG:Long training sequence duration
8μs(TG2+2*TFFT)
表2 1802.11a定义的与时延扩展、保护间隔、循环前缀及OFDM符号的连续时间相关的参数
参考标准选择OFDM系统来实现,具体参数的选择如下述。
3、OFDM简介
OFDM的基本原理是将高速信息数据编码后分派到并行的N个互相正交的子载波上,每个载波上的调制速率很低(1/N),调制符号的连续间隔远大于信道的时间扩散,从而可以在具有较大失真和突发性脉冲干扰环境下对传输的数字信号提供有效的保护。OFDM系统对多径时延扩散不敏感,若信号占用带宽敞于信道相干带宽,则产生频率选择性衰落。OFDM的频域编码和交织在分散并行的数据之间建立了联系,这样,由部分衰落或干扰而遭到破坏的数据,可以通过频率分量增强的部分的接受数据得以恢复,即实现频率分集。
OFDM克服了FDMA和TDMA的大多数问题。OFDM把可用信道提成了许多个窄带信号。每个子信道的载波都保持正交,由于他们的频谱有1/2重叠,既不需要像FDMA那样多余的开销,也不存在TDMA 那样的多用户之间的切换开销。
过去的多载波系统,整个带宽被提成N个子信道,子信道之间没有交叠,为了减少子信道之间的干扰,频带与频带之间采用了保护间隔,因而使得频谱运用率减少,为了克服这种频带浪费,OFDM采用了N个交叠的子信道,每个子信道的波特率是1/T,子信道的间隔也是1/T,这时各个子载波之间是正交的,因而在收端无需将频谱分离即可接受。由于OFDM允许子载波频谱混叠,其频谱效率大大提高,因而是一种高效的调制方式。OFDM的频谱如图1所示。
图1 OFDM信号的频谱示意图
可以证明这种正交的子载波调制可以用IFFT来实现。需要指出的是OFDM既是一种调制技术,也是一种复用技术。图2给出了OFDM的系统框图,在系统中调制解调是使用FFT和IFFT来实现的。
图2 OFDM系统框图
3、参数拟定
在OFDM系统设计中,需要折中考虑各种系统规定,这些需求经常是矛盾的。通常有3个重要的系统规定需要重点考虑:系统带宽W、业务数据速率R及多径时延扩展,涉及时延扩展的均方根和最大值。按照这3个系统参数,设计环节可分为3步。
一方面,拟定保护时间。多径时延扩展直接决定了保护时间的大小。作为重要的设计准则,保护时间至少是多径时延扩展的均方根的2-4倍,即(2-4) 。保护时间的取值依赖于系统的信道编码与调制类型。高阶调制(如64QAM)比低阶调制(如QPSK)对于ICI和ISI的干扰更加敏感。,而编码的纠错能力过目越强,越能减少这种对干扰的敏感特性。
一旦保护时间拟定,则OFDM的符号周期也就拟定就可以拟定,其中T表达IFFT的积分时间,其倒数就是相邻载波的间隔,即。为了尽也许地减小由于保护时间导致的信噪比的损失,一般规定符号周期远大于保护时间。但是,符号连续时间并不是越长越好,因这符号连续时间越长,则意味着需要的子载波数目越多,相邻子载波机的间隔就会越小,增长了收发信机的实现复杂度,并且系统对于相位噪声和频率偏移更加敏感,还增大了系统的峰值-平均功率(PAPR)。在实际系统设计中,OFDM符号周期至少是保护时间的5倍,这就意味着,由于引入了冗余时间,信噪比会损失1dB左右。
拟定了保护时间和符号周期后,就需要在3dB的带宽内,决定子载波的数目。一种方法是直接计算,即。另一种方法是,载波数目可以根据总数据比特速率除以每个子载波承载的比特速率得到。子载波的比特速率与调制类型、编码码率和符号速率都在关系。本系统采用第二种方法拟定子载波的数目
具体的参数如下所示:
参数设计
说明
symbol_num = 10000
发送的符号数(number of symbols to be transmitted )
fp = 5e9
中心频率(central frequency )
fc = 20e6
抽样频率(sampling frequency)
Ts= 50e-9
抽样时间(sampling time)
T0= 2.4e-6
data length (=48*50e-9)
TP= 0.8e-6
cyclic prefix (=16*50e-9)
TG = 0.8e-6
total guard time (=16*50e-9
T=T0+TP+TG
OFDM符号周期4000ns:(满足TP/T=20%)
A = 1
amplitude of the rectangular impulse response
N = 64
number of carriers of the OFDM system
1) 一方面计算信息量。由R达成54Mbps可以得到每个OFDM块需要承载的信息量为:
54*10^6*4*10^(-9) = 216bit
2) 选择调制方式。采用64QAM调制,一个子载波6bit则需要216/6 = 36个子载波。
3) 编码。采用3/4码率的卷积码编码,所需子载波数目为36/(3/4)=48个。
4) 计算传输速率:R=(48*6bit*3/4)/(4000*10^(-9))=54Mbps
以上设计满足系统的规定。
三、系统实现
1、收发机框图
根据上述系统设计,收发机框图设计如下图所示:
图3 收发机框图
2、系统模块接口
数据产生: data_transmit=randint(1,num*symbol_num);
卷积码编码: trel=poly2trellis([3 3 3],[7 7 0 4;3 2 7 4;0 2 3 7]);
[data_conv,fstate] = convenc(data_transmit,trel);
64QAM调制:data_mod=modulate(data_conv);
64QAM解调:data_demod=demodulate(data_fft_ps);
卷积码译码: tblen = 3*1000; % Traceback length
data_receive = vitdec(data_vitdec_in,trel,tblen,'trunc','soft',1)。
3、程序流程图
根据系统设计和收发机框图,编码实现该系统。程序流程如下图所示:
图4 程序流程图
4、程序清单(见附录)
四、系统仿真结果及分析
1、64QAM的星座图:
图5 16QAM星座图
图6 64QAM仿真图
2、通过多径信道的信号波形:
图7 通过多径信道后的输出波形
3、在多径信道中叠加AGWN后的波形:
图7 叠加AGWN后的输出波形
4、均衡前:
图8 均衡前的波形
5、均衡后:
图9 均衡后的波形
均衡后各点的幅度变化范围在[-7,+7]之间,这与星座点取值(-7-7j,……,+7+7j)有关。
6、误比特率曲线:
图10 误比特率
误比特率,运用转换公式,得到。
五、总结
1、系统设计总结
根据Matlab程序运营后的仿真结果,可以得到验证,即:
我们所设计的OFDM系统可以满足系统设计规定:
20MHz带宽实现5GHz频带上的无线通信系统;
速率规定: R=54Mbps;
误码率规定: Pe <=10^ (-5)。
2、设计中碰到的问题和解决
1)时域均衡时间的选择
由数字信号解决的理论可知,只有时域的循环卷积,才等效为频域的线性相乘。所以,均衡的位置应当在去CP之后,而不能在一开始就进行频域均衡,由于一开始不是循环卷积,不能等效为频域的线性乘法。
因此,频域均衡位置应当在去CP之后,FFT正好是去CP之后,所以可以在FFT之后进行频域均衡。
2)噪声能量的计算原理
文献所给的Eb/N0是指接受端的信噪比,加噪声要根据Eb的值算出相应的噪声。可以在经历框图的每一模块时,看其能量是否发生了变化,并将其归一化,保证系统是无源的系统,不会因此而影响输出结果。注意的是FFT和IFFT可以对输入它的信号能量进行改变,要进行一些解决。如信号进行IFFT之后的能量会减小为本来的1/N,要对其进行能量的计算,而FFT之后,信号的能量会增大为本来的N倍,也要进行能量计算,保证信号通过的都是无源的模块。
OFDM能否克服样值间干扰,样值干扰与ICI OFDM消除干扰是在频域中进行的,由于循环卷积就等于频域的线性相乘,没有收入干扰。所提这里的样值干扰是指时域上的干扰,在时域看来是有干扰的,并不能消除它;在频域看来,各个子载波是独立的,没有互相间的干扰,即没有ICI。
OFDM消除干扰是在频域中进行的,由于循环卷积就等于频域的线性相乘,没有收入干扰。所提这里的样值干扰是指时域上的干扰,在时域看来是有干扰的,并不能消除它;在频域看来,各个子载波是独立的,没有互相间的干扰,即没有ICI。
因此,OFDM系统在时域上是有样值干扰的,但是在频域上没有ICI的。
附录
1、 主程序:
文献名:run.m
%------------------------------无线通信系统实现-----------------------------
%
% *************************************************************************
% 一、系统规定:
% *************************************************************************
%
% 实现20MHz带宽5GHz频带上的无线通信系统
% 满足速率规定: R=54Mbps;
% 误码率规定: 在 25dB信噪比条件下,Pe <=10^ (-5);
%
%**************************************************************************
% 二、参数拟定:
% *************************************************************************
%
% symbol_num = 10000; % 发送的符号数
% fp = 5e9; %中心频率
% fc = 20e6; % 抽样频率
% Ts = 50e-9 %抽样时间
% T0 = 2.4e-6; % 数据长度 (=48*50e-9)
% TP = 0.8e-6; % cyclic prefix (=16*50e-9)
% TG = 0.8e-6; % total guard time (=16*50e-9)
% T=T0+TP+TG; % OFDM符号周期4000ns:(满足TP/T=20%)
% A = 1; % amplitude of the rectangular impulse response
% N = 64; % number of carriers of the OFDM system
%
% ------------------------------------------------------------------------
%
% 由R达成54Mbps可以得到每个OFDM块需要承载的信息量为:
% 54*10^6*4*10^(-9)=216bit,采用64QAM星座映射,
% 一个载波承载6bit,仅需36个子载波,采用3/4 码率,
% 所需的子载波数为48.此时可达成的传输速率为
% R=(48*6bit*3/4)/(4000*10^(-9))=54Mbps, 符合系统规定。
% R=3/4; %编码效率
%
% *************************************************************************
clear all;
close all;
clc;
data_carrier_num=48;
carrier_num=64;
R=3/4; %卷积码的编码效率
i1=0; % 中间变量
err_ratio=zeros(1,31);
for EbN0dB=0:1:30
sum_xu=0;
for loop=1:100
symbol_num=10000; % 符号个数
cp_len=16; % 循环前缀长度
% 数据产生
num=64*6*3/4;
data_transmit=randint(1,num*symbol_num);
% 卷积码编码
trel=poly2trellis([3 3 3],[7 7 0 4;3 2 7 4;0 2 3 7]);
[data_conv,fstate] = convenc(data_transmit,trel);
% 采用64QAM调制
data_mod=modulation(data_conv);
% 数据通过IFFT变换
data_ifft_in=reshape(data_mod,64,length(data_mod)/64);
data_ifft_out=ifft(data_ifft_in);
% 加CP
data_cp=[data_ifft_out((size(data_ifft_out,1)-cp_len+1:end),:);data_ifft_out];
data_ps=reshape(data_cp,1,size(data_cp,1)*size(data_cp,2));
% 输出符号能量的归一化
data_ps=data_ps.*8;
Es=1;
Eb=Es*1/R*80/64*1/6;
N0=Eb./10^(EbN0dB/10);
sigma=sqrt(N0/2);
% % ------------------------------ 数据通过信道(down)----------------------------%
symbol_input=data_ps;
% 每径时延功率【0 -8 -16 -24】dB 转化成功率值
atten_power = [1 0.1585 0.0251 0.0040];
% 50ns样点间隔 每径时延【0 200 400 600】ns 转化成样点数表达
path_delay = [0 4 8 12];
% 求信号幅度衰减,并归一化总功率
atten = sqrt( atten_power );
atten = atten./sqrt(sum(atten.*conj(atten)));
% 输出样值序列
output = zeros(1,length(symbol_input)+ max(path_delay));
h = zeros(1,max(path_delay)+1);
for k = 1:length(path_delay)
signal=symbol_input.*atten(k);
output=output+[zeros(1,path_delay(k)),signal,zeros(1,max(path_delay)-path_delay(k))];
h=h+[zeros(1,path_delay(k)),atten(k),zeros(1,max(path_delay)-path_delay(k))];
end
symbol_output=output;
% %------------------------- 数据通过信道(up)---------------------------------%
%----------------------------add noise (down)--------------------------------%
output=symbol_output+sigma.*randn(1,length(symbol_output))+i*sigma.*randn(1,length(symbol_output));
output=output(1:length(symbol_input));
%---------------------------add noise (up)-----------------------------------%
% 去CP
temp=reshape(output,cp_len+carrier_num,length(output)./(cp_len+carrier_num));
data_fft_in=temp(cp_len+1:end,:);
% FFT变换
data_fft_out=fft(data_fft_in);
%--------------------------------------频域均衡(down)------------------------%
h_t=[h,zeros(1,carrier_num-length(h))]';
H=fft(h_t);
data_balance=zeros(size(data_fft_out));
for m1=1:size(data_fft_out,2)
data_balance(:,m1)=data_fft_out(:,m1)./H;
end
%------------------------------------------频域均衡(up)-----------------------%
% 64QAM解调
data_fft_ps=reshape(data_balance,1,size(data_balance,1)*size(data_balance,2));
data_fft_ps=data_fft_ps./8;
data_demod=demodulation(data_fft_ps);
data_vitdec_in=data_demod;
% 卷积码译码
tblen = 3*100; % Traceback length
data_receive = vitdec(data_vitdec_in,trel,tblen,'trunc','soft',1); %soft decision
sum_xu=sum_xu+sum(abs(data_receive-data_transmit));
end
i1=i1+1;
err_ratio(i1)=sum_xu./(num*symbol_num*loop);
end
semilogy(0:1:30,err_ratio);
hold on;
semilogy(0:1:30,err_ratio,'*');
grid on;
2、函数模块:
⑴ 64QAM调制函数:
文献名:modulation.m
function mod_out=modulation(mod_in)
if rem(length(mod_in),6)~=0 %%假如输入二进制序列数不是6的倍数则进行补零操作
mod_in=[zeros(1,6-rem(length(mod_in),6)),mod_in];
end
mod_out=zeros(1,length(mod_in)/6);
R=reshape(mod_in,6,length(mod_in)/6); %%将输入序列变换为行数为6的矩阵形式
B2D=bi2de(R','left-msb')+1; %%将二进制数转换为十进制数
Temp=[-7-7*j -7-5*j -7-j -7-3*j -7+7*j -7+5*j -7+j -7+3*j...
-5-7*j -5-5*j -5-j -5-3*j -5+7*j -5+5*j -5+j -5+3*j...
-1-7*j -1-5*j -1-j -1-3*j -1+7*j -1+5*j -1+j -1+3*j...
-3-7*j -3-5*j -3-j -3-3*j -3+7*j -3+5*j -3+j -3+3*j...
7-7*j 7-5*j 7-j 7-3*j 7+7*j 7+5*j 7+j 7+3*j...
5-7*j 5-5*j 5-j 5-3*j 5+7*j 5+5*j 5+j 5+3*j...
1-7*j 1-5*j 1-j 1-3*j 1+7*j 1+5*j 1+j 1+3*j...
3-7*j 3-5*j 3-j 3-3*j 3+7*j 3+5*j 3+j 3+3*j ]./sqrt(42); %%星座映射矩阵
for i=1:length(mod_in)/6
mod_out(i)=Temp(B2D(i));
end
scatterplot(mod_out); %%显示星座映射图
⑵ 64QAM解调函数:
文献名:demodulation.m
function [demod_out] = demodulation(demod_in)
d=zeros(64,length(demod_in));
D=zeros(64,length(demod_in));
m=zeros(1,length(demod_in));
temp=[-7-7*j -7-5*j -7-j -7-3*j -7+7*j -7+5*j -7+j -7+3*j...
-5-7*j -5-5*j -5-j -5-3*j -5+7*j -5+5*j -5+j -5+3*j...
-1-7*j -1-5*j -1-j -1-3*j -1+7*j -1+5*j -1+j -1+3*j...
-3-7*j -3-5*j -3-j -3-3*j -3+7*j -3+5*j -3+j -3+3*j...
7-7*j 7-5*j 7-j 7-3*j 7+7*j 7+5*j 7+j 7+3*j...
5-7*j 5-5*j 5-j 5-3*j 5+7*j 5+5*j 5+j 5+3*j...
1-7*j 1-5*j 1-j 1-3*j 1+7*j 1+5*j 1+j 1+3*j...
3-7*j 3-5*j 3-j 3-3*j 3+7*j 3+5*j 3+j 3+3*j ]./sqrt(42);
for i=1:length(demod_in)
for n=1:64
d(n,i)=(abs(demod_in(i)-temp(n))).^2;
end
[min_distance,constellation_point] = min(d(:,i)) ; %D(:,i)=sort(d(:,i));
%排序 (sort the distance in ascending order.)
m(i) = constellation_point;
end
A=de2bi([0:63],'left-msb'); %%将十进制数转换为二进制数
for i=1:length(demod_in)
DEMOD_OUT(i,:)=A(m(i),:);
end
demod_out=reshape(DEMOD_OUT',1,length(demod_in)*6); %%将解调出的序列按行输出
展开阅读全文