求高手指教,matlab下对直扩系统的仿真代码

求高手指教,matlab下对直扩系统的仿真代码,第1张

具体可去matlab中文论坛 搜索“直扩系统仿真代码”,有几个把

下面是直扩系统仿真程序,第一段是扩频和调制,第二段是m序列生成,求 第一段程序接着编写解扩和解调的程序~

(1)clc

clear

%生成待传输信息,码元宽度为切普宽度的10倍

message=randint(1,4);%随机生成4个0 1码

code=[];

for i=1:length(message)

if message(1,i)==0

code1=zeros(1,10);

else

code1=ones(1,10);

end

code=[code,code1];

end

%生成m序列

a=[ 0 1 0 0 1 1 1 ]; %m序列特征多项式

b=[0 0 0 0 0 0 1]; %移位寄存器初始状态

c=length(code); %生成m序列长度

m_sequence=mseq(a,b,c);

dsss=codem_sequence;%扩频

%BPSK调制

f=20; %载波频率,为码元速率二倍

t=0:1/(f-1):1;

cp=[];

mod=[];

for j=1:length(dsss)

if dsss(j)==0

cp1=-ones(1,20);

else

cp1=ones(1,20);

end

c=cos(2pift);

cp=[cp,cp1];

mod=[mod,c];

end

bpsk=cpmod;

plot(bpsk,'linewidth',15);grid on

ylabel('bpsk modulation');

axis([0 20length(dsss) -2 2]);

(2)

function[seq]=mseq(connections,registers,len)

m=length(connections);

L=2^m-1;%周期长度

if len==0

len=L;

end

fan=0;

for i=1:len

seq(i)=registers(m);

for j=1:m

fan=fan+connections(j)registers(j);

fan=(mod(fan,2));

end

for t=m:-1:2%寄存器移位

registers(t)=registers(t-1);

end

registers(1)=fan;

fan=0;

end

被控对象:function dx=liuxiaomodel(t,x)

a1=-10;

a2=10;

a3=00;

l=05;

j1=10;

j2=10;

j3=20;

delta_1=05x(2)+15sign(x(2));

delta_2=05x(4)+15sign(x(4));

delta_3=05x(6)+15sign(x(6));

dx=zeros(9,1);

dx(1)=x(2);

dx(2)=1/j1(a1x(4)x(6)-lx(4)+x(7)+delta_1);

dx(3)=x(4);

dx(4)=1/j2(a2x(2)x(6)-lx(2)+x(8)+delta_2);

dx(5)=x(6);

dx(6)=1/j3(a3x(2)x(4)+x(9)+delta_3);

dx(7)=0;

dx(8)=0;

dx(9)=0;

dx=[dx(1);dx(2);dx(3);dx(4);dx(5);dx(6);dx(7);dx(8);dx(9)];

end

控制程序

clear

tic

ts=001;

kk=1000;

tt=0:ts:ts(kk-1);

x10=001;

x20=00;

x30=001;

x40=00;

x50=001;

x60=00;

gamma=-500;

thea_10=05;

thea_20=05;

thea_30=05;

for ii=1:1:kk

xd=sin(pits(ii-1));

dxd=picos(pits(ii-1));

ddxd=-1pipisin(pits(ii-1));

e10=x10-xd;

de10=x20-dxd;

q10=dxd-15e10;

dq10=ddxd-15de10;

s10=de10+15e10;

e30=x30-xd;

de30=x40-dxd;

q30=dxd-15e30;

dq30=ddxd-15de30;

s30=de30+15e30;

e50=x50-xd;

de50=x60-dxd;

q50=dxd-15e50;

dq50=ddxd-15de50;

s50=de50+15e50;

thea1p=thea_10+gammadq10s10ts;

thea2p=thea_20+gammadq30s30ts;

thea3p=thea_30+gammadq50s50ts;

% x70=thea1pdq10+x40x60+05x40-15s10-201sign(s10);

% x80=thea2pdq30-x20x60+05x20-15s30-201sign(s30);

% x90=thea3pdq50+x20x40-15s50-201sign(s50);

x70=dq10+x40x60+05x40-15s10-201sign(s10);

x80=dq30+x20x60+05x20-15s30-201sign(s30);

x90=dq50+x20x40-15s50-201sign(s50);

[t,x]=ode45('liuxiaomodel',[(ii-1)ts,iits],[x10;x20;x30;x40;x50;x60;x70;x80;x90]);

[m,n]=size(x);

x10=x(m,1);

x20=x(m,2);

x30=x(m,2);

x40=x(m,2);

x50=x(m,2);

x60=x(m,2);

% thea_10=thea1p;

% thea_20=thea2p;

% thea_30=thea3p;

out1(ii)=x10;

out2(ii)=x20;

out3(ii)=x30;

out4(ii)=x40;

out5(ii)=x50;

out6(ii)=x60;

out7(ii)=x70;

out8(ii)=thea1p;

end

figure(1),plot(tt,out1),grid

figure(2),plot(tt,out3),grid

figure(3),plot(tt,out5),grid

figure(4),plot(tt,out7),grid

figure(5),plot(tt,out8),grid

toc

采用注释部分没有运行结果,如同进入死循环为何?求教!!

clear

clc

pntaps=[0 0 1 1 ];

N=length(pntaps)

pninitial=[0 0 0 1];

pndata=zeros(1,2^N-1);

pnregister=pninitial;

n=0;kk=0;

while kk==0

n=n+1;

pndata(1,n)=pnregister(1,1);

feedback=rem((pnregisterpntaps'),2);

pnregister=[feedback,pnregister(1,1:N-1)];

if pnregister==pninitial;

kk=1;

end

end

pndata=2pndata-1;

Rm(1)=sum(pndatapndata)/n

for k=1:n-1

Rm(k+1)=sum(pndatacircshift(pndata,[0,k]))/n

end

subplot(2,1,1);x=[0:n-1];stem(x,pndata);

title('m序列发生器的输出');

axis([0 30 -15 15]);

subplot(2,1,2);plot(x,Rm);

title('m序列的自相关函数')

axis([0 30 0 15]);

导入simulink

在similink里面有个 From File模块

你把你的m文件名输入到那模块

运行Simulink模型可以使用sim函数,仿真结果可以通过以下几种方式导出:

(1)设置Scope模块的Save data to workspace;

(2)模型中加入Outport模块,并设置模型的Workspace I/O;

(3)使用To Workspace模块项工作区导入数据。

clear all;

g=[1 0 1 1 1 0 0 1];%基带信号

f=100; %载波频率

t=0:2pi/99:2pi;

cp=[];sp=[];

mod=[];mod1=[];bit=[];

for n=1:length(g);

if g(n)==0;

die=-ones(1,100); %Modulante

se=zeros(1,100); %

else g(n)==1;

die=ones(1,100); %Modulante

se=ones(1,100); %

end

c=sin(ft);

cp=[cp die];

mod=[mod c];

bit=[bit se];

end

bpsk=cpmod;

subplot(2,1,1);plot(bit,'LineWidth',15);grid on;

title('Binary Signal');

axis([0 100length(g) -25 25]);

subplot(2,1,2);plot(bpsk,'LineWidth',15);grid on;

title('ASK modulation');

axis([0 100length(g) -25 25]);

1、用数值方法求解微分方程(未指定初始条件,按零初始条件考虑):

% 常数定义

m=196;

k=19600;

c=2940;

clf

tstr = {'忽略阻尼', '考虑阻尼'};

for n=1:2

    subplot(2,1,n)

    dx=@(t,x)[x(2); (160sin(19t)-kx(1)-(n-1)cx(2))/m];

    [t,x]=ode45(dx,[0 3],[0 0]);

    ax=plotyy(t,x(:,1),t,160sin(19t));

    %legend([h1 h2],'x(t)','P(t)')

    xlabel t

    axes(ax(1)); ylabel x(t)

    axes(ax(2)); ylabel P(t)

    title(tstr{n})

end

对于考虑阻尼影响的情况,系统稳态响应为和输入相同频率的正弦波,由图中的峰值可以大致计算出幅值的放大倍数以及相位滞后。而对于忽略阻尼影响的情况,由于输出由自由振荡和强迫振荡两部分组成,且频率不同,呈现出来的响应曲线不太容易辨别幅值放大及相位变化。事实上,无阻尼系统在传统控制理论中认为是不稳定的,那么建立在稳态响应基础上的频域方法从概念上说也是有疑问的。

2、理论方法求解。

考虑两种做法,一是求解微分方程的解析解:

>> x1=dsolve('196D2x+19600x=160sin(19t)','x(0)=0,Dx(0)=0')

x1 =

76/12789sin(10t)-40/12789sin(19t)

>> x2=dsolve('196D2x+2940Dx+19600x=160sin(19t)','x(0)=0,Dx(0)=0')

x2 =

6308/2845871exp(-15/2t)sin(5/27^(1/2)t)7^(1/2)+1900/1219659exp(-15/2t)cos(5/27^(1/2)t)-580/406553sin(19t)-1900/1219659cos(19t)

其中x1为无阻尼情况,包括两项,其中后面一项为强迫振荡,可知放大倍数为40/12789/160 = 19548e-005,相角滞后为0;x2为考虑阻尼的情况,结果包括4项,前两项为衰减项,稳态响应只有后两项,则其幅值放大倍数和相角滞后分别为

>> norm([-1900/1219659, -580/406553])/160

ans =

  13202e-005

>> atan2(-1900/1219659, -580/406553)/pi180

ans =

 -1324831

二是用频率特性的概念直接求:

G = tf(1,[m c k]);

w = 19;

Gjw = evalfr(G,jw);

mag = abs(Gjw)

phase = angle(Gjw)180/pi

得到的

mag =

  13202e-005

phase =

 -1324831

即分别为幅值放大倍数和相角滞后,和上面求解微分方程的结果一致。

以上就是关于求高手指教,matlab下对直扩系统的仿真代码全部的内容,包括:求高手指教,matlab下对直扩系统的仿真代码、matlab控制程序仿真,求解、请问 利用MATLAB开发一个n=5的m序列发生器的仿真程序,其本原多项式为g(x)=1+x^3+x^4.如何写代码 在线等 谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9269781.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存