80211a基于FPGA的ofdm.docx
《80211a基于FPGA的ofdm.docx》由会员分享,可在线阅读,更多相关《80211a基于FPGA的ofdm.docx(11页珍藏版)》请在冰豆网上搜索。
80211a基于FPGA的ofdm
802.11a的仿真报告。
协议参数表格:
(1)取决于速率的参数
速率
调制方式
编码率
每个子载波的编码比特N-BPSC
每个OFDM符号的编码比特N-CBPS
每个OFDM符号的数据比特N-DBPS
6Mb/s
BPSK
1/2
1
48
24
9Mb/s
BPSK
3/4
1
48
36
12Mb/s
QPSK
1/2
2
96
48
18Mb/s
QPSK
3/4
2
96
72
24Mb/s
16-QAM
1/2
4
192
96
36Mb/s
16-QAM
3/4
4
192
144
48Mb/s
64-QAM
2/3
6
288
196
54Mb/s
64-QAM
3/4
6
288
216
(2)与定时有关的参数
参数
值
N_SD:
数据子载波数
48
N_SP:
导频子载波数
4
N_ST:
子载波总数
52
df:
子载波频率间隔
0.3125MHz
T_PREAMBLE:
PLCP前导码持续时间
16us
T_SIGNAL:
SIGNAL字段BPSK-OFDM符号的持续时间
4us
T_GI:
GI持续时间
0.8us
T_GI2:
训练符号的GI持续时间
1.6us
T_SYM:
符号间隔
4us
T_SHORT:
段训练序列的持续时间
8us
T_LONG:
长训练序列的持续时间
8us
T_FFT:
IFFT、FFT周期
3.2us
802.11a协议的仿真分为三部分:
发射部分、信道部分、接收部分。
一、发射端
(1)产生长短序列即PLCP前导码。
其作用是实现同步,由10个短符号和2个长符号组成。
短训练符号由12个子载波组成,子载波由序列S进行调制。
S=sqrt(13/6)*[0,0,1+j,0,0,0,-1-j,0,0,0,1+j,0,0,0,-1-j,0,0,0,-1-j,0,0,0,1+j,0,0,0,0,0,0,0,-1-j,0,0,0,-1-j,0,0,0,1+j,0,0,0,1+j,0,0,0,1+j,0,0,0,1+j,0,0];
短训练符的产生公式:
长训练符号由53个子载波组成,子载波由序列L进行调制。
L=[1,1,-1,-1,1,1,-1,1,-1,1,1,1,1,1,1,-1,-1,1,1,-1,1,-1,1,1,1,1,0,1,-1,-1,1,1,-1,1,-1,1,-1,-1,-1,-1,-1,1,1,-1,-1,1,-1,1,-1,1,1,1,1];
长训练符的产生公式为:
(2)产生SIGNAL字段
SIGNAL包括速率、长度、尾部、保留比特(R)和校验位(P)。
其结构如下图:
速率(4bit)
R
长度(12bit)
P
尾部(6bit)
0,1,2,3
4
5,6,7,…,14,15,16
17
18,19,…,23,24
上图的发送顺序从左到右,可以看出SIGNAL字段的长度是12。
速率码元表示由下表给出:
速率(Mbit/s)
0,1,2,4
6
1101
9
1111
12
0101
18
0111
24
1001
36
1011
48
0001
54
0011
长度段表示所传输信息的八位位组数,共12bit,最左边是最低位,最右边是最高位。
此程序中长度L=100,则LENGTH=[001001100000]。
尾部信号6bit全为零,奇偶校验位P是前17个比特的正想奇偶校验,R为保留比特。
(3)产生DATA字段
DATA包括SERVICE、PSDU和TAIL。
其中SERVICE为16bit的零,前7个比特为了解扰器同步,剩下的是保留比特;TAIL为6个比特的零;可能会有填充比特PAD,其目的是将DATA变成N_DBPS的整数倍,其计算方法为:
(4)对SIGNAL和DATA进行加扰
加扰器的生成多项式为:
初始状态为全1时,加扰器产生的比特为:
(5)进行卷积编码
下图是编码速率R=1/2的卷积码产生框图:
对于数据B,g=[1,0,0,1,1,1,1],用移动窗的方法来求的B。
六个寄存器的初始值都为零,令G=[zeros(1,6)sequence],sequence为输入数据,输入数据和输出数据长度一样,令其为N,n=1:
N,n数依次递增,G(n:
n+6)随之移动,G(n:
n+6).*g即为输出数据out的第n位。
A路输出与B路用相同方法。
之后,用函数reshape(A,B)将A、B合为一个向量,及编码输出。
本程序用k=3、g=[1,1,1;1,0,1]的卷积码编码。
则:
G(n,n+2)。
如要提高编码速率,可用删余技术。
经过删余可以得到3/4、2/3速率的码元。
下图给出R=3/4的删余编码和解码原理图:
源数据:
X1
X2
X3
X4
X5
X6
X7
X8
X9
卷积编码后的数据(有下划线的是删除元素):
A1
A2
A3
A4
A5
A6
A7
A8
A9
B1
B2
B3
B4
B5
B6
B7
B8
B9
删除后的数据:
A1
B1
A2
B3
A4
B4
A5
B6
A7
B7
A8
B9
插入亚元:
A1
A2
A3
A4
A5
A6
A7
A8
A9
B1
B2
B3
B4
B5
B6
B7
B8
B9
解码后的数据:
Y1
Y2
Y3
Y4
Y5
Y6
Y7
Y8
Y9
其中6个数据为一组,而删除2个保留4个。
本程序用1/2速率,所以保留全部码元。
(6)进行交织
交织是以单个OFDM信号的比特数为块进行的,其作用是:
确保相邻比特映射到不相邻的子载波上,确保相邻比特映射到星座的高、低有效位上,避免低可靠比特的长期存在。
k为第一次映射前的比特序号,i为其之后和第二次映射前的序号,它们之间的关系为:
i=(N_CBPS/16)*mod(k,16)+floor(k/16);
x为第二次映射后的比特序号,i和x的关系为:
x=s*floor(i/s)+mod((i+N_CBPS-floor(16*i/N_CBPS)),s)
其中:
s=max(N_BPSC/2,1);
当N_BPSC=1时,s=1,则:
x=i。
(7)载波调制
载波调制可以用BPSK、QPSK、16-QAM和64-QAM,其调制输出数据为:
d=(I+jQ)*K_mod,K_mod为归一化因子。
各调制方式的归一化因子如下图所示:
调制方式
归一化因子
BPSK
1
QPSK
1/sqrt
(2)
16-QAM
1/sqrt(10)
64-QAM
1/sqrt(42)
BPSK编码表:
输入比特b0
I路输出
Q路输出
0
-1
0
1
1
0
QPSK编码表:
输入比特b0
I路输出
输入比特b1
Q路输出
0
-1
0
-1
1
0
1
1
16-QAM编码表:
输入比特b0b1
I路输出
输入比特b2b3
Q路输出
00
-3
00
-3
01
-1
01
-1
11
1
11
1
10
3
10
3
64-QAM编码表:
输入比特b0b1b2
I路输出
输入比特b3b4b5
Q路输出
000
-7
000
-7
001
-5
001
-5
011
-3
011
-3
010
-1
010
-1
110
1
110
1
111
3
111
3
101
5
101
5
100
7
100
7
(8)插入导频信号
一个OFDM信号是从-26到26,共53个比特,其中有4个是导频信号,它们分别插在-21、-7、7、21四个位置,相应的值为1、1、1、-1,在0位置的信号赋值为0,加上原有的48比特信号共53个。
(9)OFDM调制
对本程序来说,SIGNAL部分有一个OFDM符号,DATA部分有35个OFDM符号。
对上述两部分进行调制,就像当时进行IFFT。
二、信道部分
(1)当channel_counter=0时,信道为加性高斯白噪声信道。
设信噪比Eb/n0=0:
0.5:
20,输入信号为I_signal+jQ_signal,则噪声功率为:
noise_var=0.5*sum(I_signal.*I_signal+Q_signal.*Q_signal)/length(I_signal)*10^(-EbN0/10)。
噪声表示为:
I_out=sqrt(noise_var)*randn(1,length(I_signal));
Q_out=sqrt(noise_var)*randn(1,length(Q_signal));
(2)当channel_counter=1时,信道为多径衰落信道。
三、接收端
此部分为发射端的逆过程:
第一:
进行OFDM解调,即FFT。
R_SIGNAL是对signal部分的解调:
R_SIGNAL(k)=R_SIGNAL(k)+r_out_signal(n)*exp(-j*2*pi*(k-27)*df*((n-1)*dt-T_GI));
R_DATA是对data的解调:
R_DATA(k)=R_DATA(k)+r_out_data(m)*exp(-j*2*pi*(k-27)*df*((m-1)*dt-T_GI));
此过程是将去插入保护间隔和FFT同时进行的,T_GI为保护间隔。
第二:
归一化处理。
signal=max(abs(R_SIGNAL));
data=max(abs(R_DATA));
fork=1:
53
R_SIGNAL(k)=R_SIGNAL(k)/signal;
end
forn=1:
1908
R_DATA(k)=R_DATA(k)/data;
end
第三、去掉所插入的导频。
即去掉在-21、-7、0、7、7、21五处的码元。
第四、进行判决即BPSK解调。
所有数值的实部大于等0,则判为1,否则为0。
第五、进行逆交织。
k为逆交织前的序号,y为第一次交织后第二次交织前的序号,x为交织后的序号。
三者之间的关心为:
y=s*floor(k/s)+mod((k+floor(16*k/N_CBPS)),s)
x=16*y-(N_CBPS-1)*floor(16*y/N_CBPS)
当N_BPCS=1时。
S=1,则:
y=k。
第六、卷积码译码。
令N为输入数据的长度,网格横向有4项令为:
s0、s1、s2、s3,对应最小汉明距离分别为:
d0、d1、d2、d3,对应译码为:
M0、M1、M2、M3。
n=1:
2:
N-1,当n=2时对应d和M在程序中给定,设为初值。
当n>=3时,n+1时的d和M可以由n时的确定,每个s都有两个输入,选择其中权值较小的为其输入;若为s0或s2则M((n+1)/2)为0,若为s1、s3则判为1,最终选择d值最小的s处的M为最终译码。
如下图:
第七、解扰。
第八.求其误码率:
设data为收到的800个数据,PSDU_DATA为发送的800数据,则BER=sum(abs(data-PSDU_DATA))/800。
加循环100次求出误码率曲线如下图: