yyming1987 发表于 2009-4-7 23:26

MATLAB程序函数出错!

clc
K=input('please choose K='); %选择高速率采样的倍数
P=input('please choose P=')%选择滤波器的阶数
Q=input('please choose Q=');
x0=(wavread('hello3'))'; %写入高速率的语音信号
N3=length(x0);
if rem(N3,2)==0   %调整采样的点数
    N1=N3;
else
    N1=N3-1;
end
C=N1/2;
n0=zao(5,C);   % 调用噪声程序模块
for c=1:C;
    x(c)=x0(c)+n0(c); %给语音信号的前半部分加频率为4.41KHz噪声
end
n1=zao(10,C);
for c=(1+C):2*C
    x(c)=x0(c)+n1(c-C); %给语音信号的后半部分加频率为2.205KHz噪声
end

for ii=1:K*P
    if (rem(N1+ ii,K)==0)&(rem(N1+ii,P)==0)
      N=N1+ii;
    end
end
M=N/K;
for i=N:(N+K+P-1)
    x(i)=0;
end;
for a=1:K:N
    y1(a)=x(a);
end
subplot(4,1,2);
plot(y1)
axis();
title('带噪语音信号低速率采样波形');
y=decimate(x,K);
for i=(N/K):((N/K)+K+P-1)
    y(i)=0;
end;
m0=P-1;
n0=Q-1;
h=zeros(1,P);
g=zeros(1,Q);
u=0.00015;
d=(wavread('hello3'))';
L=length(d);
for i=L:(L+K+P+4)
    d(i)=0;
end;
subplot(4,1,1);
plot(d);
axis();
title('纯净的语音的信号波形');
subplot(4,1,3);
plot(x)
axis();
title('带噪语音信号高速率采样波形');
for i=1:M
    Y(i,:)=y(i:i+P-1);
    for k=0:K-1
       X(i,:)=x(i*K+k:i*K+k+Q-1);            
       dk(i)=d(n0+i*K+k);
       D(i)=X(i,:)*(h(i,:))'+Y(i,:)*(g(i,:))' ;
       e(i)=dk(i)-D(i);
       h(i+1,:)=h(i,:)+u*e(i)*X(i,:);   
   g(i+1,:)=g(i,:)+u*e(i)*Y(i,:);
   end;
end;
f(1)=e(1);
for b=2:M
   f(K*(b-1))=e(b);
end;
subplot(4,1,4);
plot(f)
axis();
title('去噪的语音信号波形');
以上是主程序 要用到下面这个函数
function =zao(p,N2)
n=wavread('hello3');
N1=length(n);
m=rem(N1,p);
N=N1-m;
x1=n';
for m=1:p:N
   q(m)=x1(m);
end
for m=1:N2
    q1(m)=q(m);
end
我把这两段程序都沾到一个M文件里.出错了:
??? Error: File: d:\MATLAB7\work\yy2.m Line: 79 Column: 1
Function definitions are not permitted at the prompt or in scripts.

[ 本帖最后由 ChaChing 于 2009-4-8 07:53 编辑 ]

ChaChing 发表于 2009-4-7 23:43

回复 楼主 yyming1987 的帖子

两种处理方式
1.主程式改成function M-file, script M-file不允许内含function
2.将整个function zao另存一档, 主程式即可为script M-file

yyming1987 发表于 2009-4-8 11:06

怎么改成 function M-file 啊?

ChaChing 发表于 2009-4-8 11:39

在script M-file最前头加一行function语法!

yyming1987 发表于 2009-4-8 12:13

不好意思啊 要怎么改呀 能具体点吗 我刚学MATLAB 谢谢了

ChaChing 发表于 2009-4-8 13:16

help function!

friendchj 发表于 2009-4-8 15:55

回复 5楼 yyming1987 的帖子

一个例子(文件名为shiyan.m):
function y=shiyan(x1,x2)
x=myfun(x2);
y=x1+x;

function y=myfun(x)
y=x*2;
~~~~~~~~~~~~~~~~~~~
>> y=shiyan(1,2)

y =

   5
页: [1]
查看完整版本: MATLAB程序函数出错!