基于MATLAB的OFDM的仿真Word格式.docx

上传人:b****6 文档编号:17518633 上传时间:2022-12-07 格式:DOCX 页数:19 大小:191.14KB
下载 相关 举报
基于MATLAB的OFDM的仿真Word格式.docx_第1页
第1页 / 共19页
基于MATLAB的OFDM的仿真Word格式.docx_第2页
第2页 / 共19页
基于MATLAB的OFDM的仿真Word格式.docx_第3页
第3页 / 共19页
基于MATLAB的OFDM的仿真Word格式.docx_第4页
第4页 / 共19页
基于MATLAB的OFDM的仿真Word格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

基于MATLAB的OFDM的仿真Word格式.docx

《基于MATLAB的OFDM的仿真Word格式.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的OFDM的仿真Word格式.docx(19页珍藏版)》请在冰豆网上搜索。

基于MATLAB的OFDM的仿真Word格式.docx

对上一步得到的相同分量和正交分量按照(Ich+Qch*i)进行IFFT运算。

并将得到的复数的实部作为新的Ich,虚部作为新的Qch。

在实际运用中, 信号的产生和解调都是采用数字信号处理的方法来实现的,此时要对信号进行抽样, 形成离散时间信号。

由于OFDM信号的带宽为B=N·

Δf,信号必须以Δt=1/B=1/(N·

Δf)的时间间隔进行采样。

采样后的信号用sn,i

表示, i=0,1,…,N-1,则有

    

从该式可以看出,它是一个严格的离散反傅立叶变换(IDFT)的表达式。

IDFT可以采用快速反傅立叶变换(IFFT)来实现

4.7加入保护间隔。

由IFFT运算后的每个符号的同相分量和正交分量分别转换为串行数据,并将符号尾部G长度的数据加到头部,构成循环前缀。

如果加入空的间隔,在多径传播的影响下,会造成载波间干扰ICI。

保护见个的长度G应该大于多径时的扩张的最大值。

  图1-2 多径情况下,空闲保护间隔在子载波间造成的干扰

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

4.8加窗

加窗是为了降低系统的PAPR,滚降系数为1/32。

通过这种方法,可以显著地改善OFDM通信系统高的PAPR分布,大大降低了峰值信号出现的概率以及对功率放大器的要求,节约成本。

经常被采用的窗函数是升余弦窗

 

  

  

 (1-2)

 

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

4.9通过信道。

信道分为多径实验信道和高斯白噪声信道。

多径时延信道直射波河延迟波对于标准时间按照固定比率递减,因此多径时延信道参数为比率和对大延迟时间。

4.10同步。

同步是决定OFDM系统高性能十分重要的方面,实际OFDM系统都有同步过称。

主要同步方法有使用导频,循环前缀,忙算法三种。

研究目的为同步的可以详细实现本步,基本的方针可以略过此步,假设接收端已经于发射端同步。

4.11去掉保护间隔。

根据同步得到的数据,分别见给每个符号的同相分量和正交分量开头的保护间隔去掉。

4.12并串转换。

将每个符号分布在子信道上的数据,还原为一路串行数据。

4.13FFT。

对每个符号的同相分量和正交分量按照(Ich+Qch*i)进行FFT运算。

并将得到的实部作为新的Ich,虚部作为新的Qch。

与发端相类似,上述相关运算可以通过离散傅立叶变换(DFT)或快速傅立叶变换(FFT)来实现,即:

4.14子载波解调

FFT后的同相粉脸感和正交分量两组数据在星座图上对饮高的点,由于噪声和信道的影响,不再是严格的发送端的星座图。

将得到的星座图上的点按照最近原则判决为原星座图上的点,并按映射规则还原为一组数据。

4.15解码解交织。

按照编码交织对应解码,解交织的方法,还原为原始数据,并进行纠错处理。

4.16计算误码率。

比较第2步产生的数据和接收到的数据,计算误码率BER

5.实现步骤

5.1  16QAM的调制函数

function [complex_qam_data]=qam16(bitdata)

%modulationof16QAM,modulate bitdatato 16QAM complex signal

X1=reshape(bitdata,4,length(bitdata)/4)'

d=1;

%mindistanceofsymble

for i=1:

length(bitdata)/4;

 for j=1:

4

  X1(i,j)=X1(i,j)*(2^(4-j));

   end

 source(i,1)=1+sum(X1(i,:

));

%converttothe number1to16

end

mapping=[-3*d 3*d;

ﻩ-d3*d;

  d3*d;

ﻩ3*d 3*d;

ﻩ -3*dd;

-dd;

ﻩdd;

ﻩ 3*d d;

ﻩ -3*d -d;

 -d -d;

ﻩ d -d;

  3*d-d;

 -3*d  -3*d;

 -d -3*d;

d -3*d;

 3*d-3*d];

 fori=1:

length(bitdata)/4

qam_data(i,:

)=mapping(source(i),:

);

%datamapping

end

complex_qam_data=complex(qam_data(:

,1),qam_data(:

2));

5.216QAM的解调函数。

function [demodu_bit_symble]=demoduqam16(Rx_serial_complex_symbols)

%将得到的串行16QAM数据解调成二进制比特流

complex_symbols=reshape(Rx_serial_complex_symbols,length(Rx_serial_complex_symbols),1);

d=1;

mapping=[-3*d3*d;

 -d 3*d;

  d3*d;

ﻩ 3*d 3*d;

ﻩ-3*d d;

ﻩ-dd;

  d d;

3*dd;

 ﻩ-3*d-d;

 -d-d;

 d  -d;

  3*d-d;

-3*d-3*d;

 -d-3*d;

d -3*d;

3*d -3*d];

complex_mapping=complex(mapping(:

,1),mapping(:

,2));

for i=1:

length(Rx_serial_complex_symbols);

 for j=1:

16;

 metrics(j)=abs(complex_symbols(i,1)-complex_mapping(j,1));

end

 [min_metric decode_symble(i)]=min(metrics);

 %将离某星座点最近的值赋给decode_symble(i)

decode_bit_symble=de2bi((decode_symble-1)'

'

left-msb'

 demodu_bit_symble=reshape(decode_bit_symble'

,1,length(Rx_serial_complex_symbols)*4);

5.3加窗函数

function [rcosw]=rcoswindow(beta,Ts)

%定义升余弦窗,其中beta为滚降系数,Ts为包含循环前缀的OFDM符号的长度,Ts为正偶数

t=0:

(1+beta)*Ts;

rcosw=zeros(1,(1+beta)*Ts);

for i=1:

beta*Ts;

rcosw(i)=0.5+0.5*cos(pi+t(i)*pi/(beta*Ts));

end

rcosw(beta*Ts+1:

Ts)=1;

forj=Ts+1:

(1+beta)*Ts+1;

rcosw(j-1)=0.5+0.5*cos((t(j)-Ts)*pi/(beta*Ts));

rcosw=rcosw'

;

%变换为列向量

5.4 OFDM主程序

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

 for i=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,:

%并串转换,循环后缀与循环前缀相叠加

%=======================================================

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)'

循环前后缀不叠加的OFDMTimeSignal'

temp_time2=symbols_per_carrier*(IFFT_bin_length+GI)+GIP;

subplot(2,1,2);

temp_time2-1,windowed_Tx_data);

%循环后缀与循环前缀相叠加发送信号波形

gridon

ylabel('Amplitude(volts)'

xlabel('Time(samples)'

循环前后缀叠加的OFDMTime 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段

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('

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);

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);

%串并变换

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('极坐标下的接收信号的星座图'

%===========================================

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1