2016.04.06 - 04.07
个人理解笔记。(无通信基础且急躁,片面/错误概率大大的。已待纠正)
相应的word版笔记保存地址:[4] OFDM符号的生成与解析。
04.06
指由信息生成OFDM信号再由OFDM信号还原信息的过程,指示编写matlab代码的大体过程如下图所示。
Figure 1. OFDM信号的生成与解析
04.07
依据笔记[3],可易得到在matlab中OFDM信号生成的代码如下:
ofdm_link.m
% ofdm_link.m
% 对ofdm信号的生成、传播以及接收的仿真
clear
% ******** 生成ofdm信号 ********
% 映射: MQAM映射N个M进制信息序列。
% 子载波: 用Nifft点ifft变换生成Ns个子载波,
% 第i个子载波的频率为[1/Nifft, 1]中的一个,
% 第i个子载波所携带信息为第i个QAM符号
b = 4;
N = 7;
Nos = 16;
% (QAM映射的)M进制数
M = 2^b;
% 生成(1 x N)的[0, M - 1](M进制)的随机数
sendData = randi([0, M - 1], 1, N);
% Nifft点(ifft变换)
Nifft = N * Nos;
T = 1 / Nifft;
% Nifft份,没份相隔T
time = [0:T:1-T];
%--------映射--------
% 构建信息映射对象 - MQAM映射
mod_ob = modem.qammod(M);
% 依据构建的映射对象映射信息sendData
sendData_map_symbols = modulate(mod_ob,sendData);
% --------使用ifft将QAM符号转换到时域载波:第i个载波的频率为[1/Nifft, 1]中的一个,具体见ifft参数--------
% x, xI,xQ大小为N x Nifft
x = zeros(N, Nifft);
xI = zeros(N, Nifft);
xQ = zeros(N, Nifft);
% QAM符号串转并 - 对QAM符号作Nifft点ifft变换得QAM的时域波形
for i = 1:N
if i <= N / 2
x(i,:) = ifft([zeros(1, i - 1) sendData_map_symbols(i) zeros(1, Nifft - i + 1)], Nifft);
else
x(i,:) = ifft([zeros(1, Nifft - N + i - 1) sendData_map_symbols(i) zeros(1, N - i)], Nifft);
end
end
% ofdm信号
ofdm_signal = sum(x);
OFDM信号的解析是OFDM信号生成的逆过程,代码如下:
ofdm_link.m
...
% ******** 解析ofdm信号 ********
ofdm_signal_serial = zeros(1, N * Nifft);
% ofdm信号并转串
for i = 1:N
ofdm_signal_serial((i - 1) * Nifft + 1 : i * Nifft) = x(i, :);
end
% ofdm信号串转并 - 对每个QAM符号的时域波形做Nifft点ifft变换得到QAM符号
recvData_map_symbols = zeros(N, Nifft);
for i = 1:N
recvData_map_symbols(i, :) = fft(ofdm_signal_serial(1, (i - 1) * Nifft + 1 : i * Nifft), Nifft);
end
% (QAM)映射符号串转并
recvData_map_symbols_serial = zeros(1, N);
for i = 1:N
if i <= N / 2
recvData_map_symbols_serial(:, i) = recvData_map_symbols(i, i);
else
recvData_map_symbols_serial(:, i) = recvData_map_symbols(i, Nifft - N + i);
end
end
% 解映射得到信息
recvData = zeros(1, N);
recvData = qamdemod(recvData_map_symbols_serial, M);
这个过程可以体现“发送的数据”到“映射符号”、“映射符号”到“ifft”和其逆过程“fft”到“映射符号”、“映射符号”到“接收到的数据”的机制。(在实际生活中,OFDM经过实际的信道后才会被解析。)
可查看sendData与recvData、sendData_map_symbols与recvData_map_symbols_serial等这些生成符号过程与解析符号过程,以清楚它们的对应/可逆关系。(在ofdm_link.m中,许多代码都可合并,暂时分开写是为了突出步骤/模块)
[2016.04.06 - 20:00]