声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1014|回复: 6

[编程技巧] MATLAB程序函数出错!

[复制链接]
发表于 2009-4-7 23:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
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([0,N,-1,1]);
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([0,L,-1,1]);
title('纯净的语音的信号波形');
subplot(4,1,3);
plot(x)
axis([0,N,-1,1]);
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([0,N,-1,1]);
title('去噪的语音信号波形');  
以上是主程序 要用到下面这个函数
function [q1]=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 编辑 ]
回复
分享到:

使用道具 举报

发表于 2009-4-7 23:43 | 显示全部楼层

回复 楼主 yyming1987 的帖子

两种处理方式
1.主程式改成function M-file, script M-file不允许内含function
2.将整个function zao另存一档, 主程式即可为script M-file
 楼主| 发表于 2009-4-8 11:06 | 显示全部楼层
怎么改成 function M-file 啊?
发表于 2009-4-8 11:39 | 显示全部楼层
在script M-file最前头加一行function语法!
 楼主| 发表于 2009-4-8 12:13 | 显示全部楼层
不好意思啊 要怎么改呀 能具体点吗 我刚学MATLAB 谢谢了
发表于 2009-4-8 13:16 | 显示全部楼层
help function!
发表于 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

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-17 08:41 , Processed in 0.066247 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表