OFDM仿真.docx
- 文档编号:27778164
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:21
- 大小:595.54KB
OFDM仿真.docx
《OFDM仿真.docx》由会员分享,可在线阅读,更多相关《OFDM仿真.docx(21页珍藏版)》请在冰豆网上搜索。
OFDM仿真
一、题目
OFDM系统的Matlab仿真
二、仿真要求
要求一:
OFDM系统的数据传输
1传输的数据随机产生;
2调制方式采用16QAM;
3必须加信道的衰落
4必须加咼斯白噪声
5接收端要对信道进行均衡。
要求二:
要求对BER的性能仿真
设计仿真方案,得到在数据传输过程中不同信噪比的BER性能结论,要求
得到的BER曲线较为平滑。
三、仿真方案详细设计
(一)基于IFFT/FFT实现的OFDM系统方框图:
(二)详细设计方案:
1确定参数
需要确定的参数为:
子信道,子载波数,FFT长度,每次使用的OFDM符号数,调制度水平,符号速率,比特率,保护间隔长度,信噪比,插入导频数,基本的仿真可以不插入导频,可以为0。
2产生数据
使用个随机数产生器产生二进制数据,每次产生的数据个数为carrier_count*symbols_per_carrier*bits_per_symbo。
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,110,142.输出的复数序列即为映射后的调制结果。
5串并转换。
将一路高速数据转换成多路低速数据
6IFFT。
对上一步得到的相同分量和正交分量按照(Ich+Qch*i)进行IFFT运算。
并将得到的复数的实部作为新的Ich,虚部作为新的Qch。
在实际运用中,信号的产生和解调都是采用数字信号处理的方法来实现的,此时要对
信号进行抽样,形成离散时间信号。
由于OFDM信号的带宽为B=N•Af,信号必须以△t=1/B=1/(N•Af)的时间间隔进行采样。
采样后的信号用sn,i
表示,i=0,1,…,N-1,则有
从该式可以看出,它是一个严格的离散反傅立叶变换(IDFT)的表达式。
IDFT可以采用快速反傅立叶变换(IFFT)来实现
7加入保护间隔。
由IFFT运算后的每个符号的同相分量和正交分量分别转换为串行数据,并将符号尾部G
长度的数据加到头部,构成循环前缀。
如果加入空的间隔,在多径传播的影响下,会造成载波间干扰ICI。
保护见个的长度G应该大于多径时的扩张的最大值。
OFDM符号周期
图1-2多径情况下,空闲保护间隔在子载波间造成的干扰
图1-3保护间隔的插入过程
8加窗
加窗是为了降低系统的PAPR,滚降系数为1/32。
通过这种方法,可以显著地改善OFDM通信系统高的PAPR分布,大大降低了峰值信号出现的概率以及对功率放大器的要求,节约成本。
经常被采用的窗函数是升余弦窗
0.50.5cost.Ts
wt1.0
0.50.5costTsTs
9通过信道。
信道分为多径实验信道和高斯白噪声信道。
多径时延信道直射波河延迟波对于标准时间按照固定比率递减,因此多径时延信道参数为比率和对大延迟时间。
10同步。
同步是决定OFDM系统高性能十分重要的方面,实际OFDM系统都有同步过称。
主要同步方法有使用导频,循环前缀,忙算法三种。
研究目的为同步的可以详细实现本步,基本的方针可以略过此步,假设接收端已经于发射端同步。
11去掉保护间隔。
根据同步得到的数据,分别见给每个符号的同相分量和正交分量开头的保护间隔去掉。
12并串转换。
将每个符号分布在子信道上的数据,还原为一路串行数据。
13FFT。
对每个符号的同相分量和正交分量按照(lch+Qch*i)进行FFT运算。
并将得到的实部作为新的Ich,虚部作为新的Qch。
与发端相类似,上述相关运算可以通过离散傅立叶变换(DFT)或快速傅立叶变换(FFT)来实现,即:
14子载波解调
FFT后的同相粉脸感和正交分量两组数据在星座图上对饮高的点,由于噪声和信道的影响,不再是严格的发送端的星座图。
将得到的星座图上的点按照最近原则判决为原星座图上的点,并按映射规则还原为一组数据。
15解码解交织。
按照编码交织对应解码,解交织的方法,还原为原始数据,并进行纠错处理。
16计算误码率。
比较第2步产生的数据和接收到的数据,计算误码率BER
17统计误码率
使用for循环,将SNF从OdB到30dB逐五变化,运行主函数,统计误码率,画出误码率曲线。
四、仿真结果及结论
请输入信嗥比3砸;15
bit_error_coimt二
ber-
0.OOlfi
调制后星座图
16QAM
4
3
2
1
0
-1
-2
-3
-2
循环前后缀不叠加的OFDMTimeSignal
-4
-4
1
c
3
h
b
!
I1
~1
L--
r
f
p
4
k
L
i
b
・
r
p
、
L
E
i
-1
L-
1
L-
4
L-
<
L--
-3
0.5
Drhowrean^LIPmA
Time(samples)
10002000300040005000600070008000
Time(samples)
循环前后缀叠加的OFDMTimeSignal
加窗的发送信号频谱
-30
0.150.20.250.30.350.4
NormalizedFrequency(0.5=fs/2)
O
2
O
O
O
O
2
-
-40
00.050.1
0.450.5
极坐标下的接收信号的星座图
270
XY坐标接收信号的星座图
输出待调制的二进制比特流
接收解调后的二进制比特流
Rayleighfading
-1
10
-2
10
-3
10
0
10
15
SNR1
个步骤
该函数基本能实现本次实验的要求,概括了OFDM主要的实现过程,能画出每
的图像,更具体形象地反应了OFD啲过程。
同时也能统计并绘制出在不同信噪比情况下的误码率曲线。
五、总结与体会
本程序没有添加信道估计部分,与峰均值仿真,如果添加了将更加完善对OFD啲研究。
且通过本次仿真实验,让我更加清楚地明白了OFDM调制技术的过程与其优缺点。
OFDM技术的优点主要有:
(1)OFDM调制方式适用于多径和衰落信道中的高速数据传输。
当信道因为多径的影响出现频率选择性衰落时,只有落在频率凹陷处的载波及其携带的信息受到影响,其它子载波未受损害;。
(2)在OFDM调制方式中,通过插入保护间隔,可以很好地克服符号间干扰(ISI)和载波
间干扰(ICI)
(3)由于OFDM各子载波相互正交,允许各子载波有1/2重叠,因此可以大大提高频谱利用率:
(4)由于深度衰落而丢失的一些子载波可通过编码、交织等措施来很好的恢复,提高系统抗误码性能,且通过各子载波的联合编码,具有很强的抗衰落能力;
(5)OFDM技术抗脉冲及窄带干扰的能力很强,因为这些干扰仅仅影响到很小一部分的子信道;
(6)与单载波系统相比,对采样定时偏移不敏感。
OFDM技术的缺点主要有:
(1)由于要求各子载波正交,所以对频率偏移和相位噪声很敏感;
(2)由于各子载波相互独立,峰值功率与均值功率比相对较大,且随子载波数目的增加而增加。
高峰均比信号通过功放时,为了避免信号的非线性失真和带外频谱再生,功放需要具有较大的线性范围,导致射频放大器的功率效率降低。
六、主要仿真代码
clearall;closeall;
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_carrier*carrier_count矩阵
figure
(1);plot(complex_carrier_matrix,'*r');%16QAM调制后星座图title('16QAM调制后星座图')
axis([-4,4,-4,4]);
gridon
%=================IFFT===========================IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);%添0组成IFFT_bin_lengthIFFT运算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);
fork=1:
symbols_per_carrier;
fori=1:
IFFT_bin_length;
XX(k,i+GI)=signal_after_IFFT(k,i);
end
fori=1:
GI;
XX(k,i)=signal_after_IFFT(k,i+IFFT_bin_length-GI);%添加循环前缀
end
forj=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);
fori=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,:
);
fori=1:
symbols_per_carrier-1;
windowed_Tx_data((IFFT_bin_length+GI)*i+1:
(IFFT_bin_length+GI)*(i+1)+GIP)=windowed_time_wave_matrix_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);%循环前缀与后缀不叠加发送的信号波形
gridon
ylabel('Amplitude(volts)')
xlabel('Time(samples)')
title('循环前后缀不叠加的OFDMTimeSignal')
temp_time2=symbols_per_carrier*(IFFT_bin_length+GI)+GIP;subplot(2,1,2);
plot(0:
temp_time2-1,windowed_Tx_data);%循环后缀与循环前缀相叠加发送信号波形
gridon
ylabel('Amplitude(volts)')
xlabel('Time(samples)')
title('循环前后缀叠加的OFDMTimeSignal')
%===============加窗的发送信号频谱=================================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段fora=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
holdon
plot(0:
1/IFFT_bin_length:
1,-35,'rd')
gridon
axis([00.5-40max(average_fft_log)])
ylabel('Magnitude(dB)')
xlabel('NormalizedFrequency(0.5=fs/2)')
title('加窗的发送信号频谱')
%====================添加噪声=================================
Tx_signal_power=var(windowed_Tx_data);%发送信号功率
linear_SNR=10A(SNR/10);%线性信噪比noise_sigma=Tx_signal_power/linear_SNR;
noise_scale_factor=sqrt(noise_sigma);%标准差sigmanoise=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);
fori=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]);
gridon
%====================16qam解调=======================================Rx_serial_complex_symbols=reshape(Rx_complex_carrier_matrix',size(Rx_complex_carrier_m1)*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_i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OFDM 仿真