语音信号处理基于MATLAB的子带编码实现.docx

上传人:b****7 文档编号:9771420 上传时间:2023-02-06 格式:DOCX 页数:17 大小:280.06KB
下载 相关 举报
语音信号处理基于MATLAB的子带编码实现.docx_第1页
第1页 / 共17页
语音信号处理基于MATLAB的子带编码实现.docx_第2页
第2页 / 共17页
语音信号处理基于MATLAB的子带编码实现.docx_第3页
第3页 / 共17页
语音信号处理基于MATLAB的子带编码实现.docx_第4页
第4页 / 共17页
语音信号处理基于MATLAB的子带编码实现.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

语音信号处理基于MATLAB的子带编码实现.docx

《语音信号处理基于MATLAB的子带编码实现.docx》由会员分享,可在线阅读,更多相关《语音信号处理基于MATLAB的子带编码实现.docx(17页珍藏版)》请在冰豆网上搜索。

语音信号处理基于MATLAB的子带编码实现.docx

语音信号处理基于MATLAB的子带编码实现

一:

子带编码

1.子带编码首先将输入信号分割成几个不同的频带分量,然后再分别进行编码,这类编码方式称为频域编码。

2.把语音信号分成若干子带进行编码主要有两个优点:

(1).如果对不同的子带合理分配比特数,可以控制各子带的量化电平数目,以及相应的重建信号的量化误差方差值,以获得更好的主观听音质量。

(2).各子带的量化噪声相互独立,被束缚在自己的子带内,不影响其它子带的量化噪声。

3.影响子带编码效率的因数

子带数目、子带划分、编码参数、子带中比特的分配、每样值编码比特、带宽。

4.分类

(1)等带宽子带编码

各子带的带宽是相同的,其优点是易于硬件实现,便于理论分析。

其中,k=1,2,3…,m为子带总数,B编码信号总带宽

(2)变带宽子带编码

各子带带宽是不同的,常用的子带划分是令各子带宽度随K的增加而增加(低频段子带带宽窄,高频段宽),其优点是对不同的子带分配的比特数不同,能获得很好的质量。

二:

matlab实现

1.主要是使用非对称滤波器组来实现语音信号的子带分解和合并。

2.关键:

针对语音信号的频谱设计与之相适应的树形滤波器组。

3.编码采用u律pcm编码。

介绍:

*本编程所设计的树形结构滤波器组,是由两通道的正交镜像滤波器组通过级联或并联组建而成的。

*采用正交镜象滤波器(QMF,quandraturemirrorfilter)来划分频带,混迭效应在最后合成时可以抵消

*混迭失真:

这是由于分析滤波器组和综合滤波器组的频带不能完全分开及x(n)的抽样频率fs不能大于其最高频率成分的m倍所致。

*两通道的滤波器组

两通道的滤波器组

两通道的滤波器组的幅频特性

两通道的正交镜像滤波器组的幅频特性

*(从频频特性可以看出采用正交镜象滤波器来划分频带,混迭效应在最后合成时可以抵消)

 

 

重构滤波器组

U律pcm编码

处理后语音y_he

·

整体框图

 

频带分解(主要)

 

(下附matlab源程序语音为wav格式自己录音)

 

%主程序

clearall;closeall;clc;

N=4096*50;%采集点数

 

[y,fs,bits]=wavread('tangshi',N);%读取音频信息(双声道)

Fs=fs;

ts=1/fs;

%仅处理1通道信号

y1=y(:

1)';%thesignalofchannelone

%y2=y(:

2);%thesignalofchanneltwo

t=0:

1/fs:

(N-1)/fs;%time

%原始语音信号读取

sound(y1,fs);

%原始语音信号画图

figure

(1);

subplot(2,1,1);

plot(t,y1);%1通道信号

title('原始信号y1');

%预滤波

%语音信号预处理人耳可识别范围(300~3400),因此多于此频率的信号可以滤掉而不用传输

[y1_yu,fs_yu]=pre_process(y1,fs);

subplot(2,1,2);

plot(t(1:

fs/fs_yu:

3*floor(length(t)/3)),y1_yu);%滤波后的信号时域波形

title('预滤波后的信号y1_yu');

%对上面两个信号进行频谱分析

Y1=fft(y1);

Y1_YU=fft(y1_yu);

%画出图形

figure

(2);

subplot(2,1,1)

dfs=fs/length(Y1);

H1=abs(Y1(1:

length(Y1)/2));

f1=0:

dfs:

fs-dfs;

f1=f1(1:

length(Y1)/2);

plot(f1,H1)

axis([0,10000,0,max(abs(fftshift(Y1)))])

title('原始信号频谱y1')

subplot(2,1,2)

H2=abs(Y1_YU(1:

length(Y1_YU)/2));

f2=0:

dfs:

fs_yu-dfs;

f2=f2(1:

length(Y1_YU)/2);

plot(f2,H2)

axis([0,10000,0,max(abs(fftshift(Y1_YU)))])

title('抗混叠滤波后y1_yu的信号频谱,fl=300Hz,fh=3400Hz')

%抗混叠滤波后语音信号读取

sound(y1_yu,fs_yu);

%分解

[yu1,yu2]=fenjie(y1_yu,fs_yu);

%y1

%2次分解

[y1_1,y1_2]=fenjie(yu1,fs_yu);

%3次分解

[y1_11,y1_12]=fenjie(y1_1,fs_yu);

[y1_21,y1_22]=fenjie(y1_2,fs_yu);

%y2

%2次分解

[y2_1,y2_2]=fenjie(yu2,fs_yu);

%3次分解

[y2_11,y2_12]=fenjie(y2_1,fs_yu);

[y2_21,y2_22]=fenjie(y2_2,fs_yu);

%分解图示

figure

subplot(4,1,1)

plot(f2,H2);

title(['原始信号频谱,fs=',num2str(fs_yu)])

subplot(4,2,3)

hy1=abs(fft(yu1));

fhy1=0:

dfs:

fs_yu/2-dfs;

fhy1=fhy1(1:

length(hy1)/2);

plot(fhy1,hy1(1:

length(hy1)/2))

title(['1次分解,fs=',num2str(fs_yu/2)])

subplot(4,2,4)

hy2=abs(fft(yu2));

fhy2=0:

dfs:

fs_yu/2-dfs;

fhy2=fhy2(1:

length(hy2)/2);

plot(fhy2,hy2(1:

length(hy2)/2))

subplot(4,4,9)

hy1_1=abs(fft(y1_1));

fhy1_1=0:

dfs:

fs_yu/4-dfs;

fhy1_1=fhy1_1(1:

length(hy1_1)/2);

plot(fhy1_1,hy1_1(1:

length(hy1_1)/2))

title(['2次分解,fs=',num2str(fs_yu/4)])

subplot(4,4,10)

hy1_2=abs(fft(y1_2));

fhy1_2=0:

dfs:

fs_yu/4-dfs;

fhy1_2=fhy1_2(1:

length(hy1_2)/2);

plot(fhy1_2,hy1_2(1:

length(hy1_2)/2))

subplot(4,4,11)

hy2_1=abs(fft(y2_1));

fhy2_1=0:

dfs:

fs_yu/4-dfs;

fhy2_1=fhy2_1(1:

length(hy2_1)/2);

plot(fhy2_1,hy2_1(1:

length(hy2_1)/2))

subplot(4,4,12)

hy2_2=abs(fft(y2_2));

fhy2_2=0:

dfs:

fs_yu/4-dfs;

fhy2_2=fhy2_2(1:

length(hy2_2)/2);

plot(fhy2_2,hy2_2(1:

length(hy2_2)/2))

subplot(4,8,25)

hy1_11=abs(fft(y1_11));

fhy1_11=0:

dfs:

fs_yu/8-dfs;

fhy1_11=fhy1_11(1:

length(hy1_11)/2);

plot(fhy1_11,hy1_11(1:

length(hy1_11)/2))

title(['3次分解,fs=',num2str(fs_yu/8)])

subplot(4,8,26)

hy1_12=abs(fft(y1_12));

fhy1_12=0:

dfs:

fs_yu/8-dfs;

fhy1_12=fhy1_12(1:

length(hy1_12)/2);

plot(fhy1_12,hy1_12(1:

length(hy1_12)/2))

subplot(4,8,27)

hy1_21=abs(fft(y1_21));

fhy1_21=0:

dfs:

fs_yu/8-dfs;

fhy1_21=fhy1_21(1:

length(hy1_21)/2);

plot(fhy1_21,hy1_21(1:

length(hy1_21)/2))

subplot(4,8,28)

hy1_22=abs(fft(y1_22));

fhy1_22=0:

dfs:

fs_yu/8-dfs;

fhy1_22=fhy1_22(1:

length(hy1_22)/2);

plot(fhy1_22,hy1_22(1:

length(hy1_22)/2))

subplot(4,8,29)

hy2_11=abs(fft(y2_11));

fhy2_11=0:

dfs:

fs_yu/8-dfs;

fhy2_11=fhy2_11(1:

length(hy2_11)/2);

plot(fhy2_11,hy2_11(1:

length(hy2_11)/2))

subplot(4,8,30)

hy2_12=abs(fft(y2_12));

fhy2_12=0:

dfs:

fs_yu/8-dfs;

fhy2_12=fhy2_12(1:

length(hy2_12)/2);

plot(fhy2_12,hy2_12(1:

length(hy2_12)/2))

subplot(4,8,31)

hy2_21=abs(fft(y2_21));

fhy2_21=0:

dfs:

fs_yu/8-dfs;

fhy2_21=fhy2_21(1:

length(hy2_21)/2);

plot(fhy2_21,hy2_21(1:

length(hy2_21)/2))

subplot(4,8,32)

hy2_22=abs(fft(y2_22));

fhy2_22=0:

dfs:

fs_yu/8-dfs;

fhy2_22=fhy2_22(1:

length(hy2_22)/2);

plot(fhy2_22,hy2_22(1:

length(hy2_22)/2))

%PCM编码

pcm1=upcm(y1_11);

pcm2=upcm(y1_12);

pcm3=upcm(y1_21);

pcm4=upcm(y1_22);

pcm5=upcm(y2_11);

pcm6=upcm(y2_12);

pcm7=upcm(y2_21);

pcm8=upcm(y2_22);

%decode解码

dpcm1=dupcm(pcm1,8);

dpcm2=dupcm(pcm2,8);

dpcm3=dupcm(pcm3,8);

dpcm4=dupcm(pcm4,8);

dpcm5=dupcm(pcm5,8);

dpcm6=dupcm(pcm6,8);

dpcm7=dupcm(pcm7,8);

dpcm8=dupcm(pcm8,8);

%信号的合成

y_he=hebing8(y1_11,y1_12,y1_21,y1_22,y2_11,y2_12,y2_21,y2_22);%低频信号8通道合成

figure;

subplot(2,1,1);

plot(y1_yu);

title('预滤波后的信号y1_yu');

subplot(2,1,2)

plot(y_he);%合成后的信号

title('信宿端恢复信号y_he');

wavwrite(y_he,fs_yu,16,'sound.wav')

%sound(y,fs)

%sound(y1,fs)

%sound(y1_yu,fs_yu)

sound(y_he,fs_yu)

 

%抗混迭滤波器

function[y1,fs_yu]=pre_process(y,Fs)

%降低采样率,抽取

y=y(1:

3:

3*floor(length(y)/3));

fs_yu=Fs/3;

fl=300;

fh=3400;

wn1=fl/(fs_yu/2);

wn2=fh/(fs_yu/2);

wn=[wn1,wn2];

a=1;

N=70;

 

b=fir1(N,wn,'bandpass');

y1=filter(b,a,y);

 

%信号插值子程序(完成信号的零插值和高通滤波)

functionf=interp1(x)

%实现信号的零插值

f=interp(x,2);

fori=1:

length(x)

f(2*i)=0;

end

%设计高通滤波器

a1=fir1(200,1/2,'high');

%完成对信号的高通滤波

f=filter(a1,1,f);

%树形结构分解子程序(完成信号的2通道分解以及降采样率)

function[y1,y2]=fenjie(x,fs)

 

a1=fir1(100,1/2);%频谱的一半滤波

a2=qmf(a1);%镜像滤波器

w1=filter(a1,1,x);%低通滤波

w2=filter(a2,1,x);%高通滤波

%抽取

%y1=w1;y2=w2;

y1=downsample(w1,2);%抽取2

y2=downsample(w2,2);%抽取2

 

%信号的8通道的分解子程序()

function[f1f2f3f4f5f6f7f8]=fenjie8(x,fs)

%1次分解

[y1,y2]=fenjie(x,fs);

 

%y1

%2次分解

[y1_1,y1_2]=fenjie(y1,fs);

%3次分解

[f1,f2]=fenjie(y1_1,fs);

[f3,f4]=fenjie(y1_2,fs);

%y2

%2次分解

[y2_1,y2_2]=fenjie(y2,fs);

%3次分解

[f5,f6]=fenjie(y2_1,fs);

[f7,f8]=fenjie(y2_2,fs);

 

%μ律PCM编码

functionpcm=upcm(x)

L=length(x);

fori=1:

L

x(i)=x(i)/4;

x(i)=fix(x(i)*4079);

s=sign(x(i));

ifs<0

pcm((i-1)*8+1)=0;

else

pcm((i-1)*8+1)=1;

end

x(i)=abs(x(i));

p(i)=x(i);

ifx(i)<=15.5

pcm((i-1)*8+2:

(i-1)*8+4)=[0,0,0];

elseifx(i)<=47.5

pcm((i-1)*8+2:

(i-1)*8+4)=[0,0,1];

p(i)=floor((x(i)-15.5)/2);

elseifx(i)<=111.5

pcm((i-1)*8+2:

(i-1)*8+4)=[0,1,0];

p(i)=floor((x(i)-47.5)/4);

elseifx(i)<=239.5

pcm((i-1)*8+2:

(i-1)*8+4)=[0,1,1];

p(i)=floor((x(i)-111.5)/8);

elseifx(i)<=495.5

pcm((i-1)*8+2:

(i-1)*8+4)=[1,0,0];

p(i)=floor((x(i)-239.5)/16);

elseifx(i)<=1007.5

pcm((i-1)*8+2:

(i-1)*8+4)=[1,0,1];

p(i)=floor((x(i)-495.5)/32);

elseifx(i)<=2031.5

pcm((i-1)*8+2:

(i-1)*8+4)=[1,1,0];

p(i)=floor((x(i)-1007.5)/64);

elseifx(i)<=4079.5

pcm((i-1)*8+2:

(i-1)*8+4)=[1,1,1];

p(i)=floor((x(i)-2031.5)/128);

end;end;end;end;end;end;end;end;

y=str2double(dec2bin(p(i)));

pcm((i-1)*8+5)=floor(y/1000);

pcm((i-1)*8+6)=floor(mod(y,1000)/100);

pcm((i-1)*8+7)=floor(mod(y,100)/10);

pcm((i-1)*8+8)=floor(mod(y,10));

end

end

 

%u律pcm解码

functiondpcm=dupcm(pcm,nbit)

L=length(pcm)/nbit;

fori=1:

L

k(i)=pcm((i-1)*8+2)*4+pcm((i-1)*8+3)*2+pcm((i-1)*8+4);

h(i)=pcm((i-1)*8+5)*8+pcm((i-1)*8+6)*4+pcm((i-1)*8+7)*2+pcm((i-1)*8+8);

switchk(i)

case0

dpcm(i)=h(i);

case1

dpcm(i)=16.5+h(i)*2+1;

case2

dpcm(i)=49.5+h(i)*4+2;

case3

dpcm(i)=115.5+h(i)*8+4;

case4

dpcm(i)=247.5+h(i)*16+8;

case5

dpcm(i)=511.5+h(i)*32+16;

case6

dpcm(i)=1039.5+h(i)*64+32;

case7

dpcm(i)=2095.5+h(i)*128+64;

otherwise

disp('error');

end

ifpcm((i-1)*8+1)==0

dpcm(i)=0-dpcm(i);

end;

dpcm(i)=dpcm(i)/1023;

end;

end

 

%树形结构综合子程序(完成2通道信号的综合)

functiony=hebing(y1,y2)

%信号的零插值和低通滤波

y1=interp(y1,2);

%信号的零插值和高通滤波

y2=interp1(y2);

%进行插值后的信号可能长度不一样,因此要进行长信号的截取

n=min(length(y1),length(y2));

y1=y1(1:

n);

y2=y2(1:

n);

%信号的合并

y=y1+y2;

 

%重构滤波器组8通道合并

functionf=hebing8(y1_1_1,y1_1_2,y1_2_1,y1_2_2,y2_1_1,y2_1_2,y2_2_1,y2_2_2)

%信号的3次合并

y1_1=hebing(y1_1_1,y1_1_2);

y1_2=hebing(y1_2_1,y1_2_2);

y2_1=hebing(y2_1_1,y2_1_2);

y2_2=hebing(y2_2_1,y2_2_2);

%信号的2次合并

y1=hebing(y1_1,y1_2);

y2=hebing(y2_1,y2_2);

%信号的1次合并

f=hebing(y1,y2);

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 国外设计风格

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1