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

更新时间:2023-10-13 17:11:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一:子带编码

1.子带编码首先将输入信号分割成几个不同的频带分量,然后再分别进行编码,这类编码方式称为频域编码。 2.把语音信号分成若干子带进行编码主要有两个优点: (1).如果对不同的子带合理分配比特数,可以控制各子带的量化电平数目,以及相应的重建信号的量化误差方差值,以获得更好的主观听音质量。

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

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

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

(1)等带宽子带编码

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

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

(2)变带宽子带编码

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

二:matlab实现

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

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

3.编码采用u律pcm编码。 介绍:

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

? 采用正交镜象滤波器(QMF,quandrature mirror filter)来划分频带,混迭效应在最后合成时可以抵消 ? 混迭失真:这是由于分析滤波器组和综合滤波器组的频带不能完全分开及x(n)的抽样频率fs不能大于其最高频率成分的m倍所致。

?

两通道的滤波器组

两通道的滤波器组

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

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

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

原始语音y

提取一通道 抗混叠滤波 分析滤波器组 U律pcm编码 处理后语音y_he · 重构滤波器组 U律pcm编码 整体框图

频带分解(主要)

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

%主程序

clear all ;close all;clc;

N=4096*50;%采集点数

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

%仅处理1通道信号

y1=y(:,1)' ;%the signal of channel one

%y2=y(:,2) ;%the signal of channel two

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));

本文来源:https://www.bwwdw.com/article/934f.html

Top