C语言实现离散余弦变换DCT

离散余弦变换DCT

离散余弦变换DCT具有信号谱分量丰富、能量集中,且不需要对语音相位进行估算等优点,能在较低的运算复杂度下取得较好的语音增强效果。
X ( k ) = α ( k ) ∑ n = 0 N − 1 x ( n ) c o s [ π ( 2 n + 1 ) k 2 N ] X(k)=\alpha(k)\sum_{n=0}^{N-1}x(n)cos[\frac{\pi(2n+1)k}{2N}] X(k)=α(k)n=0N1x(n)cos[2Nπ(2n+1)k] α ( k ) = { 1 / N k = 0 2 / N 1 ≤ k ≤ N − 1 \alpha(k)=\begin{cases} \sqrt{1/N}\qquad k=0 \\ \sqrt{2/N}\qquad 1\le k \le N-1 \end{cases} α(k)={1/N k=02/N 1kN1

matlab实现DCT运算

x=[2 3 3 2];
y = dct(x)

在这里插入图片描述

C语言实现DCT运算

#include<stdio.h>
#include<math.h>
#define PI 3.141593
#define N 4
int main()
{
   int k, n;
   int x[] = {2,3,3,2};
   double A, s, X[4];
   for(k = 0; k < N; k++)
   {
      s = 0;
      if(k==0)
        A = sqrt(1.0/N); //计算k=0时的系数
      else
        A = sqrt(2.0/N); //计算k!=0时的系数
      for(n = 0; n < N; n++)
      {
         double tmp = x[n]*cos((PI*(2*n+1)*k)/(2*N));
         s = s + tmp;	//累加求和
      }
         X[k] = A * s;	//X[k]等于累和结果s乘以系数A
   }
      for(k = 0; k < N; k++)  
        printf("%f\n", X[k]);
}

在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值