什么是DCT
离散余弦变换(英语:discrete cosine transform, DCT)是与傅里叶变换相关的一种变换,类似于离散傅里叶变换,但是只使用实数。
最常用的一种离散余弦变换的类型是下面给出的第二种类型,通常我们所说的离散余弦变换指的就是这种。
CPP实现
void mfcc::DCT()
{
double alpha,beta;
int num;
std::vector<std::vector<float>> feature;//要进行变换的数组
std::vector<std::vector<float>> dct_feature;
std::vector<float>temp;
for(auto i:feature)
{
num = i.size();
for(int j = 0;j < num;j++)
{
beta = 0;
if(j == 0)
{
alpha = sqrt(1.0/num);
}
else
{
alpha = sqrt(2.0/num);
}
for(int n = 0; n < num; n++)
{
double tmp = i[n]*cos((M_PI*(2*n+1)*j)/(2*num));
beta = beta + tmp; //累加求和
}
temp.push_back(alpha*beta);
}
dct_feature.push_back(temp);
temp.clear();
}
}
两个循环根据公式一写就好了