[4] OFDM符号的生成与解析

2016.04.06 - 04.07
个人理解笔记。(无通信基础且急躁,片面/错误概率大大的。已待纠正)
相应的word版笔记保存地址:[4] OFDM符号的生成与解析。

1 OFDM信号的生成

04.06
指由信息生成OFDM信号再由OFDM信号还原信息的过程,指示编写matlab代码的大体过程如下图所示。
[4] OFDM符号的生成与解析_第1张图片
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);

2 OFDM信号的解析

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);

3 通过运行结果看OFDM信号生成与解析过程

这个过程可以体现“发送的数据”到“映射符号”、“映射符号”到“ifft”和其逆过程“fft”到“映射符号”、“映射符号”到“接收到的数据”的机制。(在实际生活中,OFDM经过实际的信道后才会被解析。)

运行ofdm_link查看工作区中变量值:
[4] OFDM符号的生成与解析_第2张图片

可查看sendData与recvData、sendData_map_symbols与recvData_map_symbols_serial等这些生成符号过程与解析符号过程,以清楚它们的对应/可逆关系。(在ofdm_link.m中,许多代码都可合并,暂时分开写是为了突出步骤/模块)

[2016.04.06 - 20:00]

你可能感兴趣的:(碚大)