文件

DCT用于语音信号压缩

此示例显示如何使用离散余弦变换(DCT)压缩语音信号。

加载包含“强”单词的文件,由一个女人和一个男人说话。信号在8 kHz时采样。

加载(全氟(MatlaBroot,'例子''信号''strong.mat')))%听到,键入soundsc(她,fs),暂停(1),soundsc(他,fs)

使用离散余弦变换来压缩母语音信号。将信号分解为DCT基础向量。在分解中存在许多术语,因为信号中存在样本。向量中的膨胀系数X测量每个组件中存储多少能量。将系数排序到最大的系数。

x =她';x = DCT(x);[xx,IND] =排序(ABS(x),“下降”);

找到有多少DCT系数表示信号中能量的99.9%。将数字表示为总数的百分比。

需要= 1;尽管rang(x(ind(1:需要)))/ rang(x)<0.999需要=需要+ 1;结尾XPC =需要/长度(x)* 100;

设置为零的系数,该系数包含剩余的0.1%的能量。从压缩表示重建信号。绘制原始信号,重建,两者之间的差异。

x(IND(需要+ 1:结束))= 0;xx = IDCT(x);绘图([x; xx; x-xx]')传奇('原来的',[Int2str(XPC)'%的Coeffs。'],'区别'......'地点''最好'

%以听到,键入soundsc(x,fs),暂停(1),soundsc(xx,fs)

重复男声的分析。找到有多少DCT系数代表99.9%的能量,并表示为总数的百分比。

y =他';Y = DCT(Y);[YY,IND] =排序(ABS(Y),“下降”);需要= 1;尽管规范(Y(ID(1:需要))/ QUAR(Y)<0.999需要=需要+ 1;结尾YPC =需求/长度(Y)* 100;

将其余系数设置为零并从压缩版本重建信号。绘制原始信号,重建,两者之间的差异。

Y(IND(需要+ 1:结束))= 0;YY = IDCT(Y);情节([Y; YY; Y-YY]')传奇('原来的',[Int2str(YPC)'%的Coeffs。'],'区别'......'地点''最好'

%要听到,键入soundsc(y,fs),暂停(1),soundsc(yy,fs)

在这两种情况下,大约一半的DCT系数足以合理地重建语音信号。如果所需的能量分数为99%,则必要系数的数量降低到总量的约20%。由此产生的重建是较差的,但仍然可理解。

对这些和其他样品的分析表明,需要更多系数来表征男人的声音而不是女人的声音。

也可以看看

|