MP3编码中的多相滤波问题
在多相滤波中我遇到一个地方不大明白,是这样的
我已经获得了pcm样本, 假设为 short int buffer[576];
现在我要对这个buffer加窗. 我发现老外的代码是这样写的
short int x[512]; // 临时用
short int z[512]; // 加窗后的信号
int off = 0;
int i, j;
for(i=0; i<18; i++) // 18==576/32
{
for(j=0; j<32; j++) // 这里非常不明白 ------------->> A
{
x[ 31-i+off ] = *(buffer++);
}
for (i=512; i--; ) // 加窗
{
z[ i ] = x[i+off] * enwindow[ i ];
}
off += 480;
}
我发现A处处理的逻辑是这样的
当i=0时
x[31] = buffer[0], x[30]=buffer[1] .... x[0] = buffer[31];
是反的来的, 我以为是平移呢,
按我的理解是把buffer的前32个数据直接平移到x的前32个.
当i=1时
x[511] = buffer[32], x[510] = buffer[33] ... x[480] = buffer[63]
当i=2时
x[479] = buffer[64], x[510] = buffer[64] ... x[448] = buffer[95]
...
当i=15时
x[63] = buffer[480], x[510] = buffer[481] ... x[32] = buffer[511]
此刻x已经全部填满,
接下来还有2次循环
i=16
x[31] = buffer[512], x[30]=buffer[513] .... x[0] = buffer[543];
把x[31]--x[0]覆盖了一次
i=17
x[511] = buffer[544], x[510]=buffer[545] .... x[480] = buffer[575];
把x[511]--x[480]覆盖了一次
为什么会以这样的方式来加窗?
请有经验的朋友不吝赐教,
我被这个问题困扰了好久了, 我的 QQ89090125
非常感谢。