当前位置:首页 >> 信息与通信 >>

OFDM仿真


教师评阅意见:

签名: 实验成绩:







一、题目
OFDM 系统的 Matlab 仿真

二、仿真要求
要求一:OFDM 系统的数据传输 ① 传输的数据随机产生; ② 调制方式采用 16QAM; ③ 必须加信道的衰落 ④ 必

须加高斯白噪声 ⑤ 接收端要对信道进行均衡。 要求二:要求对 BER 的性能仿真 设计仿真方案,得到在数据传输过程中不同信噪比的 BER 性能结论,要求 得到的 BER 曲线较为平滑。

三、仿真方案详细设计
(一)基于 IFFT/FFT 实现的 OFDM 系统方框图:

(二)详细设计方案: 1 确定参数 需要确定的参数为:子信道,子载波数,FFT 长度,每次使用的 OFDM 符号数,调制度 水平,符号速率,比特率,保护间隔长度,信噪比,插入导频数,基本的仿真可以不插入导 频,可以为 0。 2 产生数据 使 用 个 随 机 数 产 生 器 产 生 二 进 制 数 据 , 每 次 产 生 的 数 据 个 数 为 carrier_count * symbols_per_carrier * bits_per_symbol。 3 编码交织 交织编码可以有效地抗突发干扰。 4 子载波调制 OFDM 采用 BPSK、QPSK、16QAM、64QAM4 种调制方式。按照星座图,将每个子信 道上的数据,映射到星座图点的复数表示,转换为同相 Ich 和正交分量 Qch。 其实这是一种查表的方法,以 16QAM 星座为例,bits_per_symbol=4,则每个 OFDM 符 号的每个子信道上有 4 个二进制数{d1,d2,d3,d4},共有 16 种取值,对应星座图上 16 个点,每 个点的实部记为 Qch。为了所有的映射点有相同高的平均功率,输出要进行归一化,所以对 应 BPSK,PQSK,16QAM,64QAM,分别乘以归一化系数系数 1,1
2 , 1 10 , 1 42 .输出的复数

序列即为映射后的调制结果。 5 串并转换。 将一路高速数据转换成多路低速数据 6 IFFT。 对上一步得到的相同分量和正交分量按照(Ich+Qch*i)进行 IFFT 运算。并将得到的复 数的实部作为新的 Ich,虚部作为新的 Qch。 在实际运用中, 信号的产生和解调都是采用数字信号处理的方法来实现的, 此时要对 信号进行抽样, 形成离散时间信号。 由于 OFDM 信号的带宽为 B=N·Δ f, 信号必须以Δ t=1/B=1/(N·Δ f)的时间间隔进行采样。 采样后的信号用 sn,i 表示, i = 0, 1, …, N-1,则有

sn ,i ?

1 N

?S
k ?0

N ?1

n,k

e j2?ik / N

从该式可以看出,它是一个严格的离散反傅立叶变换(IDFT)的表达式。IDFT 可以采 用快速反傅立叶变换(IFFT)来实现 7 加入保护间隔。 由 IFFT 运算后的每个符号的同相分量和正交分量分别转换为串行数据, 并将符号尾部 G 长度的数据加到头部,构成循环前缀。如果加入空的间隔,在多径传播的影响下,会造成载 波间干扰 ICI。保护见个的长度 G 应该大于多径时的扩张的最大值。
子载波1

延迟的子载波2 子载波2对子载波1的 干扰部分

保护时间 OFDM符号周期

FFT积分时间

图 1-2

多径情况下,空闲保护间隔在子载波间造成的干扰
复制 保护 间隔 保护 间隔

IFFT

IFFT输出

IFFT

时间 Tg Ts 符号N-1 符号N 符号N +1 TFFT

图 1-3 保护间隔的插入过程

8 加窗 加窗是为了降低系统的 PAPR, 滚降系数为 1/32。 通过这种方法, 可以显著地改善 OFDM 通信系统高的 PAPR 分布,大大降低了峰值信号出现的概率以及对功率放大器的要求,节约 成本。经常被采用的窗函数是升余弦窗

? ?0.5 ? 0.5 c o ?s ? t? ??Ts ?? ? w?t ? ? ?1.0 ?0.5 ? 0.5 c o ?st ? T ?? ??T ?? ? s s ?

0 ? t ? ?Ts Ts ? t ? ?1 ? ? ?Ts

?Ts ? t ? Ts

(1-2)

图 1-9

经过加窗处理后的 OFDM 符号示意图

9 通过信道。 信道分为多径实验信道和高斯白噪声信道。多径时延信道直射波河延迟波对于标准时间 按照固定比率递减,因此多径时延信道参数为比率和对大延迟时间。 10 同步。 同步是决定 OFDM 系统高性能十分重要的方面,实际 OFDM 系统都有同步过称。主要 同步方法有使用导频,循环前缀,忙算法三种。研究目的为同步的可以详细实现本步,基本 的方针可以略过此步,假设接收端已经于发射端同步。 11 去掉保护间隔。 根据同步得到的数据,分别见给每个符号的同相分量和正交分量开头的保护间隔去掉。 12 并串转换。 将每个符号分布在子信道上的数据,还原为一路串行数据。 13 FFT。 对每个符号的同相分量和正交分量按照(Ich+Qch*i)进行 FFT 运算。并将得到的实部 作为新的 Ich,虚部作为新的 Qch。 与发端相类似,上述相关运算可以通过离散傅立叶变换(DFT)或快速傅立叶变换(FFT) 来实现, 即:

Rn,k

1 ? N

?r
i ?0

N ?1

n ,i

e ? j2 πik / N

14 子载波解调 FFT 后的同相粉脸感和正交分量两组数据在星座图上对饮高的点,由于噪声和信道的影 响,不再是严格的发送端的星座图。将得到的星座图上的点按照最近原则判决为原星座图上 的点,并按映射规则还原为一组数据。 15 解码解交织。 按照编码交织对应解码,解交织的方法,还原为原始数据,并进行纠错处理。 16 计算误码率。 比较第 2 步产生的数据和接收到的数据,计算误码率 BER 17 统计误码率 使用 for 循环,将 SNR 从 0dB 到 30dB 逐五变化,运行主函数,统计误码率,画出误码 率曲线。

四、仿真结果及结论

16QAM调 制 后 星 座 图 4 3 2 1 0 -1 -2 -3 -4 -4

-3

-2

-1

0

1

2

3

4

循 环 前 后 缀 不 叠 加 的 OFDM Time Signal 0.5

Amplitude (volts)

0

-0.5

0

1000

2000

3000 4000 5000 6000 Time (samples) 循 环 前 后 缀 叠 加 的 OFDM Time Signal

7000

8000

0.5

Amplitude (volts)

0

-0.5

0

1000

2000

3000 4000 5000 Time (samples)

6000

7000

8000

加窗的发送信号频谱 20

10

0

Magnitude (dB)

-10

-20

-30

-40

0

0.05

0.1

0.15 0.2 0.25 0.3 0.35 Normalized Frequency (0.5 = fs/2) 极坐标下的接收信号的星座图 90 120 4 6 60

0.4

0.45

0.5

150 2

30

180

0

210

330

240 270

300

XY坐 标 接 收 信 号 的 星 座 图 4 3 2 1 0 -1 -2 -3 -4 -4

-3

-2

-1

0

1

2

3

4

输出待调制的二进制比特流 1

0.5

0

0

10

20

30

40

50

60

70

80

90

100

接收解调后的二进制比特流 1

0.5

0

0

10

20

30

40

50

60

70

80

90

100

10

0

Rayleigh fading

10

-1

Ber
10
-2

10

-3

0

5 SNR1

10

15

该函数基本能实现本次实验的要求,概括了 OFDM 主要的实现过程,能画出每一个步骤 的图像,更具体形象地反应了 OFDM 的过程。同时也能统计并绘制出在不同信噪比情况下的误 码率曲线。

五、总结与体会
本程序没有添加信道估计部分,与峰均值仿真,如果添加了将更加完善对 OFDM 的研究。 且通过本次仿真实验,让我更加清楚地明白了 OFDM 调制技术的过程与其优缺点。 OFDM 技术的优点主要有: (1) OFDM 调制方式适用于多径和衰落信道中的高速数据传输。当信道因为多径的影响 出现频率选择性衰落时,只有落在频率凹陷处的载波及其携带的信息受到影响,其它子载波 未受损害; 。 (2) 在 OFDM 调制方式中,通过插入保护间隔,可以很好地克服符号间干扰(ISI)和载波 间干扰(ICI) (3) 由于 OFDM 各子载波相互正交,允许各子载波有 1/2 重叠,因此可以大大提高频谱 利用率: (4) 由于深度衰落而丢失的一些子载波可通过编码、交织等措施来很好的恢复,提高系 统抗误码性能,且通过各子载波的联合编码,具有很强的抗衰落能力; (5) OFDM 技术抗脉冲及窄带干扰的能力很强,因为这些干扰仅仅影响到很小一部分的 子信道; (6) 与单载波系统相比,对采样定时偏移不敏感。 OFDM 技术的缺点主要有: (1) 由于要求各子载波正交,所以对频率偏移和相位噪声很敏感; (2) 由于各子载波相互独立,峰值功率与均值功率比相对较大,且随子载波数目的增加 而增加。高峰均比信号通过功放时,为了避免信号的非线性失真和带外频谱再生,功放需要 具有较大的线性范围,导致射频放大器的功率效率降低。

六、主要仿真代码
clear all; close all; carrier_count=200;%子载波数 symbols_per_carrier=12;%每子载波含符号数 bits_per_symbol=4;%每符号含比特数,16QAM 调制 IFFT_bin_length=512;%FFT 点数 PrefixRatio=1/4;%保护间隔与 OFDM 数据的比例 1/6~1/4 GI=PrefixRatio*IFFT_bin_length ;%每一个 OFDM 符号添加的循环前缀长度为 1/4*IFFT_bin_length 即保护 间隔长度为 128 beta=1/32;%窗函数滚降系数 GIP=beta*(IFFT_bin_length+GI);%循环后缀的长度 20 SNR=15; %信噪比 dB %================================================== %================信号产生=================================== baseband_out_length = carrier_count * symbols_per_carrier * bits_per_symbol;%所输入的比特数目 carriers = (1:carrier_count) + (floor(IFFT_bin_length/4) - floor(carrier_count/2));% 共轭对称子载波映射 复 数数据对应的 IFFT 点坐标 conjugate_carriers = IFFT_bin_length - carriers + 2;%共轭对称子载波映射 共轭复数对应的 IFFT 点坐标 baseband_out=round(rand(1,baseband_out_length));%输出待调制的二进制比特流 %==============16QAM 调制==================================== complex_carrier_matrix=qam16(baseband_out);%列向量 complex_carrier_matrix=reshape(complex_carrier_matrix',carrier_count,symbols_per_carrier)';%symbols_per_ca rrier*carrier_count 矩阵 figure(1); plot(complex_carrier_matrix,'*r');%16QAM 调制后星座图 title('16QAM 调制后星座图') axis([-4, 4, -4, 4]); grid on %=================IFFT=========================== IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);%添 0 组成 IFFT_bin_length IFFT 运算 IFFT_modulation(:,carriers ) = complex_carrier_matrix ;%未添加导频信号 ,子载波映射在此处 IFFT_modulation(:,conjugate_carriers ) = conj(complex_carrier_matrix);%共轭复数映射 %================================================================= signal_after_IFFT=ifft(IFFT_modulation,IFFT_bin_length,2);%OFDM 调制 即 IFFT 变换 time_wave_matrix =signal_after_IFFT;%时域波形矩阵,行为每载波所含符号数,列 ITTF 点数,N 个子载波 映射在其内,每一行即为一个 OFDM 符号 %=========================================================== %=====================添加循环前缀与后缀==================================== XX=zeros(symbols_per_carrier,IFFT_bin_length+GI+GIP); for k=1:symbols_per_carrier; for i=1:IFFT_bin_length; XX(k,i+GI)=signal_after_IFFT(k,i); end for i=1:GI; XX(k,i)=signal_after_IFFT(k,i+IFFT_bin_length-GI);%添加循环前缀

end for j=1:GIP; XX(k,IFFT_bin_length+GI+j)=signal_after_IFFT(k,j);%添加循环后缀 end end time_wave_matrix_cp=XX;% 添 加 了 循 环 前 缀 与 后 缀 的 时 域 信 号 矩 阵 , 此 时 一 个 OFDM 符 号 长 度 为 IFFT_bin_length+GI+GIP=660 %==============OFDM 符号加窗========================================== windowed_time_wave_matrix_cp=zeros(1,IFFT_bin_length+GI+GIP); for i = 1:symbols_per_carrier windowed_time_wave_matrix_cp(i,:) = real(time_wave_matrix_cp(i,:)).*rcoswindow(beta,IFFT_bin_length+GI)';%加窗 升余弦窗 end %======================== 生 成 发 送 信 号 , 并 串 变 换 ================================================== windowed_Tx_data=zeros(1,symbols_per_carrier*(IFFT_bin_length+GI)+GIP); windowed_Tx_data(1:IFFT_bin_length+GI+GIP)=windowed_time_wave_matrix_cp(1,:); for i = 1:symbols_per_carrier-1 ; windowed_Tx_data((IFFT_bin_length+GI)*i+1:(IFFT_bin_length+GI)*(i+1)+GIP)=windowed_time_wave_matri x_cp(i+1,:);%并串转换,循环后缀与循环前缀相叠加 end %======================================================= Tx_data=reshape(windowed_time_wave_matrix_cp',(symbols_per_carrier)*(IFFT_bin_length+GI+GIP),1)';% 加 窗后 循环前缀与后缀不叠加 的串行信号 %================================================================= temp_time1 = (symbols_per_carrier)*(IFFT_bin_length+GI+GIP);%加窗后 循环前缀与后缀不叠加 发送总位 数 figure (2) subplot(2,1,1); plot(0:temp_time1-1,Tx_data );%循环前缀与后缀不叠加 发送的信号波形 grid on ylabel('Amplitude (volts)') xlabel('Time (samples)') title('循环前后缀不叠加的 OFDM Time Signal') temp_time2 =symbols_per_carrier*(IFFT_bin_length+GI)+GIP; subplot(2,1,2); plot(0:temp_time2-1,windowed_Tx_data);%循环后缀与循环前缀相叠加 发送信号波形 grid on ylabel('Amplitude (volts)') xlabel('Time (samples)') title('循环前后缀叠加的 OFDM Time Signal') %===============加窗的发送信号频谱================================= symbols_per_average = ceil(symbols_per_carrier/5);%符号数的 1/5,10 行 avg_temp_time = (IFFT_bin_length+GI+GIP)*symbols_per_average;%点数,10 行数据,10 个符号

averages = floor(temp_time1/avg_temp_time); average_fft(1:avg_temp_time) = 0;%分成 5 段 for a = 0:(averages-1) subset_ofdm = Tx_data(((a*avg_temp_time)+1):((a+1)*avg_temp_time));%利用循环前缀后缀未叠加的串行 加窗信号计算频谱 subset_ofdm_f = abs(fft(subset_ofdm));%分段求频谱 average_fft = average_fft + (subset_ofdm_f/averages);%总共的数据分为 5 段,分段进行 FFT,平均相加 end average_fft_log = 20*log10(average_fft); figure (3) subplot(2,1,2) plot((0:(avg_temp_time-1))/avg_temp_time, average_fft_log)% 归 一 化 0/avg_temp_time : (avg_temp_time-1)/avg_temp_time hold on plot(0:1/IFFT_bin_length:1, -35, 'rd') grid on axis([0 0.5 -40 max(average_fft_log)]) ylabel('Magnitude (dB)') xlabel('Normalized Frequency (0.5 = fs/2)') title('加窗的发送信号频谱') %====================添加噪声================================= Tx_signal_power = var(windowed_Tx_data);%发送信号功率 linear_SNR=10^(SNR/10);%线性信噪比 noise_sigma=Tx_signal_power/linear_SNR; noise_scale_factor = sqrt(noise_sigma);%标准差 sigma noise=randn(1,((symbols_per_carrier)*(IFFT_bin_length+GI))+GIP)*noise_scale_factor;%产生正态分布噪声序 列 Rx_data=windowed_Tx_data +noise;%接收到的信号加噪声 %===================== 接 收 信 号 串 / 并 变 换 去 除 前 缀 与 后 缀 ========================================== Rx_data_matrix=zeros(symbols_per_carrier,IFFT_bin_length+GI+GIP); for i=1:symbols_per_carrier; Rx_data_matrix(i,:)=Rx_data(1,(i-1)*(IFFT_bin_length+GI)+1:i*(IFFT_bin_length+GI)+GIP);%串并变换 end Rx_data_complex_matrix=Rx_data_matrix(:,GI+1:IFFT_bin_length+GI);%去除循环前缀与循环后缀,得到有 用信号矩阵 %============================================================== % OFDM 解码 16QAM 解码 %=================FFT 变换================================= Y1=fft(Rx_data_complex_matrix,IFFT_bin_length,2);%OFDM 解码 即 FFT 变换 Rx_carriers=Y1(:,carriers);%除去 IFFT/FFT 变换添加的 0,选出映射的子载波 Rx_phase =angle(Rx_carriers);%接收信号的相位 Rx_mag = abs(Rx_carriers);%接收信号的幅度 figure(4); polar(Rx_phase, Rx_mag,'bd');%极坐标坐标下画出接收信号的星座图 title('极坐标下的接收信号的星座图')

%====================================================================== [M, N]=pol2cart(Rx_phase, Rx_mag); Rx_complex_carrier_matrix = complex(M, N); figure(5); plot(Rx_complex_carrier_matrix,'*r');%XY 坐标接收信号的星座图 title('XY 坐标接收信号的星座图') axis([-4, 4, -4, 4]); grid on %====================16qam 解调======================================= Rx_serial_complex_symbols=reshape(Rx_complex_carrier_matrix',size(Rx_complex_carrier_matrix, 1)*size(Rx_complex_carrier_matrix,2),1)' ; Rx_decoded_binary_symbols=demoduqam16(Rx_serial_complex_symbols); %============================================================ baseband_in = Rx_decoded_binary_symbols; figure(6); subplot(2,1,1); stem(baseband_out(1:100)); title('输出待调制的二进制比特流') subplot(2,1,2); stem(baseband_in(1:100)); title('接收解调后的二进制比特流') %================误码率计算========================================== bit_errors=find(baseband_in ~=baseband_out); bit_error_count = size(bit_errors, 2) ber=bit_error_count/baseband_out_length


相关文章:
OFDM MATLAB仿真含程序
OFDM MATLAB仿真含程序_信息与通信_工程科技_专业资料。OFDM MATLAB仿真 程序 摘要:正交频分复用(OFDM)被选为无线通信的调制技术。OFDM 能提供充分 大量数据传输在...
OFDM系统仿真实验报告
OFDM系统仿真实验报告_信息与通信_工程科技_专业资料。无线通信——OFDM 系统仿真 一、实验目的 1、了解 OFDM 技术的实现原理 2、利用 MATLAB 软件对 OFDM 的传输...
OFDM系统的仿真及实现
OFDM系统的仿真及实现_信息与通信_工程科技_专业资料。兰州交通大学本科生课程设计 中文题目: 英文题目: OFDM 系统仿真与实现 Simulation and implementation of OFDM...
基于MATLAB的OFDM系统仿真及分析
这 些方案都是基于OFDM 之上的, 因此, 研究OFDM系统的性能就显得非常必 要。本文首先简要介绍OFDM基本原理,在这个基础上建立了OFDM仿真模型,然 后通过加保护时隙...
本科毕业设计:基于MATLAB的OFDM系统仿真及分析
本文首先简要介绍OFDM基本原理,在这个基础上建立了OFDM仿真模型,然 后通过加保护时隙及进行信道估计 , 分析OFDM 系统在AWGN和多径 Rayleigh衰 落信道下不用的插入...
OFDM调制解调仿真
实验四 OFDM 调制解调仿真 一、实验目的 (1)了解 OFDM 调制解调的原理。 (2)学会用星座图分析系统性能。 二、实验内容 (1)编写 MATLAB 程序,实现 OFDM 系统...
基于MATLAB的OFDM系统设计与仿真
基于MATLAB的OFDM系统设计与仿真_工学_高等教育_教育专区。本科毕业设计 基于MATLAB 的 OFDM 系统设计与仿真 摘要:随着通信产业的逐步发展,4G 时代已经来临。作为第...
OFDM的系统仿真与实现
3、通过编写代码来实现 OFDM 的实现过程,对一些具体的实现更加 熟悉, 如怎么增加循环前缀等, 将理论是实际仿真相结合, 更加直观, 也更易于理解,所以,整体来说...
OFDM系统原理及Matlab建模仿真
OFDM 系统原理及 Matlab 建模仿真摘 要:在无线通信系统中,存在着严重的频率选择性衰落、快衰落和慢衰落, 以及各种噪声的干扰和多径传播下的码间串扰等问题, 正交...
基于Matlab的OFDM系统设计与仿真
本文简述了无线信道的特点,概述了OFDM技术的发展状况、原理、数学表示、部 分关键技术,采用Matlab仿真的方法,并且对由于高斯噪声而引起码间干扰等问题进行 了仿真和...
更多相关标签:
ofdm | ofdm仿真代码 | ofdm系统的matlab仿真 | aomg | ofdm的matlab仿真 | ofdm仿真源代码 | ofdm系统仿真 | 无线通信系统 |