24小时热门版块排行榜    

查看: 836  |  回复: 5

xzfgggthn

新虫 (小有名气)

[求助] 在matlab里用ode45函数,微分方程包括ask信号怎么办 已有2人参与

大概的意思就是我想用obe45解一个微分方程组,方程里的一项S(t)为ask信号

首先我的输入信号是一个ask信号,代码如下:
%=============================1、构造载波,产生8个码元,生成已调信号========%
a=randsrc(1,8,[0:1]);%产生8个随机的二进制数
l=linspace(0,2*pi,50);%利用linspace函数创建数组,2pi长度取点50个模拟一个码元
f=sin(2*l);%生成载波
t=linspace(0,10*pi,400);%定义时轴length为10pi,取点400个,代表8个码元的总取样点数
out=1:400;%规定已调信号length
b=1:400;% 规定基带信号length
w=1:400;%规定载波length
%=================生成ASK信号===========%
for i=1:8
    if a(i)==0
      for j=1:50
          out(j+50*(i-1))=0; %若码元为0则将0输出
      end
    else
      for j=1:50
          out(j+50*(i-1))=5*f(j); %若码元为1则将载波输出
      end
    end
end

for i=1:8  
    for j=1:50
        b(j+50*(i-1))=a(i); %b作为调制信号输出
        w(j+50*(i-1))=f(j); %w作为载波输出
    end
end
(这个ask信号代码是没问题的,我单独运行过,可以生成ask信号)

然后我要把这个ask的输出信号作为微分方程的一项,我觉得他的输出信号应该是out。
于是我创建了个m文件,定义了一个微分方程,微分方程里要包括我刚才的ask信号,代码是
function dy=odefun(t,y)dy=zeros(2,1);
dy(1)=y(2);
dy(2)=y(2)+y(1)-y(1)^3+cos(w)+out;

然后主程序里我首先写上了那个ask信号的代码,就是我帖子里最开始那段代码,然后写上了[t,y]=ode45(@odefun,[0 0.5],[1 1]);
请问这样写哪里有问题,为啥程序总报错,感觉就是方程里的out有问题,但是不知道怎么改
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cymcm

银虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
我觉得out是否定义为全局变量?或者定义为m文件才可以吧!

[ 发自小木虫客户端 ]
2楼2015-04-07 06:56:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xzfgggthn

新虫 (小有名气)

引用回帖:
2楼: Originally posted by cymcm at 2015-04-07 06:56:02
我觉得out是否定义为全局变量?或者定义为m文件才可以吧!

我也是刚接触matlab,不太懂全局变量,您能说下具体怎么弄呢?
3楼2015-04-07 11:17:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xzfgggthn

新虫 (小有名气)

4楼2015-04-08 12:03:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

a11835

新虫 (小有名气)

【答案】应助回帖

在matlab中用global定义全局变量,全局变量在主程序文件和函数程序文件里都要声明
如这样
global w out;
你写的这个函数里t变量没有用到啊,为什么不在函数输入中加入所需变量呢
5楼2015-04-25 20:27:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

那根彩笔

新虫 (初入文坛)

楼主 你的这个解决了吗 ?我也遇到这样的问题了
6楼2018-12-04 18:54:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 xzfgggthn 的主题更新
信息提示
请填处理意见