语音信号的离散余弦变换(DCT)及其应用案例

离散余弦变换(Discrete Cosine Transform,DCT)具有信号谱分量丰富、能量集中,且不需要对语音相位进行估算等优点,能在较低的运算复杂度下取得较好的语音增强效果。

设x(n)是N个有限值的一维实数信号序列,n=0,1,…,N-1,DCT的完备正交归一函数是:

式中,a(k)的定义为

式中,n=0,1,…,N-1;k=0,1,…,N-1。

将上式略作变形,可得到DCT的另一表示形式

式中,C(k)是正交因子。

则DCT的逆变换为

在MATLAB工具箱中有det和idet函数,其使用方法如下:
1)det 函数——离散余弦变换
调用格式:
X=det(x,N)
说明:x是原始信号;X是离散余弦变换后的序列;N是离散余弦变换的长度。
2)idet函数——离散余弦逆变换
调用格式:
x=idct(X,N)
说明:x是原始信号;X是离散余弦变换后的序列;N是离散余弦变换的长度。

案例、已知一余弦序列为x(n)=cos(2πfn/fs),0≤n≤1000

式中,f=50Hz,fs=1000Hz。计算此序列的DCT并仅用幅度大于5的部分重建信号。

程序如下:

clear all; clc; close all;

f=50;                        % 信号频率
fs=1000;                     % 采样频率
N=1000;                      % 样点总数
n=0:N-1;
xn=cos(2*pi*f*n/fs);         % 构成余弦序列
y=dct(xn) ;                  % 离散余弦变换
num=find(abs(y)<5);          % 寻找余弦变换后幅值小于5的区间
y(num)=0;                    % 对幅值小于5的区间的幅值都置为0
zn=idct(y);                  % 离散余弦逆变换
subplot 211; plot(n,xn,'k'); % 绘制xn的图
title('x(n)'); xlabel(['样点' 10 '(a)']); ylabel('幅值');
subplot 212; plot(n,zn,'k'); % 绘制zn的图
title('z(n)'); xlabel(['样点' 10 '(b)']); ylabel('幅值');
% 计算重建率
rp=100-norm(xn-zn)/norm(xn)*100

运行结果如下:

分析:计算出的重建率rp=84.3566,说明DCT具有很好的能量集中性。 

参考文献:

语音信号处理实验教程;梁瑞宇、赵力、魏昕(编著) 

MATLAB语音信号分析与合成(第二版);宋知用(编著)

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值