ofdm_waveform_simplified_diagram_v0.4
来源:互联网 发布:python marionette 编辑:程序博客网 时间:2024/06/06 09:54
2016.07.30 – 07.31
[个人学习/探索笔记 —— 理解OFDM]
基带。信息源,也称发射端,发出的没有经过调制(进行频谱搬移和变换)的原始电信号所固有的频带(频率带宽)。
频带。对基带信号调制后所占用的频率带宽。
带宽。一个信号所占有的从最低的频率到最高的频率之差。
频谱搬移。频谱搬移是指在发射端将调制信号从低频端搬移到高频端, 便于天线发送或实现不同信号源,不同系统的频分复用。
1 OFDM数学描述
在复基带上的在时间段
[反正看不懂]
1.1 ej2πkΔft
可将该复指数理解为[2]中提到的随着时间
[从时域看]
从时域上看,该式子对应的是
[从频域看]
时域的子载波相当于其在整个时域与一个周期为
为了看得清楚,不与时域的周期一致,将周期缩小一倍后的子载波频率图如下。
[请自动脑补傅里叶变换后得负频率 – 反正我还没脑补过来(唯有用螺旋线逆时针、顺时针旋转自圆其说)]
1.2 a(m)k
1.3 叠加
(子)载波:是一个特定频率的无线电波(某段频率内的波),是一种可用于传递(携带/表示)信息的波。
[解析OFDM符号时,因为各个子载波的正交性,在OFDM符号上乘以一个
1.4 总结
[1] 子载波。各子载波正交;各个子载波的频率相差
[2] 子载波上的信息。子载波上的信息为PSK/QAM符号,是一个复数,它是源数据元素的一个映射。
2 OFDM符号的生成与解析
用以下简单的框图描述OFDM符号的生成与解析过程。(相应的经简易化的matlab仿真代码见附4)
2.1 generate data source
如生成以下数据:tx_data_source = [1 3 3 3 2 0 3 3]
2.2 generate PSK/QAM symbol
PSK/QAM符号是用来分别表示这些数据元素的一个复数。(参考链接的第一部分)
2.3 generate OFDM symbol
将
除了可参考[1],[3]外(无自己的理解),还可以在matlab中做个小小的证明。当
2.4 get PSK/QAM symbol
从OFDM符号上提取各个子载波上携带的信息,即在OFDM符号上乘以一个
2.5 get data source
原来的数据经过PSK/QAM映射成为了一个复数,这一步的工作就是根据PSK/QAM符号作映射的逆操作而得到相应的数据。
3 总结
[1] 依旧不懂傅里叶(逆)变换的计算过程。
[2] 一下子就接触OFDM,好陡。
参考
[1] 4G: LTE/LTE-Advanced for Mobile Broadband Second Edition – “CHAPTER 3 OFDM Transmission”
[2] 如果看了此文你还不懂傅里叶变换,那就过来掐死我吧【完整版】
[3] OFDM for Wireless Multimedia Communications - R. van Nee, R. Prasad - Artech House, 2000.pdf [2.2]
附
[1] 绘制OFDM子载波在时域中的波形
% subcarrier_time_domain.m% 绘制OFDM的Nc个子载波在时域上的波形% 参考资料:4G: LTE/LTE-Advanced for Mobile Broadband Second Edition – \% “CHAPTER 3 OFDM Transmission”,理解e^(j * 2 * pi (k / T)t )对应的时域部分% 最后修改时间2016.07.30clearTu = 2 * pi; % OFDM周期st = 0.0; % OFDM符号开始时间sp = 0.01; % 从OFDM的开始时间到结束时间的步长ed = Tu + st; % OFDM符号的结束时间t = st : sp : ed; % x轴fn = 0;fn = fn + 1;figure(fn);plot(t, cos(0 * t), t, cos(1 * t), t, cos(2 * t), t, cos(3 * t)); % 子载波Nc = 4grid on;xlabel('t');ylabel('A');title(['N_c = 4, T_u= ', num2str(Tu)]);
[2] 绘制OFDM子载波的频谱波形
% subcarrier_frequency_domain.m% 绘制OFDM子载波的频谱% 首先理解“频谱”的含义% 然后理解OFDM子载波时域波形定长周期中的频谱:% [1] 余弦函数的频谱(率)为一个冲激,定周期的余弦函数相当于在时域乘以一个矩形窗% [2] 矩形窗的频谱为sinc函数(未用fft变换来求,而是直接写出了周期为2pi或pi的矩形窗函数函数的频谱函数sinc(2pi)和sinc(pi))% [3] 时域乘法相当于频域卷积% 最后修改时间2016.07.31clearTu = pi; % 2 * pifx = 3 * Tu; % 用来显示子载波频谱的频率轴的长度sf = 0;sp = 0.01; % 频率变化的步长f = sf - fx / 2 : sp : fx / 2; % 自动脑补傅里叶变换后的负频率的出现(请教一个真正懂负频率出现的人)z = zeros(1, length(f));fn = 0;fn = fn + 1; % 当要绘制多图时方便计数figure(fn);% 周期为T的矩形窗的频谱函数为sinc(T * x)plot(f, z,f, sinc(Tu * f + 0), f, sinc(Tu * (f - 1 / Tu)), f, sinc(Tu * (f - 2 / Tu)), f, sinc(Tu * (f - 3 / Tu))); %, f, sinc(Tu * (f + 3 / Tu)), f, sinc(Tu * (f + 2 / Tu)), f, sinc(Tu * (f + 1 / Tu)), grid on;xlabel('f');ylabel('A');title(['N_s = 4, T_u= ', num2str(Tu)]);
[3] 子载波抽样值
% subcarrier_sample_value.m% 参考资料:4G: LTE/LTE-Advanced for Mobile Broadband Second Edition –% “CHAPTER 3 OFDM Transmission”% 等间隔计算各个子载波上的离散值% 子载波数Nc = 8,% 取样点Ns = 8,每隔1取一个样点% 最后修改时间:2016.07.30clearNc = 8; % 子载波数目Nt = 8; % OFDM周期,同时以1为单位在子载波上取样点值ts = 1; % 每个子载波开始的时间myifftmtx = zeros(Nc, Nt);for m = 1 : Nc % 第m个子载波 for t = ts : Nt % 在周期Nt上以1为单位等间隔取样 myifftmtx(m, t) = exp( (1i * 2 * pi) * ((m - 1) / Nt) * (t - ts)); endendifftmtx = conj(dftmtx(8));% isequal(ifftmtx, myifftmtx) %% 验证子载波取样点是否与对应的ifft矩阵相同(用眼睛看,一一对照两个矩阵中的元素,两个矩阵是相等的;该函数将它们判断为不等,可能是计算精度或其它的原因^_^)
[4] OFDM符号的生成与解析
% ofdm_waveform_diagram.m% @ 仿真ofdm_waveform_diagram_v0.2.viso描述的基本框图% @ 参考资料:[1] 4G: LTE/LTE-Advanced for Mobile Broadband Second Edition – % “CHAPTER 3 OFDM Transmission”(3.3)% [2] OFDM for Wireless Multimedia Communications - R. van Nee,% R. Prasad - Artech House, 2000.pdf(2.2)%% @ OFDM符号参数:% 为OFDM符号分配的带宽 bw = 10MHz;% 用于传递信息的子载波数量 Nuc = 600;% 子载波间隔 Delta_f = 15KHz;%% @ 由OFDM符号参数的计算:% OFDM符号所占带宽 Nuc * Delta_f = 600 * 15KHz = 9MHz% OFDM符号采样频率:采样频率要等于甚至大于OFDM符号频率,以保证对OFDM符号采样的充分(理解采样频率为单位时间采集的数据量),% FFT/IFFT点数 Nsp = 1024;如此OFDM的采样频率为Nsp * Delta_f = 15.36MHz% % @ 文档:ofdm_waveform_diagram_v0.4.docx;(v0.1 - v0.4)% @ 最后修改时间:2017.07.31clear% -------------------------------- OFDM参数描述 --------------------------------Nuc = 600; % 用于传递数据的子载波数Nsp = 1024; % 对OFDM符号的采样点, %([1] 大于等于子载波数量;[2] 最好为2^m,方便fft/ifft运算)% -------------------------------- OFDM参数描述 --------------------------------% -------------------------------- 发送端 --------------------------------% &&&&&&&& generate data source &&&&&&&&nb = 2; % nb-比特数n = Nuc; % nb-比特数的个数tx_data_source = generate_data_source( nb, n );% &&&&&&&& generate PSK/QAM symbol &&&&&&&&mod_type = 'psk'; % 映射源数据元素的方式tx_PSKorQAM_symbol = generate_PSKorQAM_symbol( mod_type, tx_data_source, nb );% &&&&&&&& generate OFDM symbol(IFFT) &&&&&&&&Nifft = Nsp;tx_PSKorQAM_symbol_oversample = ... [tx_PSKorQAM_symbol(1 : Nuc / 2),... zeros(1, Nsp - Nuc), ... tx_PSKorQAM_symbol(Nuc / 2 + 1 : end)]; % 过采样,为何将0加在中间,见[2]tx_ofdm_symbol = ifft(tx_PSKorQAM_symbol_oversample, Nifft); % 将每个数据加载到每个子载波上% -------------------------------- 发送端 --------------------------------% -------------------------------- 信道 --------------------------------% &&&&&&&& Fading channel &&&&&&&&rx_ofdm_symbol = tx_ofdm_symbol; % 理想信道% -------------------------------- 信道 --------------------------------% -------------------------------- 接收端 --------------------------------% &&&&&&&& get PSK/QAM symbol(FFT) &&&&&&&&Nfft = Nsp;rx_PSKorQAM_symbol_oversample = fft(rx_ofdm_symbol, Nfft);% &&&&&&&& get data source &&&&&&&&rx_PSKorQAM_symbol = ... [rx_PSKorQAM_symbol_oversample(1 : Nuc / 2),... rx_PSKorQAM_symbol_oversample(end - Nuc / 2 + 1 : end)]; % 去掉过采样数据rx_data_source = demodulate_PSKorQAM_symbol( rx_PSKorQAM_symbol, mod_type, nb );% -------------------------------- 接收端 --------------------------------% 判断OFDM符号的解析是否成功isequal(tx_data_source, rx_data_source)
[2016.08.01 - 08:49]
- ofdm_waveform_simplified_diagram_v0.4
- 4
- 4
- (4)
- 4
- 4
- 4
- 4
- 4
- 4
- 4
- 4
- 4
- 4
- 4
- 4
- 4
- 4
- SDUT3364数据结构实验之图论八:欧拉回路
- BestCoder Round #85-1005 gcd
- java/tomcat /http协议
- java获取本地cpu、内存、硬盘信息
- 猴子吃桃问题 南阳理工ACM 324
- ofdm_waveform_simplified_diagram_v0.4
- linux定时执行任务
- linq连接(Union)时报错问题处理
- JAVA 委派模式(Delegate)
- [Java] 最近导入外部项目遇到的一些问题的解决办法的分享
- PyGobject(六十二)Gtk.Widget之Gtk.Label
- GIT和SVN之间的区别及基本操作对比
- 对于第一次多校大一联合赛的感想
- printf用法总结