matlab阵列天线波束扫描,带有天线阵列的OFDM系统的自适应波束形成

大家帮忙看看这篇仿真该怎么做?

这篇论文的仿真,我自己做了一个,但是不好使,我要画的是MSE学习曲线,一直不收敛。不知道哪里错了,高人指点一下吧!

clear

clc

Num=500;                % 包含的BLOCK数

Np=7;                   % 一个BLOCK的导频数

N=32;                   % 一个BLOCK的数据长度

S=4;                    % 天线阵元数

SNR=18;                 % 信躁比

m=4;                    % 用户数

lamda=0.01;              % 波长

d=lamda/2;              % 阵元间距

mu=0.008;               % 步长

sita=[-30,0,20,40];     % sita DOA

p=fix((N-Np)/Np)+1;     % 导频间隔

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

fph=Fp(Np,N,p);             % 产生导频傅立叶变换矩阵

a00=a0(S,d,lamda,sita(3));  % 产生方向向量

wn=ones(S,1);               % 初始化权值

en=zeros(Np,Num);           % 初始化方差,导频的,频域中的

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

A1=ones(1,Num*(32-Np));                % 有用信号

for jj=1:Num*Np

if jj==1

B1(jj)=0;

B1(2*jj)=1;

else

B1(2*jj)=1;                          % 导频信号

B1(2*jj+1)=0;

end

end

%C1=QAM16Mod(A1);                            % QAM调制

muxout1=fpinsert1(Np,A1,B1);                % 插入导频 fpinsert1(导频数Np,有用信号,导频信号)

psout1=ofdm2(muxout1,N);                    % OFDM处理模块,包括 串并-IFFT-并串

l1=size(psout1);

M1=reshape(psout1,32,fix(l1(2)/32));        % 经过OFDM处理后的信号变成矩阵形式,每一列是一个用户的信息,每个用户有32行即32个符号

%-------------------------------天线接收

y=zeros(Np,1);

k=size(M1);

xn=M1(:,1);

vn0=a00*xn';

%vn=awgn(vn0,SNR,'measured');           % 增加噪声

rn=wn'*vn0;                             % 经过权值调整后的信号

psout2=ofdmd2(rn,N);                    % 接收端的OFDM块反处理

[a,b]=fpde0(Np,psout2);                 % 解复用,a是信号,b是导频

y(1:Np)=B1(1:Np);                        % 参考导频向量

b=b.';

en=y-b;

for i=2:k(2)

wn=wn+2*mu*vn0*(fph'*(y-b));     % 权值更新

xn=M1(:,i);                        % 取下一个符号块

vn0=a00*xn';                       % 接收

%vn=awgn(vn0,SNR,'measured');       % 增加噪声

rn=wn'*vn0;                        % 经过权值调整后的信号

psout2=ofdmd2(rn,N);                % 接收端的OFDM块反处理

[a,b]=fpde0(Np,psout2);             % 解复用,a是信号,b是导频

y(1:Np)=B1((i-1)*Np+1:(i-1)*Np+Np);

b=b.';

for n=1:Np

en(n,i)=(abs(y(n)-b(n)))^2;

end

end

e=sum(en,1);

semilogy(abs(e)) ;

其中的函数如下:

function Asita=a0(M,d,lamda,sita)

%

for ii=1:M

Asita(ii,1)=exp(-j*(2*pi/lamda)*d*(ii-1)*sin(sita/180*pi));

end

function muxout=fpinsert1(Np,A,B)

% insert fp

%

if Np==3

for k=1:fix(numel(A)/29)

C((k-1)*32+1)=B((k-1)*3+1);

C((k-1)*32+11)=B((k-1)*3+2);

C((k-1)*32+21)=B((k-1)*3+3);

for i=2:10

C((k-1)*32+i)=A((k-1)*29+(i-1));

end

for i=12:20

C((k-1)*32+i)=A((k-1)*29+(i-2));

end

for i=22:32

C((k-1)*32+i)=A((k-1)*29+(i-3));

end

end

end

if Np==5

for k=1:fix(numel(A)/27)

C((k-1)*32+1)=B((k-1)*5+1);

C((k-1)*32+8)=B((k-1)*5+2);

C((k-1)*32+15)=B((k-1)*5+3);

C((k-1)*32+22)=B((k-1)*5+4);

C((k-1)*32+29)=B((k-1)*5+5);

for i=2:7

C((k-1)*32+i)=A((k-1)*27+i-1);

end

for i=9:14

C((k-1)*32+i)=A((k-1)*27+i-2);

end

for i=16:21

C((k-1)*32+i)=A((k-1)*27+i-3);

end

for i=23:28

C((k-1)*32+i)=A((k-1)*27+i-4);

end

for i=30:32

C((k-1)*32+i)=A((k-1)*27+i-5);

end

end

end

if Np==7

for k=1:fix(numel(A)/25)

C((k-1)*32+1)=B((k-1)*7+1);

C((k-1)*32+6)=B((k-1)*7+2);

C((k-1)*32+11)=B((k-1)*7+3);

C((k-1)*32+16)=B((k-1)*7+4);

C((k-1)*32+21)=B((k-1)*7+5);

C((k-1)*32+26)=B((k-1)*7+6);

C((k-1)*32+31)=B((k-1)*7+7);

for i=2:5

C((k-1)*32+i)=A((k-1)*25+i-1);

end

for i=7:10

C((k-1)*32+i)=A((k-1)*25+i-2);

end

for i=12:15

C((k-1)*32+i)=A((k-1)*25+i-3);

end

for i=17:20

C((k-1)*32+i)=A((k-1)*25+i-4);

end

for i=22:25

C((k-1)*32+i)=A((k-1)*25+i-5);

end

for i=27:30

C((k-1)*32+i)=A((k-1)*25+i-6);

end

for i=32:32

C((k-1)*32+i)=A((k-1)*25+i-7);

end

end

end

muxout=C;

function out=Fp(Np,N,p)

% make matrix Fp(n)

% M    行数

% N    列数

%

for m=1:N

for n=1:Np

out(n,m)=exp(-j*2*pi*(m-1)*(n-1)*p/N);

end

end

function [A,B]=fpde0(Np,C)

% insert fp

%

if Np==3

for k=1:fix(numel(C)/32)

B((k-1)*3+1)=C((k-1)*32+1);

B((k-1)*3+2)=C((k-1)*32+11);

B((k-1)*3+3)=C((k-1)*32+21);

for i=2:10

A((k-1)*29+(i-1))=C((k-1)*32+i);

end

for i=12:20

A((k-1)*29+(i-2))=C((k-1)*32+i);

end

for i=22:32

A((k-1)*29+(i-3))=C((k-1)*32+i);

end

end

end

if Np==5

for k=1:fix(numel(C)/32)

B((k-1)*5+1)=C((k-1)*32+1);

B((k-1)*5+2)=C((k-1)*32+8);

B((k-1)*5+3)=C((k-1)*32+15);

B((k-1)*5+4)=C((k-1)*32+22);

B((k-1)*5+5)=C((k-1)*32+29);

for i=2:7

A((k-1)*27+i-1)=C((k-1)*32+i);

end

for i=9:14

A((k-1)*27+i-2)=C((k-1)*32+i);

end

for i=16:21

A((k-1)*27+i-3)=C((k-1)*32+i);

end

for i=23:28

A((k-1)*27+i-4)=C((k-1)*32+i);

end

for i=30:32

A((k-1)*27+i-5)=C((k-1)*32+i);

end

end

end

if Np==7

for k=1:fix(numel(C)/32)

B((k-1)*7+1)=C((k-1)*32+1);

B((k-1)*7+2)=C((k-1)*32+6);

B((k-1)*7+3)=C((k-1)*32+11);

B((k-1)*7+4)=C((k-1)*32+16);

B((k-1)*7+5)=C((k-1)*32+21);

B((k-1)*7+6)=C((k-1)*32+26);

B((k-1)*7+7)=C((k-1)*32+31);

for i=2:5

A((k-1)*25+i-1)=C((k-1)*32+i);

end

for i=7:10

A((k-1)*25+i-2)=C((k-1)*32+i);

end

for i=12:15

A((k-1)*25+i-3)=C((k-1)*32+i);

end

for i=17:20

A((k-1)*25+i-4)=C((k-1)*32+i);

end

for i=22:25

A((k-1)*25+i-5)=C((k-1)*32+i);

end

for i=27:30

A((k-1)*25+i-6)=C((k-1)*32+i);

end

for i=32:32

A((k-1)*25+i-7)=C((k-1)*32+i);

end

end

end

function psout=ofdmd2(wightin,N)

% s-p converter

%

a=size(wightin);

for kk=1:fix(a(2)/N);

for ik=1:N

spout(ik,1)=wightin(1,(kk-1)*N+ik);

end

psin=fft(spout);

for ik=1:N

psout(1,(kk-1)*N+ik)=psin(ik,1);

end

end

function psout=ofdm2(muxout,N)

% s-p converter

%

a=size(muxout);

for kk=1:fix(a(2)/N);

for ik=1:N

spout(ik,1)=muxout(1,(kk-1)*N+ik);

end

psin=ifft(spout);

for ik=1:N

psout(1,(kk-1)*N+ik)=psin(ik,1);

end

end

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值