数字信号处理使用MATLAB子函数调用

来源:互联网 发布:Java date 减去指定天 编辑:程序博客网 时间:2024/05/17 23:22

数字信号处理使用MATLAB,使用MATLAB编制.M函数文件,MATLAB 是最优秀的科学计算工具(个人观点),使用MATLAB编程处理数字信号更容易,简单,但是有时会用到子函数的调用,使用MATLAB进行子函数调用可以,在MATLAB的路径如WORK 中添加.M函数文件,MATLAB可以自动调用,如果多个函数写在一个.M文件里,MATLAB会选取主函数,目前MATLAB版本更新很快,各种版本可能要求不同,有的是需要如下格式:

      function []=f1(..)

              .............

           function []=f2(....)

                ..............

                        function []=f3(......)

                                ...........

                                          end

                                  end

                           end

有的版本不需要用END 语句,如下:

function r=fs(x1,y1)
   global c1;
   c1=x1;
   r=x1+y1+f2(2,2)+f3(2,2);
 
   function m=f2(x2,y2)
   global c1;
   fprintf('%d',c1);
   m=x2+y2+c1;
  
        function p=f3(x3,y3)
        global c1;
     p=x3+y3+c1;

但要注意MATLAB执行到被调用函数的时候进入被调用函数空间,此时要把此函数所需要的变量声明为全局变量,或是在被调用的函数中再重新声明一次变量也可以.如下一个离散时间信号的移序相加和相乘的源程序:

function [y,m]=yijia1(x,n)
 n=-2:10;
 x=[1:7,6:-1:1];
 [x1,n1]=sigshift(x,n,5);
[x2,n2]=sigshift(x,n,-4);
[y,m]=sigadd(2*x1,n1,-3*x2,n2);
subplot(2,2,1);stem(m,y);
[x3,n3]=sigfold(x,n);[x3,n3]=sigshift(x3,n3,3);
[x4,n4]=sigshift(x,n,2);[x4,n4]=sigmult(x,n,x4,n4);
[z,k]=sigadd(x3,n3,x4,n4);
subplot(2,2,2);stem(k,z);
function [y,n]=sigfold(x,n)
n=-2:10;
x = [1:7,6:-1:1];
y=fliplr(x);n=-fliplr(n);
function [y,n]=sigshift(x,m,n0)
 n=-2:10;
 x=[1:7,6:-1:1];
n=m+n0;y=x;
function [y,n]=sigadd(x1,n1,x2,n2)
 n=-2:10;
 x=[1:7,6:-1:1];
n=min(min(n1),min(n2)):max(max(n1),max(n2));  
y1=zeros(1,length(n)); y2=y1;                
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;    
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;    y=y1+y2;
function [y,n] = sigmult(x1,n1,x2,n2)
n=-2:10;
 x=[1:7,6:-1:1];
n = min(min(n1),min(n2)):max(max(n1),max(n2));  
y1 = zeros(1,length(n)); y2 = y1;                
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;    
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;   
y = y1.*y2;

其中,信号的移动,反折,相加,相乘都编写成响应的函数来处理,减少了WORK路径下的杂乱不堪.