我想问一下,OFDM信道估计用matlab仿真怎么设计啊?具体流程我不太懂,有没有高手给我讲下流程啊?

我想问一下,OFDM信道估计用matlab仿真怎么设计啊?具体流程我不太懂,有没有高手给我讲下流程啊?,第1张

你好 希望可以帮到你

%本程序用于OFDM基本原理仿真

%数据调制采用QPSK

clear allclc

%*****************参数设置部分**********************

SNR=10 %信噪比取值,dB为单位

fl=128 %设置FFT长度

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

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

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

%***************发送端部分*************************

Signal=rand(1,para*Ns*2)>0.5 %产生0,1随机数列,符号个数为para*2*Ns

%for i=1:para

%for j=1:Ns*2

% SigPara(i,j)=Signal(i*j)错误的,作者是傻X

%串并转换,将随机产生的二进制矩阵变换为行数为para,列数为2*Ns的矩阵

%end

%end

SigPara=reshape(Signal,para,2*Ns)

%***********进行QPSK数据调制,将数据分为两个通道**************

for j=1:Ns

ich(:,j)=SigPara(:,2*j-1)

qch(:,j)=SigPara(:,2*j)

end

kmod=1./sqrt(2)

ich1=ich.*kmod

qch1=qch.*kmod

x=ich1+qch1.*sqrt(-1) %产生复信号

y=ifft(x) %通过傅里叶反变换,将频域数据转换为时域数据

ich2=real(y)%I信道取变换后的实部

qch2=imag(y) %I信道取变换后的虚部

%*******************插入保护间隔*******************

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

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

%******************并串转换*********************

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

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

%*****************形成复数发射数据***************

TrData=ich4+qch4.*sqrt(-1)

ReData=awgn(TrData,SNR,'measured')

%接收端 移去保护时隙

idata=real(ReData)

qdata=imag(ReData)

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

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

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

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

%********FFT*****************

Rex=idata2+qdata2*sqrt(-1)

ry=fft(Rex)

ReIchan=real(ry)

ReQchan=imag(ry)

ReIchan=ReIchan/kmod

ReQchan=ReQchan/kmod

%*******QPSK逆映射*********

for j=1:Ns

RePara(:,2*j-1)=ReIchan(:,j)

RePara(:,2*j)=ReQchan(:,j)

end

ReSig=reshape(RePara,1,para*Ns*2)

%符号抽样判决

ReSig=ReSig>0.5

figure

subplot(2,1,1)

stem(ReSig(1:1000))

legend('输出数据')

grid

subplot(2,1,2)

stem(Signal(1:1000))

legend('输入数据')

grid

%end of script file

这是我做的一个OFDM系统仿真。

供你参考。呵呵。

clear

clc

carr=256 %子载波个数

sym_c=10 %每个子载波含有的OFDM符号数

bit_sym=2 %每个符号含有的比特数,QPSK调制

IFFT_n=256%IFFT点数

r=1/10%保护间隔和OFDM数据的比例;

SNR=10%信噪比 dB

%产生信号

sum=carr*sym_c*bit_sym

colume=sum/(2*carr)

signal=rand(1,sum)>0.5 %初始信号

%QPSK调制,QPSK_sig里面存放的是调制后的信号,数目sumQ

sumQ=sum/2

imag=sqrt(-1) % 虚部 j

QPSK=[-1+imag,-1-imag,1+imag,1-imag] %创建QPSK 映射表

SIGNAL=zeros(1,sumQ) %计算并存放调制前的十进制数据

QPSK_sig=zeros(1,sumQ) %存放调制后的QPSK信号

for n=1:sumQ

SIGNAL(n)=signal(2*n-1)*2+signal(2*n)%将二进制换算成十进制

end

for i=1:sumQ

if SIGNAL(i)==0

QPSK_sig(i)=QPSK(1)

elseif SIGNAL(i)==1

QPSK_sig(i)=QPSK(2)

elseif SIGNAL(i)==2

QPSK_sig(i)=QPSK(3)

elseif SIGNAL(i)==3

QPSK_sig(i)=QPSK(4)

end

end

%串/并转换 计算第i个载波上面的信号to_par(i,:)

colume=sumQ/carr

for i=1:carr % carr载波个数

for j=1:colume

to_par(i,j)=QPSK_sig(carr*(j-1)+i)

end

end

colume=sumQ/carr

% % to_par=reshape(QPSK_sig,carr,colume)

%每个子载波上进行 IFFT变换 (调制后的QPSK信号进行IFFT)

for j=1:colume

y(:,j)=ifft(to_par(:,j))

end

% % y=ifft(to_par)

yr=real(y) %实部

yi=(y-yr)*sqrt(-1)*(-1)

%加入保护间隔

CP_len=r*colume %保护间隔长度

yr=[yr(:,colume-CP_len+1:colume),yr]

yi=[yi(:,colume-CP_len+1:colume),yi]

% 并/串 转换

% % y_=yr+yi*sqrt(-1) %并联的复信号

% % colume=sum/(2*carr)

% % for i=1:carr % carr载波个数

% % for j=1:colume

% % y_series(carr*(j-1)+i)=y_(i,j)

% % end

% % end

y_=yr+yi*sqrt(-1)

y_series=reshape(y_,1,(colume+CP_len)*carr)

%加入高斯白噪声

y_s_noi=awgn(y_series,SNR,'measured')

% 串/并 转换

% % for i=1:carr

% % for j=1:colume

% % y_par(i,j)=y_s_noi(carr*(j-1)+i)

% % end

% % end

y_par=reshape(y_s_noi,carr,colume+CP_len)

%去掉保护间隔

y_r=real(y_par)

y_i=(y_par-y_r)*(-1)*sqrt(-1)

y_r=y_r(:,CP_len+1:colume+CP_len)

y_i=y_i(:,CP_len+1:colume+CP_len)

%FFT变换

y_complex=y_r+y_i*sqrt(-1)

% % for i=1:carr

% % y_fft(i,:)=fft(y_complex(i,:))

% % end

for j=1:colume

y_fft(:,j)=fft(y_complex(:,j))

end

%并/串 转换

% % for i=1:carr

% % for j=1:colume

% % y_receive(carr*(j-1)+i)=y_fft(i,j)

% % end

% % end

y_receive=reshape(y_fft,1,sumQ)

%下面注释掉的部分是验证调制后的QPSK和接收到的复信号对比。

% % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% % % % figure(1)

% % % % subplot(2,1,1),stem(QPSK_sig(1:50)),grid minor

% % % % title('The Original Signal')

% % % % xlabel('x'),ylabel('y')

% % % %

% % % % subplot(2,1,2),stem(y_receive(1:50)),grid minor

% % % % title('The Final Signal')

% % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% QPSK逆映射

QPSK=[-1+imag,-1-imag,1+imag,1-imag]

Y_r=real(y_receive)

Y_i=(y_receive-Y_r)*(-1)*sqrt(-1)

for i=1:sumQ

if Y_r(i)<0

Y_r(i)=0

else

Y_r(i)=1

end

end

for i=1:sumQ

if Y_i(i)<0

Y_i(i)=1

else

Y_i(i)=0

end

end

for i=1:sumQ

Y(2*i-1)=Y_r(i)

Y(2*i)=Y_i(i)

end

check=signal-Y

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

figure(1)

subplot(3,1,1),stem(signal(1:50)),grid minor

title('The Original Signal')

xlabel('x'),ylabel('y')

subplot(3,1,2),stem(Y(1:50)),grid minor

title('The Final Signal')

subplot(3,1,3),stem(check(1:50)),grid minor

title('发端与收端的误差')

matlab是要学习的,最起码你要会建立文件,会对其进行仿真。下面的程序可以直接复制到一个新的m文件中进行仿真。

clear

clc

SNR=10 % 信噪比

fl=128 % 设置FFT长度

Ns=6 %设置一个祯结构中OFDM信号的个数

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

sr=250000%符号速率

br=sr.*2% 每个子载波的比特率

gl=32 %保护时隙的长度

Signal=rand(1,para*Ns*2)>0.5%产生0,1 随即序列,符号数为para*Ns*2

for i=1:para

for j=1:Ns*2

SigPara(i,j)=Signal(i*j)%串并变换

end

end

%QPSK调制,将数据分为两个通道

for j=1:Ns

ich(:,j)=SigPara(:,2*j-1)

qch(:,j)=SigPara(:,2*j)

end

kmod=1./sqrt(2)

ich1=ich.*kmod

qch1=qch.*kmod

x=ich1+qch1.*sqrt(-1) %频域数据变时域

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)

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

%形成复数发射数据

TrData=ich4+qch4.*sqrt(-1)

%接收机

%加入高斯白噪声

ReData=awgn(TrData,SNR,'measured')

%接收端

%移去保护间隔

idata=real(ReData)

qdata=imag(ReData)

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

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

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

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

%FFT

Rex=idata2+qdata2*sqrt(-1)

ry=fft(Rex)

ReIChan=real(ry)

ReQChan=imag(ry)

ReIchan=ReIChan/kmod

ReQchan=ReQChan/kmod

%QPSK逆映射

for j=1:Ns

RePara(:,2*j-1)=ReIChan(:,j)

RePara(:,2*j)=ReQChan(:,j)

end

ReSig=reshape(RePara,1,para*Ns*2)

%符号抽样判决

ReSig=ReSig>0.5

figure(1)

subplot(2,1,1),stem(ReSig(1:20)),grid minor

title('resignal')

xlabel('x'),ylabel('y')

subplot(2,1,2),stem(Signal(1:20)),grid

title('signal')

这是一个最基本的OFDM系统仿真,可以与OFDM系统框图对照理解,希望能帮到你。

另外,团IDC网上有许多产品团购,便宜有口碑


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8107303.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存