Порой бывает необходимо. В принципе, задача не сложная. Данная версия работает несколько быстрее, чем будучи написанная "в лоб". Как всегда, пожелания и комментарии буду рад видеть.
Код
// Вход: int inputSamples[nSamps], inputSamples[i]=_pack2(imag[i], real[i])
// Результат: int expandedSamples[2*nSamps], expandedSamples[2*i]=real[i], expandedSamples[2*i+1]=imag[i]
inline void expandSamples(int *inputSamples, int *expandedSamples, int nSamps)
{
// Здесь можно добавить #pragma MUST_ITERATE с подходящими значениями, смотреть надо по месту
for(int i=0;i<nSamps/2;i++)
{
int input1=inputSamples[i];
int sign1=_shr2(input1,15);
expandedSamples[2*i]=_pack2(sign1,input1);
expandedSamples[2*i+1]=_packh2(sign1,input1);
int input2=inputSamples[i+nSamps/2];
expandedSamples[2*i+nSamps]=_ext(input2,16,16);
expandedSamples[2*i+1+nSamps]=input2>>16;
}
}