ofdm流程图_给"小白"图示讲解OFDM的原理

原标题:给"小白"图示讲解OFDM的原理

注:作者笔名,码懂

本文首发在作者QQ空间(因为需要同行的熟人们指正)。因QQ的封闭性,这里重贴一次。本文原地址:

http://blog.csdn.net/madongchunqiu/article/details/18614233

说明:以下文字,灰色为吹水文,黑色为正文,蓝色为采用实际应用中的参数所作的说明。

起因是这样的。时间回到07年底,4G方兴之时,同桌隔壁的隔壁"小白"同学说看不太明白OFDMA的原理,让我讲解一下。我一向对自己的技术水平、逻辑思考能力和表达技巧还是蛮有自信的,因此轻笑一声就答应了。半小时后,在尝试了从时域、频域以及物理意义等各方面讲解,但均无法从“小白”的眼神中抹除那份迷茫之后,我竖起了白旗,让“小白”自生自灭去了。

对知识能力的掌握,我自己粗旷的分为两层:一层是“会了,能应用”;二层是“懂了,能衍生”。而能讲解出来,并让人懂,大抵就是区分一层和二层的分水岭。打一个屌丝男喜闻乐见的比方:第一层就是人界的修炼,即使是“会了”,也是有筑基、金丹、元婴等境界之分的,而高考研考就是天劫,不到大乘之境,终究要化为劫灰;第二层是天界,也自有天仙、金仙之分,而能修至道祖的大牛,终究只是寥寥。我一向觉得自己在专业上还算是个“小仙”,可惜就被“小白”打脸了。

这事儿对我的负面影响挺大的,一是怀疑自己技术宅做久了,表达能力方面严重退化【比如我偶尔会在搜索一个精准的动词或者形容词时,需要尝试2-3次,甚至更多】;二是在涉及到OFDM方面的内容时,仿佛就会看到一张白纸上逡巡着一只挥之不去的黑苍蝇。

时隔多年,近期又回顾了一下OFDM,不经意又记起这桩公案,犹豫再三,还是决定花时间写下这篇文章,把这只盘旋于脑中的“黑苍蝇”拍死。因此虽然现在网络资源极大丰富,各种文章都可以搜到,其实我是没必要专门写这篇未必比别人写得好的文章的。不过毕竟是自己遗留的缺失,需要自己来补上。

下面试图以图示为主讲解OFDM,以"易懂"为第一要义。"小白",你准备好了吗?

注:下面的讨论如果不做说明,均假设为理想信道。

章节一:时域上的OFDM

OFDM的"O"代表着"正交",那么就先说说正交吧。

首先说说最简单的情况,sin(t)和sin(2t)是正交的【证明:sin(t)·sin(2t)在区间[0,2π]上的积分为0】,而正弦函数又是波的最直观描述,因此我们就以此作为介入点。既然本文说的是图示,那么我们就用图形的方式来先理解一下正交性。【你如果能从向量空间的角度,高屋建瓴的看待这个问题的话,你也就不是"小白"了,R U?】

在下面的图示中,在[0,2π]的时长内,采用最易懂的幅度调制方式传送信号:sin(t)传送信号a,因此发送a·sin(t),sin(2t)传送信号b,因此发送b·sin(2t)。其中,sin(t)和sin(2t)的用处是用来承载信号,是收发端预先规定好的信息,在本文中一律称为子载波;调制在子载波上的幅度信号a和b,才是需要发送的信息。因此在信道中传送的信号为a·sin(t)+b·sin(2t)。在接收端,分别对接收到的信号作关于sin(t)和sin(2t)的积分检测,就可以得到a和b了。(以下图形采用google绘制)

102acdfd702e3f3328bce9d28b165c32.png

图一:发送a信号的sin(t)

8df532737ca4942bc1b6041ed0957d71.png

图二:发送b信号的sin(2t)【注意:在区间[0,2π]内发送了两个完整波形】

5bdae43db1fdb561a27414aa96737f82.png

图三:发送在无线空间的叠加信号a·sin(t)+b·sin(2t)

ee3d622786bf747adc4ed36029fe91e8.png

图四:接收信号乘sin(t),积分解码出a信号。【如前文所述,传送b信号的sin(2t)项,在积分后为0】

7ba9bacdfbe0cbaf5d93ca44df9ee631.png

图五:接收信号乘sin(2t),积分解码出b信号。【如前文所述,传送a信号的sin(t)项,在积分后为0】

1b06b13fc6ec5563f019613c07653f8f.png

图六:流程图

到了这里,也许你会出现两种状态:

一种是:啊,原来是这样

  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OFDM(正交频分复用)是一种基于多载波技术的调制方式,其实现过程比较复杂,需要进行FFT变换、导频插入、循环前缀添加等操作。下面是一份基于MATLAB的OFDM收发完整代码示例,供参考: 发送端代码: ```matlab % OFDM发送端代码 clc; clear all; close all; % 产生数据 data=rand(1,1024); % QPSK调制 data_mod=qpsk_mod(data); % OFDM参数设置 M=4; % 每个OFDM符号中载波的数量 N=64; % FFT点数 L=16; % 循环前缀长度 P=16; % 导频间隔 fs=50e3; % 采样频率 % 将数据按照OFDM格式进行分组 data_OFDM=ofdm_tx(data_mod,M,N,L,P); % IFFT变换 data_IFFT=ifft(data_OFDM,N,2); % 添加循环前缀 data_cp=[data_IFFT(:,(N-L+1):N) data_IFFT]; % 将数据并行转换为串行 data_serial=reshape(data_cp.',1,[]); % 发送信号 t=0:1/fs:(length(data_serial)-1)/fs; s=sqrt(2)*real(data_serial).*cos(2*pi*1e6*t)-sqrt(2)*imag(data_serial).*sin(2*pi*1e6*t); % 绘制发送信号图像 figure; subplot(2,1,1); plot(t,s); xlabel('Time(s)'); ylabel('Amplitude'); title('Transmit Signal'); grid on; % 绘制发送信号频谱图像 [freq,signal]=freqdomain(s,fs); subplot(2,1,2); plot(freq,signal); xlabel('Frequency(Hz)'); ylabel('Amplitude'); title('Transmit Signal in Frequency Domain'); grid on; ``` 接收端代码: ```matlab % OFDM接收端代码 clc; clear all; close all; % OFDM参数设置 M=4; % 每个OFDM符号中载波的数量 N=64; % FFT点数 L=16; % 循环前缀长度 P=16; % 导频间隔 fs=50e3; % 采样频率 % 接收信号 load('transmit.mat'); % 载入发送信号数据 t=0:1/fs:(length(s)-1)/fs; r=sqrt(2)*real(s).*cos(2*pi*1e6*t)+sqrt(2)*imag(s).*sin(2*pi*1e6*t); % 绘制接收信号图像 figure; subplot(2,1,1); plot(t,r); xlabel('Time(s)'); ylabel('Amplitude'); title('Received Signal'); grid on; % 绘制接收信号频谱图像 [freq,signal]=freqdomain(r,fs); subplot(2,1,2); plot(freq,signal); xlabel('Frequency(Hz)'); ylabel('Amplitude'); title('Received Signal in Frequency Domain'); grid on; % 将串行数据转换为并行数据 data_parallel=reshape(r,N+L,[]).'; % 去除循环前缀 data_nocp=data_parallel(:,(L+1):(L+N)); % FFT变换 data_FFT=fft(data_nocp,N,2); % 提取导频 pilot=data_FFT(:,1:P:end); % 插入导频 data_FFT_with_pilot=insert_pilot(data_FFT,M,P,pilot); % 将数据按照OFDM格式进行分组 data_demod=ofdm_rx(data_FFT_with_pilot,M,N,L,P); % QPSK解调 data_demod=qpsk_demod(data_demod); % 计算误码率 error_rate=biterr(data,data_demod)/length(data); disp(['误码率:' num2str(error_rate)]); ``` 其中,`qpsk_mod`和`qpsk_demod`函数实现QPSK调制和解调,`ofdm_tx`和`ofdm_rx`函数实现OFDM格式分组和数据解析,`insert_pilot`函数实现导频插入,`freqdomain`函数实现频域分析。完整代码如下:

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值