OFDM符号的生成与解析

16 篇文章 5 订阅
4 篇文章 1 订阅

1 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);
--------------------- 
作者:最容易害羞 
来源:CSDN 
原文:https://blog.csdn.net/misskissC/article/details/51077937 
版权声明:本文为博主原创文章,转载请附上博文链接!

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);
--------------------- 
作者:最容易害羞 
来源:CSDN 
原文:https://blog.csdn.net/misskissC/article/details/51077937 
版权声明:本文为博主原创文章,转载请附上博文链接!

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

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

运行ofdm_link查看工作区中变量值: 

è¿éåå¾çæè¿°

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

  • 10
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值