matlab 矩阵dct变换矩阵,离散余弦变换(DCT)的矩阵形式

上一篇博文提到了离散傅里叶变换,地址如下:

http://blog.sina.com.cn/s/blog_7445c2940102wcdj.html

其实,离散余弦变换(DCT)就是离散傅里叶变换(DFT)的一部分,那么既然已经有了DFT,为什么还需要DCT呢?因为,DCT只取了DFT中的实部,对于很多应用来说,既方便又简洁,没有复数域捣乱。不像DFT,画个图还要考虑实部虚部,幅值相位神马的。但是,也就意味着DCT相比DFT包含的信息要少。同之前一样,我们先给出DCT的变换公式:

a4c26d1e5885305701be709a3d33442f.png公式1

​​同DFT变换一样,我们也要考虑到离散与连续的区别,具体我就不在赘述,可以查看前一篇博客。

我们将上式向量化,得到如下公式:​

a4c26d1e5885305701be709a3d33442f.png离散余弦变换矩阵

​​同理,可以得到IDCT变换矩阵:

a4c26d1e5885305701be709a3d33442f.png离散余旋反变换矩阵

​matlab程序如下:

1.正变换:

N=width;

dctmtx=zeros(N);

dctmtx(1,:)=ones(1,N)/sqrt(N);

�T第一行为常数

for k=1:N-1

dctmtx(k+1,:)=sqrt(2)*cos((2*(0:N-1)+1)*k*pi/(2*N))/sqrt(N);

%生成X(1)到X(N-1)一共N个

end

2.反变换:

N=width;

idctmtx=zeros(N);

idctmtx(:,1)=ones(N,1)/sqrt(N);

%idct矩阵第一列为常数与C(0)相乘

for n=0:width-1

idctmtx(n+1,2:N)=cos((2*n+1)*(1:N-1)*pi/(2*N))*sqrt(2)/sqrt(N);

end

​总结一下,DCT是取DFT的实部,也就可以通过DFT得到DCT,只不过先要将信号延展到2N-1。那么DFT的虚部是否也可以组成一个变换基底呢?答案是可以得,也就是离散正弦变换(DST)。但是在应用中很少见到DST,这是为什么呢?

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值