matlab仿真m序列和其自相关函数时,子函数应该怎样调用?求高手解答! 80

这是程序:%我以ms_generator(函数名)命名了一个M文件(函数文件类型),放在了A路径下,seq中存放m序列生成值,这个文件运行没有问题functionseq=... 这是程序:
%我以ms_generator(函数名)命名了一个M文件(函数文件类型),放在了A路径下,seq中存放m序列生成值,这个文件运行没有问题
function seq=ms_generator(registers,connections)
registers=[0 0 0 0 1];
connections=[1 0 0 1 0 1];
n=length(connections);
L=2^(n-1)-1;
seq(1)=registers(n-1);
for i=2:L
sum=0;
for m=1:(n-1)
sum=mod(sum+registers(m)*connections(m+1),2);
end
for k=(n-1):-1:2
registers(k)=registers(k-1);
end
registers(1)=sum;
seq(i)=registers(n-1);
end
%接着我又在另建了一个M文件(也是function类型),以auto_corr命名。这下就出错了!我用函数auto_corr()计算二进制序列seq的自相关函数,在这个函数内调用了生成m序列的函数ms_generator(*)生成的m序列seq再计算,但结果总是说第九行出问题了,说是矩阵维数必须一致,这是怎么回事呀?
function auto_correlation=auto_corr(seq)
registers=[1 0 0 0 0];
connections=[1 0 1 0 0 1];
seq=ms_generator(registers,connections);
seq=-1*(seq*2-1);
len=length(seq);
temp=[seq seq];
for i=0:len-1
auto_correlation(i+1)=seq*(temp(i+1:i+len));
end
auto_correlation
plot(0:len-1,auto_correlation);
我这样把两个函数分开写在两个M文件,然后在一个M文件中的函数中调用另一个M文件中那个函数对吗?
展开
 我来答
百度网友6c9fee910
2014-05-18 · TA获得超过264个赞
知道答主
回答量:63
采纳率:0%
帮助的人:55.3万
展开全部
你的文件之间函数调用没问题,但程序可能有问题

建议你用脚本+函数的模式,把 auto_correlation 文件中第一行去掉后运行,这样做的好处是可以在workspace中看到生成的变量以及维数,你就可以知道那个变量的维数和你想的不一样了。

另外matlab中“*”表示矩阵乘法,而“.*”表示数的乘法,一般维数错误都是因为这两个算符混用。你看第九行是不是应该改成“.*”呢

最后,matlab能用矩阵乘法的地方最好不要用for循环,这两种方法的运算速度差很多(矩阵向量乘法快),因此应该从编写小程序就养成良好的习惯。
例如:x=1:0.1:10
表示x为从1开始,增量是0.1,一直到10的向量(1×n的矩阵)
更多追问追答
追问
改成.*后是: In an assignment  A(I) = B, the number of elements in B and
I must be the same.

脚本+函数,是主函数用脚本文件吗?
追答
对 就是在脚本函数中不能出现函数定义,把一切要用的函数另起个文件,并且文件名与定义的函数名相同。

我并不清楚你要算什么 所以改动只是意见。你那个auto_correlation应该是1×n数组吧,那auto
_correlation(n+1)的赋值(=)后面应该是一个数。i+1:i+len貌似不是一个单独的数啊。我觉得最好的方法就是在workspace中看你定义的变量是不是与你想的一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式