Function 脚本中的MATLAB函数语法?

Function 脚本中的MATLAB函数语法?,function,matlab,syntax,Function,Matlab,Syntax,在脚本中声明函数时遇到一些问题: %读取原始音频数据 refData = wavread('file1.wav'); userData = wavread('file2.wav'); % I want to continue writing my "main" function here, and call the below functions %%%%%%%%%%%%% % Functions % %%%%%%%%%%%%% %Vector x function preEmphasi

在脚本中声明函数时遇到一些问题:

%读取原始音频数据

refData = wavread('file1.wav');
userData = wavread('file2.wav'); 

% I want to continue writing my "main" function here, and call the below functions

%%%%%%%%%%%%%
% Functions %
%%%%%%%%%%%%%

%Vector x
function preEmphasis(x)
    alpha = 0.95;
    len = length(x);
    for i=1:len
        x_i = x(i);
        x_iMinus1 = x(i-1);
        x(i) = x_i - alpha*x_iMinus1;
    end
end

%Vector x
function normalization(x)
    maxVal = max(abs(x));
    x = x / maxVal;
end

%Vector x; numFrames, frameSize: integers; stepSize: percentage (float, 0.2 -> 0.5 for example)
function Ymatrix = createYmatrix(x, numFrames, frameSize, stepSize)
        Ymatrix = zeros(numFrames, frameSize);
        for i=1:numFrames
            for j=1:frameSize
                Ymatrix(i,j) = x(stepSize*i + j);
            end
        end
end

单词function和end以红色突出显示为解析错误。我怎样才能解决这个问题?谢谢。

您不能在主脚本中声明函数。您必须创建一个外部m文件,并在其中实现您的功能,如中所述:

任何未定义的函数都必须在文件中定义

需要明确的是,脚本不接受输入参数或返回输出参数

但是,可以在函数m文件中声明本地函数。 阅读中有关函数声明的更多信息


编辑:如果您正在寻找完全避免函数m文件的方法,可以参考@natan的答案。他将您的函数实现为,可以在脚本文件中声明。祝你好运

不能在主脚本中声明函数。您必须创建一个外部m文件,并在其中实现您的功能,如中所述:

任何未定义的函数都必须在文件中定义

需要明确的是,脚本不接受输入参数或返回输出参数

但是,可以在函数m文件中声明本地函数。 阅读中有关函数声明的更多信息


编辑:如果您正在寻找完全避免函数m文件的方法,可以参考@natan的答案。他将您的函数实现为,可以在脚本文件中声明。祝你好运

除了Eitan提到的以外,下面是如何在您的案例中实现匿名函数,请注意,代码矢量化是必须的。例如,在您的情况下,您可以编写以下内容,而不是规范化:

normalization = @(x) x./max(abs(x));
然后像函数一样使用它,y=normalizationx

对于预相位:

对于i=1的情况,您当前的代码有一个bug,因此我将其解释为for=2:len

Ymatrix的解决方案有点难看,我没有花太多时间将其很好地矢量化,但它应该可以工作:

Ymatrix = @(x, numFrames, frameSize, stepSize) ...
          ones(1,numFrames)'*x(1+stepSize:stepSize+frameSize)+...
          meshgrid(0:stepSize:stepSize*numFrames-1,ones(1,frameSize))';

除了Eitan提到的,这里是如何在您的案例中实现匿名函数,请注意,代码矢量化是必须的。例如,在您的情况下,您可以编写以下内容,而不是规范化:

normalization = @(x) x./max(abs(x));
然后像函数一样使用它,y=normalizationx

对于预相位:

对于i=1的情况,您当前的代码有一个bug,因此我将其解释为for=2:len

Ymatrix的解决方案有点难看,我没有花太多时间将其很好地矢量化,但它应该可以工作:

Ymatrix = @(x, numFrames, frameSize, stepSize) ...
          ones(1,numFrames)'*x(1+stepSize:stepSize+frameSize)+...
          meshgrid(0:stepSize:stepSize*numFrames-1,ones(1,frameSize))';

只需将脚本转换为函数;然后可以使用局部函数和嵌套函数。如果需要将值返回到基本工作区或调用者的工作区,请使用返回值或赋值;然后可以使用局部函数和嵌套函数。如果需要将值返回到基或调用者的工作区,请使用返回值或赋值。

m文件中的本地函数不是我要做的吗?至少那是我想要的。。。厌倦了这种多文件的快速脚本废话,哈哈。我相信不是。我认为这是你的主脚本,因为它在开始时没有函数声明。但除此之外,我对函数所做的。。。end是正确的,我可以将所有函数移到另一个文件中?对于您的函数,end是可选的。只需创建一个名为mymainfunc.m的m文件,该文件以例如:function y=mymainfuncx开头,实现它并复制粘贴其中的其余函数。然后从主脚本调用mymainfunc。注意:必须像调用文件中的主函数一样调用m文件。此外,还可能会澄清一些问题……如果您想要快速编写脚本,您可以始终在run.m文件中运行函数,并实现其中的所有内容。您仍然需要生成一个主脚本并调用run,不过。。。或者只是尝试不使用函数进行管理:m文件中的本地函数不是我在这里要做的吗?至少那是我想要的。。。厌倦了这种多文件的快速脚本废话,哈哈。我相信不是。我认为这是你的主脚本,因为它在开始时没有函数声明。但除此之外,我对函数所做的。。。end是正确的,我可以将所有函数移到另一个文件中?对于您的函数,end是可选的。只需创建一个名为mymainfunc.m的m文件,该文件以例如:function y=mymainfuncx开头,实现它并复制粘贴其中的其余函数。然后从主脚本调用mymainfunc。注意:必须像调用文件中的主函数一样调用m文件。此外,还可能会澄清一些问题……如果您想要快速编写脚本,您可以始终在run.m文件中运行函数,并实现其中的所有内容。您仍然需要生成一个主脚本并调用run,不过。。。或者尝试不使用函数进行管理:哈哈,我只是在我的一条评论中建议了它:+1。我想知道CreateMatrix c
可以制作成匿名函数:Pyes-Ymatrix可以制作成匿名函数,请参阅我的editLOL,我刚刚在我的一条评论中建议了它:+1。我想知道createYmatrix是否可以制作成匿名函数:Pyes Ymatrix可以制作成匿名函数,请参见我的编辑