|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
最近在做一个实验,需要将语音信号分段,每段16个点,然后分别做DWT变换。然后不做任何处理,再做IDWT变换。但是得到的信号失真很大。百思不得其解,希望大家想想办法,谢谢了、
代码如下
clear all;
clc;
%读入声音
[aa,fs,nbits]=wavread('ceshilong.wav');
AA=aa';
A(1:80000)=AA(1:80000);
for i=1:65536 % 4096*16=65536,候采样频率是22.05KHZ
Ae(i)=A(i);
end
for k=1:4096
%将原始音频信号分段,每段16个数据
Aef(k,(1:16))=Ae(((k-1)*16+1):((k-1)*16+16));
%将每个音频段进行dwt变换
[c,l]=wavedec(Aef,3,'db4');
ca3=appcoef(c,l,'db4',3);
[cd3,cd2,cd1]=detcoef(c,l,[3,2,1]);
c1_m=[ca3',cd3',cd2',cd1'];
A_m(k,(1:16))=waverec(c1_m,l,'db4');
Aey(1,(((k-1)*16+1):((k-1)*16+16)))=A_m(k,(1:16));
end
Am=Aey;
wavwrite(Am,fs,nbits,'DWT.wav');
subplot(211)
Aw=(Aw-min(min(Aw)))/(max(max(Aw))-min(min(Aw)))*225;
plot(Aw);
xlabel('采样点数');
ylabel('归一化幅度');
title('变换后的语音图像')
subplot(212)
A=(A-min(min(A)))/(max(max(A))-min(min(A)))*225;
plot(A);
xlabel('采样点数');
ylabel('归一化幅度');
title('原始语音图像')
toc; |
|