一、实验目的
尝试自行调研、推导,建模实现一个完整的OFDM
数字通信系统,要求:
给出数字信号从发射端处理(产生+IDFT
)、到信道传输(假定多径信道模型参数已知+线性卷积输入输出关系)、再到接收处理(DFT
+去除信道衰减影响)的完整数学推导
使用MATLAB
编程,仿真验证上述数学模型
无须考虑信源编解码、信道编解码、基带调制、载波调制
随机生成发送原始符号序列,多径信道引入加性高斯白噪声序列
经过接收处理,能够恢复原始发送符号序列
尝试计算误码率,即画出随信噪比变化的误码率曲线(用半对数坐标)
二、实验原理
下面为数字信号的数学推导过程
对于模拟信号
f
=
S
0
S
1
S
2
.
.
.
S
N
−
1
f = S_0S_1S_2...S_{N-1}
f=S0S1S2...SN−1
经过多载波调制后,每一段信号的以频率为k的正弦波调制结果为
s
k
(
t
)
=
S
k
c
o
s
(
2
π
k
t
)
=
S
k
e
j
2
π
k
t
s_k(t)=S_kcos(2\pi kt)=S_ke^{j2\pi kt}
sk(t)=Skcos(2πkt)=Skej2πkt
该信号被分为N段,用N个频率进行调制再叠加,得到的调制信号为
s
(
t
)
=
∑
k
=
0
N
−
1
S
k
e
j
2
π
k
t
s(t)=\sum_{k=0}^{N-1}S_ke^{j2\pi kt}
s(t)=k=0∑N−1Skej2πkt
通过采样数字化后,调制后的信号为
s
(
n
)
=
∑
k
=
0
N
−
1
S
k
e
j
2
π
k
n
/
N
s(n)=\sum_{k=0}^{N-1}S_ke^{j2\pi kn/N}
s(n)=k=0∑N−1Skej2πkn/N
发现多载波调制其实与离散傅里叶逆变换(IDFT
)的形式相同,可以用MATLAB
内置的N点IFFT
进行快速计算。
对于接收端来说,利用三角函数的正交性,用不同频率的正弦波可以恢复出对应频率所载的信号,得到
S
k
=
∫
s
(
t
)
s
i
n
(
2
π
k
t
)
d
t
=
∫
s
(
t
)
e
−
j
2
π
k
t
d
t
S_k =\int s(t)sin(2\pi kt) dt=\int s(t)e^{-j2\pi kt}dt
Sk=∫s(t)sin(2πkt)dt=∫s(t)e−j2πktdt
通过采样数字化后
S
k
=
∑
n
=
0
N
−
1
s
(
n
)
e
−
j
2
π
k
n
/
N
S_k=\sum_{n=0}^{N-1} s(n)e^{-j2\pi kn/N}
Sk=n=0∑N−1s(n)e−j2πkn/N
发现与离散傅里叶变换形式(DFT
)相同,可以用MATLAB
内置的N点FFT
进行快速计算。
三、实验结果
在没有增大符号周期时,误信率与信噪比关系如图所示。
在一段8192 bit随机产生的比特序列中,误码率、误信率与信噪比的关系如图所示
四、结果分析
1、当信噪比超过20dB
时,该OFDM
系统下误信率和误码率为0。
2、误码率和误信率都随着信噪比增高而下降,即SNR
越高,传输可靠性越强。
3、 图1与图3对比得知,增大符号周期能有效抑制多径效应。
附录:代码及参考文献
clc, clear
% 设置参数
% 信息容量
num = 8192;
% 每段大小(载波频率个数)
seg = 8;
% 设置最大SNR
SNRmax = 50;
% 随机产生信号
info = randi(2,1,num) - 1;
for s = 1:SNRmax
% 设置信道参数
road = [1, zeros(1,1000), 0.05, zeros(1,1000),-0.1, zeros(1,1000)];
info_a = awgn(info, s); % 增加高斯白噪声 第二个参数为信噪比
% 用reshape函数进行串行转并行
info1 = reshape(info_a, seg, num/seg);
info_re = reshape(info, seg, num/seg);
res_seg = OFDM(info1, road, seg, num)>0.5; % OFDM为自编函数
% 计算误码率
for i = 1 : num/seg
temp(i) = sum(res_seg(:,i) ~= info_re(:,i));
end
errseg(s) = sum(temp~=0)/num*seg;
% 计算误比特率
res = reshape(res_seg, 1, num); % 并行信号恢复成串行信号
errbit(s) = sum(info~=res)/num;
end
plot(errseg)
title("误码率与SNR的关系")
plot(errbit);
title("误比特率与SNR的关系")
function res = OFDM(info1, real_road, seg, num)
for i = 1:num/seg
info_idft(:,i) = ifft(info1(:,i),seg); % IDFT载波调制过程
receiver(:, i) = conv(info_idft(:,i),real_road); % 信号通过信道
res(:, i) = real(fft(receiver(:, i), seg)); % DFT恢复信号过程
end
end
参考文献
https://blog.csdn.net/a493823882/article/details/80058002?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242