離散餘弦變換DCT
離散餘弦變換DCT具有信號譜分量豐富、能量集中,且不需要對語音相位進行估算等優點,能在較低的運算複雜度下取得較好的語音增強效果。
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]);
}