主要内容

用于语音信号压缩的DCT

这个例子展示了如何使用离散余弦变换(DCT)压缩语音信号。

加载一个包含“坚强”这个词的文件,由一个女人和一个男人说。信号以8千赫采样。

负载(“strong.mat”输入soundsc(her,fs), pause(1), soundsc(he,fs)

利用离散余弦变换对女声信号进行压缩。将信号分解为DCT基向量。分解中有多少项,信号中就有多少样本。向量中的展开系数X测量每个组件中储存了多少能量。将系数从大到小排序。

X =她';X = dct(X);[XX,ind] = sort(abs(X),“下”);

求出有多少DCT系数代表信号中99.9%的能量。把这个数字表示为总数的百分比。

需求= 1;norm(X(ind(1:need)))/norm(X)<0.999 need = need+1;结束xpc =需求/长度(X)*100;

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

X(ind(need+1:end)) = 0;xx = idct(X);情节([x, xx; x-xx])传说(“原始”[int2str (xpc)“%的系数。”),“差异”...“位置”“最佳”

图中包含一个轴对象。axis对象包含3个line类型的对象。这些物体代表原始,占系数的45%。,差异。

输入soundsc(x,fs), pause(1), soundsc(xx,fs)

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

Y = he ';Y = dct(Y);[YY,ind] = sort(abs(Y),“下”);需求= 1;norm(Y(ind(1:need)))/norm(Y)<0.999 need = need+1;结束ypc =需求/长度(Y)*100;

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

Y(ind(need+1:end)) = 0;yy = idct(Y);情节([y; yy y-yy])传说(“原始”[int2str(碧)“%的系数。”),“差异”...“位置”“最佳”

图中包含一个轴对象。axis对象包含3个line类型的对象。这些物体代表原始,占系数的57%。,差异。

输入soundsc(y,fs), pause(1), soundsc(yy,fs)

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

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

另请参阅

|