MDCT Time-domain aliasing cancellation
I extract mdct and imdct functions from ITU G729.1 reference implementation.
int main(void)
{
REAL x[G729EV_TDAC_L_WIN * 4];
REAL y1[G729EV_TDAC_L_WIN2];
REAL y2[G729EV_TDAC_L_WIN2];
REAL y3[G729EV_TDAC_L_WIN2];
for (int i = 0; i < G729EV_TDAC_L_WIN * 4; i++) {
x[i] = i;
}
G729EV_TDAC_mdct(&x[0], &x[160], y1);
G729EV_TDAC_mdct(&x[160], &x[320], y2);
G729EV_TDAC_mdct(&x[320], &x[480], y3);
REAL ycim[G729EV_TDAC_L_WIN2] = {0};
REAL z1[G729EV_TDAC_L_WIN2];
REAL z2[G729EV_TDAC_L_WIN2];
REAL z3[G729EV_TDAC_L_WIN2];
G729EV_TDAC_inv_mdct(z1, y1, ycim);
G729EV_TDAC_inv_mdct(z2, y2, ycim);
G729EV_TDAC_inv_mdct(z3, y3, ycim);
puts("z2");
for (int i = 0; i < G729EV_TDAC_L_WIN2; i++) {
printf("%.2f ", z2[i]);
}
puts("");
puts("z3");
for (int i = 0; i < G729EV_TDAC_L_WIN2; i++) {
printf("%.2f ", z3[i]);
}
puts("");
return 0;
}
$ ./mdct
x
160.00 161.00 162.00 163.00 164.00 165.00 166.00 167.00 168.00 169.00 170.00 171.00 172.00 173.00 174.00 175.00 176.00 177.00 178.00 179.00 180.00 181.00 182.00 183.00 184.00 185.00 186.00 187.00 188.00 189.00 190.00 191.00 192.00 193.00 194.00 195.00 196.00 197.00 198.00 199.00 200.00 201.00 202.00 203.00 204.00 205.00 206.00 207.00 208.00 209.00 210.00 211.00 212.00 213.00 214.00 215.00 216.00 217.00 218.00 219.00 220.00 221.00 222.00 223.00 224.00 225.00 226.00 227.00 228.00 229.00 230.00 231.00 232.00 233.00 234.00 235.00 236.00 237.00 238.00 239.00 240.00 241.00 242.00 243.00 244.00 245.00 246.00 247.00 248.00 249.00 250.00 251.00 252.00 253.00 254.00 255.00 256.00 257.00 258.00 259.00 260.00 261.00 262.00 263.00 264.00 265.00 266.00 267.00 268.00 269.00 270.00 271.00 272.00 273.00 274.00 275.00 276.00 277.00 278.00 279.00 280.00 281.00 282.00 283.00 284.00 285.00 286.00 287.00 288.00 289.00 290.00 291.00 292.00 293.00 294.00 295.00 296.00 297.00 298.00 299.00 300.00 301.00 302.00 303.00 304.00 305.00 306.00 307.00 308.00 309.00 310.00 311.00 312.00 313.00 314.00 315.00 316.00 317.00 318.00 319.00 320.00 321.00 322.00 323.00 324.00 325.00 326.00 327.00 328.00 329.00 330.00 331.00 332.00 333.00 334.00 335.00 336.00 337.00 338.00 339.00 340.00 341.00 342.00 343.00 344.00 345.00 346.00 347.00 348.00 349.00 350.00 351.00 352.00 353.00 354.00 355.00 356.00 357.00 358.00 359.00 360.00 361.00 362.00 363.00 364.00 365.00 366.00 367.00 368.00 369.00 370.00 371.00 372.00 373.00 374.00 375.00 376.00 377.00 378.00 379.00 380.00 381.00 382.00 383.00 384.00 385.00 386.00 387.00 388.00 389.00 390.00 391.00 392.00 393.00 394.00 395.00 396.00 397.00 398.00 399.00 400.00 401.00 402.00 403.00 404.00 405.00 406.00 407.00 408.00 409.00 410.00 411.00 412.00 413.00 414.00 415.00 416.00 417.00 418.00 419.00 420.00 421.00 422.00 423.00 424.00 425.00 426.00 427.00 428.00 429.00 430.00 431.00 432.00 433.00 434.00 435.00 436.00 437.00 438.00 439.00 440.00 441.00 442.00 443.00 444.00 445.00 446.00 447.00 448.00 449.00 450.00 451.00 452.00 453.00 454.00 455.00 456.00 457.00 458.00 459.00 460.00 461.00 462.00 463.00 464.00 465.00 466.00 467.00 468.00 469.00 470.00 471.00 472.00 473.00 474.00 475.00 476.00 477.00 478.00 479.00
z2
160.00 161.00 162.00 163.00 164.00 165.00 166.00 167.00 168.00 169.00 170.00 171.00 172.00 173.00 174.00 175.00 176.00 177.00 178.00 179.00 180.00 181.00 182.00 183.00 184.00 185.00 186.00 187.00 188.00 189.00 190.00 191.00 192.00 193.00 194.00 195.00 196.00 197.00 198.00 199.00 200.00 201.00 202.00 203.00 204.00 205.00 206.00 207.00 208.00 209.00 210.00 211.00 212.00 213.00 214.00 215.00 216.00 217.00 218.00 219.00 220.00 221.00 222.00 223.00 224.00 225.00 226.00 227.00 228.00 229.00 230.00 231.00 232.00 233.00 234.00 235.00 236.00 237.00 238.00 239.00 240.00 241.00 242.00 243.00 244.00 245.00 246.00 247.00 248.00 249.00 250.00 251.00 252.00 253.00 254.00 255.00 256.00 257.00 258.00 259.00 260.00 261.00 262.00 263.00 264.00 265.00 266.00 267.00 268.00 269.00 270.00 271.00 272.00 273.00 274.00 275.00 276.00 277.00 278.00 279.00 280.00 281.00 282.00 283.00 284.00 285.00 286.00 287.00 288.00 289.00 290.00 291.00 292.00 293.00 294.00 295.00 296.00 297.00 298.00 299.00 300.00 301.00 302.00 303.00 304.00 305.00 306.00 307.00 308.00 309.00 310.00 311.00 312.00 313.00 314.00 315.00 316.00 317.00 318.00 319.00
z3
320.00 321.00 322.00 323.00 324.00 325.00 326.00 327.00 328.00 329.00 330.00 331.00 332.00 333.00 334.00 335.00 336.00 337.00 338.00 339.00 340.00 341.00 342.00 343.00 344.00 345.00 346.00 347.00 348.00 349.00 350.00 351.00 352.00 353.00 354.00 355.00 356.00 357.00 358.00 359.00 360.00 361.00 362.00 363.00 364.00 365.00 366.00 367.00 368.00 369.00 370.00 371.00 372.00 373.00 374.00 375.00 376.00 377.00 378.00 379.00 380.00 381.00 382.00 383.00 384.00 385.00 386.00 387.00 388.00 389.00 390.00 391.00 392.00 393.00 394.00 395.00 396.00 397.00 398.00 399.00 400.00 401.00 402.00 403.00 404.00 405.00 406.00 407.00 408.00 409.00 410.00 411.00 412.00 413.00 414.00 415.00 416.00 417.00 418.00 419.00 420.00 421.00 422.00 423.00 424.00 425.00 426.00 427.00 428.00 429.00 430.00 431.00 432.00 433.00 434.00 435.00 436.00 437.00 438.00 439.00 440.00 441.00 442.00 443.00 444.00 445.00 446.00 447.00 448.00 449.00 450.00 451.00 452.00 453.00 454.00 455.00 456.00 457.00 458.00 459.00 460.00 461.00 462.00 463.00 464.00 465.00 466.00 467.00 468.00 469.00 470.00 471.00 472.00 473.00 474.00 475.00 476.00 477.00 478.00 479.00