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
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值