|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
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 编辑 ] |
|