赞
踩
OFDM(Orthogonal Frequency Division Multiplexing)即正交频分复用技术,实际上OFDM是MCM(Multi Carrier Modulation)多载波调制的一种。通过频分复用实现高速串行数据的并行传输,它具有较好的抗多径衰弱的能力,能够支持多用户接入。在LTE、5G NR、802.11ax通信协议的物理层中都用到了OFDM技术。
OFDM主要思想是:将信道分成若干正交子信道,将高速数据信号转换成并行的低速子数据流,调制到在每个子信道上进行传输。正交信号可以通过在接收端采用相关技术来分开,这样可以减少子信道之间的相互干扰(ISI)。每个子信道上的信号带宽小于信道的相关带宽,因此每个子信道上可以看成平坦性衰落,从而可以消除码间串扰,而且由于每个子信道的带宽仅仅是原信道带宽的一小部分,信道均衡变得相对容易。
OFDM中的各个载波是相互正交的,每个载波在一个符号时间内有整数个载波周期,每个载波的频谱最大值点和相邻载波的零点重叠,这样便减小了载波间的干扰。由于载波间有部分重叠,所以它比传统的FDMA提高了频带利用率。
OFDM符号:如果系统带宽为20M,那么系统包含100个RB,每个RB包含12个子载波,即一个OFDM符号上共有1200个子载波。同时,一个OFDM符号包含的比特数也与资源元素选用的调制方式有关系,如果所有资源单元(子载波)都选用64QAM调制,则一个资源元素包含6个bit。这样,一个OFDM符号的比特数=100126 bit=7200 bit。
IDFT、IFFT
DFT、FFT
MATLAB程序
clc;
clear;
close all;
M = 8; % 子载波数
fc = 1e6; % 主载波频率/Hz
fsub = 1e3; % 子载波频率间隔
fsig = fc:fsub:fc+(M-1)*fsub; % 频率序列
T = 0.001; % 子载波持续时间
fs = 10e6; % 采样频率/Hz
ts = 1/fs; % 采样时间间隔
t = 0:ts:T-ts; % 一个符号周期的时间矢量
% 载波信号
c = zeros(M,length(t));
NN = length(t)*16;
XN = zeros(M,NN);
f0 = fs/NN;
f = (0:NN-1)*f0;
for k = 1:M
c(k,:) = exp(1j*2*pi*fsig(k)*t);
XN(k,:) = fft(c(k,:),NN);
end
figure;
plot(f,abs(XN(1,:)), f,abs(XN(2,:)), f,abs(XN(3,:)), f,abs(XN(4,:)), f,abs(XN(5,:)), f,abs(XN(6,:)), f,abs(XN(7,:)), f,abs(XN(8,:)));
legend('1000kHz子载波', '1001kHz子载波', '1002kHz子载波', '1003kHz子载波', '1004kHz子载波', '1005kHz子载波', '1006kHz子载波', '1007kHz子载波');
axis([995e3 1012e3 -inf inf]);
title('频域中 子载波分布图');
ylabel('幅度');
xlabel('频率/Hz');
% OFDM载波调制(这里每个子载波使用2-ASK调制,实际上每个子载波使用PSK、QAM调制也可以)
symbol = M;
msg = randi([0 1],1,symbol);% 并行发送8bit数据
% msg = [1 1 0 1 1 1 0 1];% 并行发送8bit数据
tx = zeros(1,length(t));
for k = 1:length(msg)
tx = tx + msg(k)*c(k,:);% 子载波叠加
end
XN_tx = fft(tx,NN);
disp(['发送数据: ' num2str(msg)]);
% 空中信道传输
sigma = sum(abs(tx))/length(tx) * 0.9;
rx = tx + sigma*rand(1,length(tx));% 加入AWGN(实际上只影响直流分量)
XN_rx = fft(rx,NN);
% OFDM解调
msg_demodulation = zeros(1,symbol);
for k = 1:symbol
if(abs(XN_rx(16001 + 16*(k-1))) > 5e3) % 使用FFT结果来解调
msg_demodulation(1,k) = 1;
end
end
disp(['收到数据: ' num2str(msg_demodulation)]);
bit_error_cnt = 0;
for k = 1:symbol
if(msg_demodulation(k) ~= msg(k))
% 当判定的接收比特与发送比特不一致时,认为判定错误
bit_error_cnt = bit_error_cnt + 1;
end
end
bit_error_percent = bit_error_cnt/symbol;
disp(['误码率: ' num2str(bit_error_percent)]);
figure;
subplot(2,1,1);plot(t,real(tx));axis([-inf inf -inf inf]);title('OFDM发送信号 时域图');
ylabel('幅度');
xlabel('时间/s');
subplot(2,1,2);plot(t,real(rx));axis([-inf inf -inf inf]);title('OFDM接收信号 时域图');
ylabel('幅度');
xlabel('时间/s');
figure;
subplot(2,1,1);plot(f,abs(XN_tx));axis([995e3 1012e3 -inf inf]);title('OFDM发送信号 频谱');
ylabel('幅度');
xlabel('频率/Hz');
subplot(2,1,2);plot(f,abs(XN_rx));axis([995e3 1012e3 -inf inf]);title('OFDM接收信号 频谱');
ylabel('幅度');
xlabel('频率/Hz');
结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。