视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
基于matlab的OFDM信号调制解调与多径传输
2025-09-29 18:16:26 责编:小OO
文档
基于matlab的OFDM信号调制和多径传输仿真

一、OFDM信号的调制

OFDM系统实现的基本步骤为:首先是对待发送的序列进行串并转换,然后进行映射,再对其进行IFFT,即为OFDM信号的调制,加入循环前缀,然后发送。接收端接收到信号首先去掉循环前缀,然后进行FFT,即为OFDM信号的解调,然后在进行并串转换,最后进行判决得到接收序列。

1、产生发送序列:可以通过matlab的round(rand(1,N))命令来产生一个随机的发送序列。

2、串并转换:通过matlab的reshape命令进行串并转换,需要注意的是转换后的结果是以列为单位的,不是以行为单位的。

3、16QAM调制:一般可以用QPSK、M-QAM等调制方式,本次试验使用16QAM调制方式。在实验中利用所编的qam.m(自己编的)子函数来进行16QAM调制。

4、调制:OFDM信号的调制是利用IFFT来实现的,注意使用matlab的IFFT命令时,是对矩阵的列向量进行变换,而不是对行向量进行变换,这样经过变换后每一行的元素的频率就是一样的,而正好每一行频率都是正交的,而每一行是属于同一个子载波。

5、加入循环前缀:将IFFT变换后的后面gl个元素复制到前面,作为循环前缀,这样能抵抗由于多径时延引起的码间干扰的影响,如果循环前缀的长度大于最大时延扩展,则在理论上说能完全消除码间干扰的影响。

6、并串转换后送入信道进行传输,信号在信道中会产生多径、频偏、相偏等现象。

7、接收端进行串并转换(同(2));

8、去循环前缀;

9、FFT:去循环前缀之后的信号进行FFT,使用matlab的FFT命令;

10、信道估计:在此实验中是利用多径时延信道进行信息传送的,因此信号在信道中传输的过程中会出现多径时延,多普勒频移等现象,所以接收到的信号会产生严重的失真,但是如果我们知道信道对信号的影响,在接收端对信号进行恢复,从而减弱甚至抵消信道对信号的影响。本实验中使用基于LS算法的信道估计。

11、16QAM解调:在实验中利用deqam.m(自己编的)子函数进行16QAM解调。

二、仿真结果

1、产生的发送序列:随机产生的0—1序列,总数为25600个,此处只画出它的前50个值;

图1

2、经过符号的星座映射后产生的星座图:该实验中使用16QAM进行数字调制;

图2

3、发送信号:

图3

4、接收信号:信号在信道中传输,不仅会受到噪声的影响,还会产生多径时延、多普勒频移等现象,所以信号会出现严重的失真;

图4

5、信道估计后信号的星座图:

图5

图6

6、接收序列:所得的接收序列应该也是一个长度为25600的0—1序列,此处只画出它的前50个值;

图7

多径时延信道对信号的一个重要影响就是会使信号产生多径时延,如图8、9、10分别列出了最大时延为16、33和41个数据单位时信道估计后的信号的矢量图;

图8

图9

图10

从图8、9、10可以看出,随着最大时延的增大,信道估计后的信号的矢量图的离散性越来越大。所以说最大时延和误码率有关。

图11

以上所涉及的都是4-path Rayleigh Fading channel,下图是多径的条数和系统误码率的关系;

图12

从图12可以看出,在相同的信噪比下,随着信道多径条数的增大,系统的误码率也随之增大。当信道多径的条数一定时,系统的误码率随着信噪比的增大而减小。

下面分析系统误码率和信噪比的关系(以多径条数为4为例)

图13、14和15分别给出了当系统的信噪比为20,15,10dB时,信道估计后的信号的矢量图;

图13

图14

图15

从图13、14、15可以看出,随着系统信噪比的减小,信道估计后的信号与发送信号的区别越来越大。下图为基于4-path Rayleigh Fading channel的系统的信噪比和误码率的关系;

图16

附:本次实验用到的程序

clc;

clear all;

rand('state',4);

SNR=15;%信噪比取值,单位为db

fl=128;%fft的长度

Ns=50;%设置一个帧结构中OFDM信号的个数

para=128;%设置并行传输的子载波个数

sr=250000;%设置符号速率

br=sr*2;%设置每个子载波的比特率

gl=32;%设置保护时隙的长度

an=[1,0.7,0.3,0.5];%每条多径的幅度增益

% tn=[0,1,2,3];%每条路径的相对时延,单位为us

wn=rand(1,4).*10;%每条路径的多普勒频移

% an=rand(1,4)*2;

tn=fix(rand(1,4)*0);

% wn=round(rand(1,4)*10);

sita=rand(1,4).*2*pi;%设置相偏

%************信源发生器****************************************

signal=round(rand(1,para*Ns*4));

figure(1);

stem(signal(1:50));

title('产生的序列');

%*************16QAM调制***********************************

x1=qam(signal);

x=reshape(x1,para,Ns);

figure(2);

plot(x,'o');

title('产生的复信号的星座图');

%***************加入训练序列*******************************************

training_symbols=qam(round(rand(1,para*4)));

training_symbols=training_symbols';

training_symbols_2=cat(2,training_symbols,training_symbols);

training_symbols_4=cat(2,training_symbols_2,training_symbols_2);

training_symbols_8=cat(2,training_symbols_4,training_symbols_4);

x=cat(2,training_symbols_8,x);

%**********************IFFT****************************************

y=ifft(x);

ich2=real(y);

qch2=imag(y);

%**************插入循环前缀************

ich3=[ich2(fl-gl+1:fl,:);ich2];

qch3=[qch2(fl-gl+1:fl,:);qch2];

ich4=reshape(ich3,1,(fl+gl)*(Ns+8));

qch4=reshape(qch3,1,(fl+gl)*(Ns+8));

Trdata=ich4+qch4.*sqrt(-1);%形成复数发射数据

%***************************加入噪声***********************************

Trdata_power=var(Trdata)+mean(Trdata)*mean(Trdata);

linear_SNR=10^(SNR/10);

noise_sigma=Trdata_power/linear_SNR;

noise_factor=sqrt(noise_sigma);

noise=randn(1,length(Trdata))*noise_factor;

redata=Trdata+noise;

% redata=Trdata;

figure(3)

plot(redata,'o');

title('加入噪声的发送信号');

%****************************建立信道***************************************

%*******得到信道的响应函数,然后令输入信号和信道响应做卷积得到输出信号

q=0:max(tn);

h=zeros(4,max(tn)+1);

for p=1:4

h(p,:)=an(p).*exp(sqrt(-1).*(wn(p).*q)).*exp(sqrt(-1)*sita(p)).*(dirac(q-tn(p))>1);

end

h=sum(h);

s2=conv(redata,h);

s3=s2(1:length(redata));

figure(4)

plot(s3,'o');

title('接收信号')

%***********************接收端,去掉循环前缀,fft***********

idata=real(s3);

qdata=imag(s3);

idata1=reshape(idata,fl+gl,Ns+8);

qdata1=reshape(qdata,fl+gl,Ns+8);

idata2=idata1(gl+1:gl+fl,:);

qdata2=qdata1(gl+1:gl+fl,:);

Rx_data=idata2+qdata2*sqrt(-1);

Rx_carriers=fft(Rx_data);

Rx_training_symbols=Rx_carriers(:,(1:8));

Rx_carriers=Rx_carriers(:,(9:(Ns+8)));

%************************信道估计*******************

training_symbols=cat(2,training_symbols,training_symbols);

training_symbols=cat(2,training_symbols,training_symbols);

training_symbols=cat(2,training_symbols,training_symbols);

Rx_training_symbols=Rx_training_symbols./training_symbols;

Rx_training_symbols_deno=Rx_training_symbols.^2;

Rx_training_symbols_deno=Rx_training_symbols_deno(:,1)+Rx_training_symbols_deno(:,2)+Rx_training_symbols_deno(:,3)+Rx_training_symbols_deno(:,4)+Rx_training_symbols_deno(:,5)+Rx_training_symbols_deno(:,6)+Rx_training_symbols_deno(:,7)+Rx_training_symbols_deno(:,8);

Rx_training_symbols_nume=Rx_training_symbols(:,1)+Rx_training_symbols(:,2)+Rx_training_symbols(:,3)+Rx_training_symbols(:,4)+Rx_training_symbols(:,5)+Rx_training_symbols(:,6)+Rx_training_symbols(:,7)+Rx_training_symbols(:,8);

% Rx_training_symbols_nume=conj(Rx_training_symbols_nume);

Rx_training_symbols=Rx_training_symbols_nume./Rx_training_symbols_deno;

Rx_training_symbols2=cat(2,Rx_training_symbols,Rx_training_symbols);

Rx_training_symbols4=cat(2,Rx_training_symbols2,Rx_training_symbols2);

Rx_training_symbols8=cat(2,Rx_training_symbols4,Rx_training_symbols4);

Rx_training_symbols16=cat(2,Rx_training_symbols8,Rx_training_symbols8);

Rx_training_symbols32=cat(2,Rx_training_symbols16,Rx_training_symbols16);

Rx_training_symbols48=cat(2,Rx_training_symbols32,Rx_training_symbols16);

Rx_training_symbols50=cat(2,Rx_training_symbols48,Rx_training_symbols2);

Rx_carriers=Rx_training_symbols50.*Rx_carriers;

%**********进行傅里叶变换****************

ry=reshape(Rx_carriers,1,para*Ns);

figure(5);

plot(ry,'o');

title('经过fft之后的信号矢量图');

%*************************16QAM解调************************************

resignal=deqam(ry);

figure(6)

stem(resignal(1:50),'k');

hold on

stem(signal(1:50),'r');

title('接收到的序列')

[wumageshu,wumalv]=biterr(signal,resignal);

wumageshu

wumalv下载本文

显示全文
专题