matlab需要用到子函数,必须要创建一个新的function .m文件吗?

2024-12-03 03:04:00
推荐回答(3个)
回答1:

可以将子函数放在主函数的文件里。子函数放在主函数后面即可,下面是mseq.m的内容,实测可以成功生成m序列。

function mseqmatrix = mseq(mfunc)
%生成m序列并画出时序图和自相关图
%
%校订记录:
% 时间 修改内容
% ========= =========
% 2012-6-10 初始版本
%
%函数体:
% mseqmatrix = mseq(mfunc)
%参数含义:
% mfunc - 本原多项式系数向量,形如[C(n),C(n-1),...,C(1)],其中C(n)=1
% mseqmatrix - 输出序列,格式为N*1,其中N=2^n-1,为序列周期
%算法:
% a(n) = c(1)*a(n-1)+...+c(i)*a(k-i)+...+c(n)*a(0)
% a(n) = mod(a(n),2)
% 特征向量mfunc为特征多项式 f(x) = c(n)*x^n + c(n-1)*x^(n-1) + ...+ c(1)*x + 1
%的系数,C(i)取值为0或1,表示移位寄存器的移位运算法则。

%参考资料:
% 樊昌信 等.通信原理(第五版).国防工业出版社,2001

n = length(mfunc);
N = 2^n-1;
mseqmatrix = zeros(N,1);
register = [zeros(1,n-1),1];%定义移位寄存器的初始状态为
mseqmatrix(1) = register(n);
mvec = fliplr(mfunc);

for i = 2:N
regtmp = mod(sum(register.*mvec),2);
register = [regtmp,register(1:n-1)];
mseqmatrix(i) = register(n);
end

%自相关序列
[m_Rj,index] = seqxcorr(mseqmatrix);

%m序列图自相关函数图
step = 50;
m_plot = ones(1,step*N);
for i=1:N
m_plot((i-1)*step+1:i*step)=m_plot((i-1)*step+1:i*step)*mseqmatrix(i);
end
figure;
subplot(211);
plot(1/step:1/step:N,m_plot,'r','LineWidth',2);
axis([0,N,-0.1,1.1]);
title(['特征多项式为f = [',num2str(mfunc),' ]的m序列']);
grid;

subplot(212);
stem(index,m_Rj,'r','LineWidth',2);
grid;
title(['特征多项式为f = [',num2str(mfunc),' ]的m序列的自相关函数']);

%--------------------------------------------------------------------
function [seqmatrix,index] = seqxcorr(seq2a,seq2b)
%cseqmatrix = xcorrseq(seq2a,seq2b)
%模2相关
if nargin == 1
seq2b = seq2a;
end
N = length(seq2a);
seqmatrix = zeros(1,N);
for i = 1:N
mseqTmp = [seq2a(i:N);seq2a(1:i-1)]; %移位
D = sum(xor(seq2b,mseqTmp)); %移i位后与原序列不同的元素个数和
A = N-D; %移i位后与原序列相同的元素个数和
seqmatrix(i) = A-D;
end
seqmatrix = [seqmatrix(N:-1:2),seqmatrix];
index = -N+1:N-1;

回答2:

1
新建m文件把count1函数贴进去保存;
2
新建m文件把change1函数贴进去保存;
3
在command
window里直接输入
>>
x=[60
75
85
96
52
36
86
56
94
84
77];
c=count1(x)
d=change1(x)
c
=
2
3
2
1
3
d
=
d
c
b
a
e
e
b
e
a
b
c
%%%%%%%%%%
如果第一个也是函数的话,写成这样
function
[c,d]=a1(x)
c=count1(x);
d=change1(x);
end
%%直接调用
>>
x=[60
75
85
96
52
36
86
56
94
84
77];
>>
[c,d]=a1(x)
c
=
2
3
2
1
3
d
=
d
c
b
a
e
e
b
e
a
b
c

回答3:

必须创建一个新的function .m