Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: преобразование массива комплексных 16-ти битных отсчетов в массив комплексных 32-битных отсчетов (проверялось на TMS320C6416)
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
qxov
Порой бывает необходимо. В принципе, задача не сложная. Данная версия работает несколько быстрее, чем будучи написанная "в лоб". Как всегда, пожелания и комментарии буду рад видеть.

Код
// Вход: 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;      
    }
}
qxov
Если работать с памятью с помощью amemd8 получаем ускорение примерно на 5% по сравнению с этим вариантом...
qxov
Позор мне =)

for(int i=0;i<nSamps;i++)
_amemd8(&expandedSamples[2*i])=_mpy2(_amem4_const(&inputSamples[i]),0x00010001);
partsun
А у ВАС нет примерчиков работы со временем (типа сравнения таймер дошёл или нет, сложения времЁн, вычитание, и всё такое )
qxov
Цитата(partsun @ May 31 2007, 11:42) *
А у ВАС нет примерчиков работы со временем (типа сравнения таймер дошёл или нет, сложения времЁн, вычитание, и всё такое )

Не совсем понимаю вопрос, если честно
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.