Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 03.09.2008, 18:25   #1
Mario
Senior Member
 
Аватар для Mario
 
Регистрация: 21.04.2007
Сообщений: 516
Вес репутации: 1151/55
Mario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud of
Question Алгоритм Герцеля.

Здравствуйте.
Задача: реализовать декодер DTMF по алгоритму Герцеля. Взял за основу http://www.gaw.ru/html.cgi/txt/doc/m.../max2000_5.htm
Использую PIC16F252 с 10МГц и PLL. Но при этом не знаю как добиться необходимых частоты отсчетов в 8кГц и числа отсчетов в 205.
Пишу на хайтеке 9.50, проверяю в Proteus. Так вот, самое трудоемкое это расчет текущего значения D0.
Последовательность расчета такая: сначала получаю выборку Х (около 30мкс), потом в цикле для каждого из восьми фильтров отдельно считаю D0 = X + a1*D1 - D2, на это уходит 600мкс, т.е. я не могу сделать частоту отсчетов выше 1667 Гц.
А еще по окончанию сбора выборок еще нужно посчитать Р = D1*D1 + D2*D2 - a1*D1*D2, на это уйдет еще примерно по 1-2мс на фильтр, но это уже не так критично.
Попробовал написать код "в лоб":
Код:
    X = Read_ADC_p18_fast_AN0();
    for(Fi=0; Fi<8; Fi++){
        D0[Fi] = X + (LONG)(DTMF_a1[Fi]*D1[Fi]) - D2[Fi];
        D2[Fi] = D1[Fi];
        D1[Fi] = D0[Fi];
    }
    N++;
Но...
Подскажите более оптимальный вариант.
Спасибо.
__________________
if(!Operate) Read(pDatasheet);
Mario вне форума   Ответить с цитированием
Старый 03.09.2008, 18:49   #2
Alex B.
Super Moderator
 
Аватар для Alex B.
 
Регистрация: 25.02.2007
Адрес: Russia, SPb
Сообщений: 1,674
Вес репутации: 1729/73
Alex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant future
Отправить сообщение для Alex B. с помощью Skype™
По умолчанию Ответ: Алгоритм Герцеля.

наиболее оптимальный вариант - взять dsPIC33F12GP201 за 2$ вместо устаревшего PIC18F252 за 5-6$ и спокойно, не торопясь считать. На 4 МГц еще и куча времени останется.
Кроме того, не забывай, что тебе еще нужно не только считать мощность гармоник, но собственно определить посылку DTMF. А для этого нужно посчитать мощность всего сигнала (желательно перед этим пропустив его через ФНЧ), сравнить с мощностью доминирующих гармоник. Потом нужно еще считать мощность гармоник кратных 2 и сравнивать с ними, чтобы не было ложных срабатываний на речь. Ну и там есть еще другие критерии, типа допустимого затухания тонов в тракте и т.д.
__________________
даташит читать до того , а не после
Alex B. вне форума   Ответить с цитированием
Старый 04.09.2008, 09:22   #3
DimaG
Senior Member
 
Регистрация: 25.02.2007
Адрес: Novosibirsk
Возраст: 35
Сообщений: 113
Вес репутации: 149/42
DimaG will become famous soon enoughDimaG will become famous soon enough
Отправить сообщение для DimaG с помощью ICQ
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от Alex B. Посмотреть сообщение
наиболее оптимальный вариант - взять dsPIC33F12GP201 за 2$ вместо устаревшего PIC18F252 за 5-6$ и спокойно, не торопясь считать. На 4 МГц еще и куча времени останется.
Кроме того, не забывай, что тебе еще нужно не только считать мощность гармоник, но собственно определить посылку DTMF. А для этого нужно посчитать мощность всего сигнала (желательно перед этим пропустив его через ФНЧ), сравнить с мощностью доминирующих гармоник. Потом нужно еще считать мощность гармоник кратных 2 и сравнивать с ними, чтобы не было ложных срабатываний на речь. Ну и там есть еще другие критерии, типа допустимого затухания тонов в тракте и т.д.
+1. Задача для DSP (решал такую, правда на TMS320C64x . Немножко пошустрее камешек.)

Алгоритмы рекомендую отлаживать в Matlab - потрать полдня на освоение, выиграешь месяц на отладке.

И не забывай о переполнении фикседа (выбери разумные точности)
DimaG вне форума   Ответить с цитированием
Старый 04.09.2008, 09:28   #4
DimaG
Senior Member
 
Регистрация: 25.02.2007
Адрес: Novosibirsk
Возраст: 35
Сообщений: 113
Вес репутации: 149/42
DimaG will become famous soon enoughDimaG will become famous soon enough
Отправить сообщение для DimaG с помощью ICQ
По умолчанию Ответ: Алгоритм Герцеля.

Еще, общие советы:
1) Используй дробный K - выше точность попадания
2) Будешь писать для DSP - активно используй интринсики (если они естьу Микрочипа) - здорово помогают.
DimaG вне форума   Ответить с цитированием
Старый 04.09.2008, 09:50   #5
Mario
Senior Member
 
Аватар для Mario
 
Регистрация: 21.04.2007
Сообщений: 516
Вес репутации: 1151/55
Mario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud of
Question Ответ: Алгоритм Герцеля.

В реализации ЦОС я пока новичок, поэтому в "фикседах" и "интринсиках" ни в зуб ногой.
Алгоритм первоначально просчитал в MathCAD. Пока считал просто для 8 основных фильтров, без расчета мощности всего сигнала и мощностей вторых гармоник. Посылку думал определять так: из группы нижних частот выбираю самую мощную, также и из верхней, плюс проверка на допустимый уровень. Хотя, я догадываюсь, что это совсем простой подход.
Не знаю как в препроцессорной обработке высчитать косинус, поэтому первоначальные расчеты делаю в маткаде, а в заголовочный файл подставляю уже расчитанные значения a1.
Посмотрел даташит на dsPIC33F12GP201, но не совсем понял "в чем фишка". Да дспиковый АЦП выдает выборки с 1.1Msps, но основная загвоздка с реализацией D0 = X + a1*D1 - D2, указанный выше кусок кода выполняется за 4355 машинных циклов, и при 10MIPs`ах это всего 435,5мкс (около 2300 Гц). Максимальная производительность dsPIC33F12GP201 - 40MIPs, но если учесть еще расчеты мощности всего сигнала и вторых гармоник, то я не представляю как он управится. Скорее всего я ошибаюсь, вопрос - в чем?
__________________
if(!Operate) Read(pDatasheet);
Mario вне форума   Ответить с цитированием
Старый 04.09.2008, 10:09   #6
Alex B.
Super Moderator
 
Аватар для Alex B.
 
Регистрация: 25.02.2007
Адрес: Russia, SPb
Сообщений: 1,674
Вес репутации: 1729/73
Alex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant future
Отправить сообщение для Alex B. с помощью Skype™
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Посылку думал определять так: из группы нижних частот выбираю самую мощную, также и из верхней, плюс проверка на допустимый уровень.
у тебя на речи и на музыке будут сплошные ложняки

Цитата:
Посмотрел даташит на dsPIC33F12GP201, но не совсем понял "в чем фишка".
ну так посмотри еще раз. Причем обрати внимание на набор инструкций

Код:
_dtmf_goertzel:

        push    PSVPAG
        push    CORCON
        push.d  W8

        /* prepare dsp-core and PSV */

        mov     #(DSP_MODE_FRACTIONAL   | \
                  DSP_MODE_RND_DIS      | \
                  DSP_MODE_PSV_EN       | \
                  DSP_MODE_SAT_SUPER    | \
                  DSP_MODE_DATA_SAT_EN  | \
                  DSP_MODE_ACCA_SAT_DIS | \
                  DSP_MODE_ACCB_SAT_DIS | \
                  DSP_MODE_SIGNED),     W8
        mov     W8,                     CORCON          /* set required dsp-core mode */

        mov     #psvpage(_dtmf_coeff_8000_205), W8
        mov     W8,                     PSVPAG          /* set required PSV page */


        dec     W1,             W1                      /* frame size */

        mov     W0,             W9                      /* Save frame pointer */


        /* Calculate Magnitude for every frequency */
        /* --------------------------------------- */

        do      #(16-1),        1f

        /* Q0 = coeff * Q1 - Q2 + sample */
        /* Q2 = Q1                       */
        /* Q1 = Q0                       */

        /* coeff = W5
           Q1    = W6
           Q2    = W8
        */

        mov     W9,             W0                      /* restore frame pointer    */

        clr     W6                                      /* clear Q1                 */
        clr     W8                                      /* clear Q2                 */
        mov     [W2++],         W5                      /* get coeff for next freq  */

        do      W1,             2f

        mov     [W0++],         W7
        mpy     W4*W7,          A

        ;lac     [W0++], #0,     A                       /* Q0 = sample                      */
        ;sftac   A,              #8
        mac     W5*W6,          A
        mac     W5*W6,          A                       /* Q0 = sample + coeff * Q1         */
        neg     W8,             W8                      /* Q2 = -Q2                         */
        add     W8,     #0,     A                       /* Q0 = sample + coeff * Q1 - Q2    */

        mov     W6,             W8                      /* Q2 = Q1                          */

2:      sac.r   A,      #0,     W6                      /* Q1 = Q0                          */


        /* Calculate magnitude:
           magnitude ^ 2 = Q1 ^ 2 + Q2 ^ 2 - Q1 * Q2 * coeff
        */

        mov     W8,             W7                      /* W7 = Q2 */

        mpy     W6*W6,          A
        mpy     W7*W7,          B
        add                     A                       /* A = Q1 ^ 2 + Q2 ^ 2 */

        mpy     W6*W7,          B                       /* B = Q1 * Q2 */
        sac.r   B,      #0,     W6

        mpy     W5*W6,          B
        mac     W5*W6,          B                       /* B = Q1 * Q2 * coeff */

        sub     A                                       /* A = Q1^2 + Q2^2 - Q1*Q2*coeff */

        sac.r   A,      #-1,   [W3++]                   /* save A * 2 for true dB conversion */

1:      nop

        pop.d   W8
        pop     CORCON                                  /* restore CORCON */
        pop     PSVPAG                                  /* restore PSVPAG */

        return
__________________
даташит читать до того , а не после
Alex B. вне форума   Ответить с цитированием
Старый 04.09.2008, 10:30   #7
DimaG
Senior Member
 
Регистрация: 25.02.2007
Адрес: Novosibirsk
Возраст: 35
Сообщений: 113
Вес репутации: 149/42
DimaG will become famous soon enoughDimaG will become famous soon enough
Отправить сообщение для DimaG с помощью ICQ
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от Mario Посмотреть сообщение
В реализации ЦОС я пока новичок, поэтому в "фикседах" и "интринсиках" ни в зуб ногой.
Алгоритм первоначально просчитал в MathCAD. Пока считал просто для 8 основных фильтров, без расчета мощности всего сигнала и мощностей вторых гармоник. Посылку думал определять так: из группы нижних частот выбираю самую мощную, также и из верхней, плюс проверка на допустимый уровень. Хотя, я догадываюсь, что это совсем простой подход.
Не знаю как в препроцессорной обработке высчитать косинус, поэтому первоначальные расчеты делаю в маткаде, а в заголовочный файл подставляю уже расчитанные значения a1.
Посмотрел даташит на dsPIC33F12GP201, но не совсем понял "в чем фишка". Да дспиковый АЦП выдает выборки с 1.1Msps, но основная загвоздка с реализацией D0 = X + a1*D1 - D2, указанный выше кусок кода выполняется за 4355 машинных циклов, и при 10MIPs`ах это всего 435,5мкс (около 2300 Гц). Максимальная производительность dsPIC33F12GP201 - 40MIPs, но если учесть еще расчеты мощности всего сигнала и вторых гармоник, то я не представляю как он управится. Скорее всего я ошибаюсь, вопрос - в чем?
Тогда начни для начала с изучения fixed-point арифметики. Без нее обработку сигналов на целочисленниках не сделаешь (разумными методами).

Константы можно и так рассчитывать - это не принципиально.

Фишка ДСП - в наличии инструкций и архитектуры "заточенных" под типовые задачи ЦОС (точнее, под типовые операции).
Например - "перемножить А на Б и сложить с В", "Перемножить А на Б, результат сдвинуть на 8" и тд - это одна команда.
А так же возможность выполнять инструкции параллельно..

Вот фрагмент кода (6x Гертцель на Техасе)

Код:
///////////////////////////////////////////////////////////////////////////////
void Goertzel6(INT16* pi16Buf_, WORD wLen_, INT16* pi16Freq_, INT32* pi32Res_)
{
  register INT16 i16CoefA_ = pi16Freq_[0];
  register INT16 i16CoefB_ = pi16Freq_[1];
  register INT16 i16CoefC_ = pi16Freq_[2];
  register INT16 i16CoefD_ = pi16Freq_[3];
  register INT16 i16CoefE_ = pi16Freq_[4];
  register INT16 i16CoefF_ = pi16Freq_[5];

  register INT32 i32A1_ = 0,i32A2_ = 0,i32A0_ = 0;
  register INT32 i32B1_ = 0,i32B2_ = 0,i32B0_ = 0;
  register INT32 i32C1_ = 0,i32C2_ = 0,i32C0_ = 0;
  register INT32 i32D1_ = 0,i32D2_ = 0,i32D0_ = 0;
  register INT32 i32E1_ = 0,i32E2_ = 0,i32E0_ = 0;
  register INT32 i32F1_ = 0,i32F2_ = 0,i32F0_ = 0;

  #pragma MUST_ITERATE(80, 320, 80); 
  for (register WORD I_=0; I_ < wLen_; ++I_)//while(wLen_)
  {
    i32A0_  = _mpylir(i16CoefA_,i32A1_);
    i32B0_  = _mpylir(i16CoefB_,i32B1_);
    i32C0_  = _mpylir(i16CoefC_,i32C1_);
    i32D0_  = _mpylir(i16CoefD_,i32D1_);
    i32E0_  = _mpylir(i16CoefE_,i32E1_);
    i32F0_  = _mpylir(i16CoefF_,i32F1_);

    i32A0_  = i32A0_+i32A0_;
    i32B0_  = i32B0_+i32B0_;
    i32C0_  = i32C0_+i32C0_;
    i32D0_  = i32D0_+i32D0_;
    i32E0_  = i32E0_+i32E0_;
    i32F0_  = i32F0_+i32F0_;

    i32A2_  = pi16Buf_[I_] - i32A2_;
    i32B2_  = pi16Buf_[I_] - i32B2_;
    i32C2_  = pi16Buf_[I_] - i32C2_;
    i32D2_  = pi16Buf_[I_] - i32D2_;
    i32E2_  = pi16Buf_[I_] - i32E2_;
    i32F2_  = pi16Buf_[I_] - i32F2_;

    i32A0_   = i32A2_+i32A0_;
    i32B0_   = i32B2_+i32B0_;
    i32C0_   = i32C2_+i32C0_;
    i32D0_   = i32D2_+i32D0_;
    i32E0_   = i32E2_+i32E0_;
    i32F0_   = i32F2_+i32F0_;

    i32A2_  = i32A1_;
    i32B2_  = i32B1_;
    i32C2_  = i32C1_;
    i32D2_  = i32D1_;
    i32E2_  = i32E1_;
    i32F2_  = i32F1_;

    i32A1_  = i32A0_;
    i32B1_  = i32B0_;
    i32C1_  = i32C0_;
    i32D1_  = i32D0_;
    i32E1_  = i32E0_;
    i32F1_  = i32F0_;
  }

  // Calculate energy
  register INT32 i32A1s_ = i32A1_/128;
  register INT32 i32A2s_ = i32A2_/128;
  register INT32 A1Sq    = (i32A1s_/2)*i32A1s_;
  register INT32 A2Sq    = (i32A2s_/2)*i32A2s_;
  register INT32 ACos    = (((i32A2s_/2)*i32A1s_)/256)*(i16CoefA_/64);

  register INT32 i32B1s_ = i32B1_/128;
  register INT32 i32B2s_ = i32B2_/128;
  register INT32 B1Sq    = (i32B1s_/2)*i32B1s_;
  register INT32 B2Sq    = (i32B2s_/2)*i32B2s_;
  register INT32 BCos    = (((i32B2s_/2)*i32B1s_)/256)*(i16CoefB_/64);

  register INT32 i32C1s_ = i32C1_/128;
  register INT32 i32C2s_ = i32C2_/128;
  register INT32 C1Sq    = (i32C1s_/2)*i32C1s_;
  register INT32 C2Sq    = (i32C2s_/2)*i32C2s_;
  register INT32 CCos    = (((i32C2s_/2)*i32C1s_)/256)*(i16CoefC_/64);

  register INT32 i32D1s_ = i32D1_/128;
  register INT32 i32D2s_ = i32D2_/128;
  register INT32 D1Sq    = (i32D1s_/2)*i32D1s_;
  register INT32 D2Sq    = (i32D2s_/2)*i32D2s_;
  register INT32 DCos    = (((i32D2s_/2)*i32D1s_)/256)*(i16CoefD_/64);

  register INT32 i32E1s_ = i32E1_/128;
  register INT32 i32E2s_ = i32E2_/128;
  register INT32 E1Sq    = (i32E1s_/2)*i32E1s_;
  register INT32 E2Sq    = (i32E2s_/2)*i32E2s_;
  register INT32 ECos    = (((i32E2s_/2)*i32E1s_)/256)*(i16CoefE_/64);

  register INT32 i32F1s_ = i32F1_/128;
  register INT32 i32F2s_ = i32F2_/128;
  register INT32 F1Sq    = (i32F1s_/2)*i32F1s_;
  register INT32 F2Sq    = (i32F2s_/2)*i32F2s_;
  register INT32 FCos    = (((i32F2s_/2)*i32F1s_)/256)*(i16CoefF_/64);
  // story result
  pi32Res_[0] = A1Sq+A2Sq-ACos;
  pi32Res_[1] = B1Sq+B2Sq-BCos;
  pi32Res_[2] = C1Sq+C2Sq-CCos;
  pi32Res_[3] = D1Sq+D2Sq-DCos;
  pi32Res_[4] = E1Sq+E2Sq-ECos;
  pi32Res_[5] = F1Sq+F2Sq-FCos;
}
Здесь - _mpylir(А,Б) - интринсик
Код:
The MPYLIR instruction performs a 16-bit by 32-bit multiply. The lower half of src1 is treated as a 16-bit signed input. The value in src2 is treated as a 32-bit signed value. The product is then rounded into a 32-bit result by adding the value 2^14 and then this sum is right shifted by 15. The lower 32-bits of the result are written into dst.
По ДТМФ - в сети валяется достаточно много аппнот (от того же техаса). Единственное - не верь им, что без VoiceActivity detector у тебя получится стоящая вещь
DimaG вне форума   Ответить с цитированием
Старый 04.09.2008, 10:51   #8
Mario
Senior Member
 
Аватар для Mario
 
Регистрация: 21.04.2007
Сообщений: 516
Вес репутации: 1151/55
Mario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud of
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от Alex B. Посмотреть сообщение
ну так посмотри еще раз. Причем обрати внимание на набор инструкций
Эээ... я так понимаю этот пример кода не для пиков? Смотрю в список инструкций на dsPIC33F12GP201 и никаких do, mpy, mac, sac.r и пр.

Цитата:
Сообщение от DimaG Посмотреть сообщение
Фишка ДСП - в наличии инструкций и архитектуры "заточенных" под типовые задачи ЦОС (точнее, под типовые операции).
Например - "перемножить А на Б и сложить с В", "Перемножить А на Б, результат сдвинуть на 8" и тд - это одна команда.
А так же возможность выполнять инструкции параллельно..
Опять же, в списке инструкций не нашел таких "заточенных под типовые задачи ЦОС".
Предполагается что в звуковом канале кроме DTMF больше ничего не будет передаваться, никакого голоса и музыки.
__________________
if(!Operate) Read(pDatasheet);
Mario вне форума   Ответить с цитированием
Старый 04.09.2008, 10:57   #9
DimaG
Senior Member
 
Регистрация: 25.02.2007
Адрес: Novosibirsk
Возраст: 35
Сообщений: 113
Вес репутации: 149/42
DimaG will become famous soon enoughDimaG will become famous soon enough
Отправить сообщение для DimaG с помощью ICQ
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от Mario Посмотреть сообщение
Э
Опять же, в списке инструкций не нашел таких "заточенных под типовые задачи ЦОС".
Предполагается что в звуковом канале кроме DTMF больше ничего не будет передаваться, никакого голоса и музыки.
Еще раз советую - почитай про фиксед поинт арифметику, переложи на нее необходимые тебе алгоритмы ЦОС. Тогда и "заточенность" инструкций увидишь.
DimaG вне форума   Ответить с цитированием
Старый 04.09.2008, 10:58   #10
DimaG
Senior Member
 
Регистрация: 25.02.2007
Адрес: Novosibirsk
Возраст: 35
Сообщений: 113
Вес репутации: 149/42
DimaG will become famous soon enoughDimaG will become famous soon enough
Отправить сообщение для DimaG с помощью ICQ
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от Mario Посмотреть сообщение
Предполагается что в звуковом канале кроме DTMF больше ничего не будет передаваться, никакого голоса и музыки.
А мож и ДТМФ тут не нужен? Ты подробнее задачу обрисуй.
DimaG вне форума   Ответить с цитированием
Старый 04.09.2008, 11:10   #11
Alex B.
Super Moderator
 
Аватар для Alex B.
 
Регистрация: 25.02.2007
Адрес: Russia, SPb
Сообщений: 1,674
Вес репутации: 1729/73
Alex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant future
Отправить сообщение для Alex B. с помощью Skype™
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от Mario Посмотреть сообщение
Эээ... я так понимаю этот пример кода не для пиков? Смотрю в список инструкций на dsPIC33F12GP201 и никаких do, mpy, mac, sac.r и пр.
это пример кода для ДСпиков. Одно из двух - либо ты не туда смотришь, либо не глазами.

Цитата:
Сообщение от Mario Посмотреть сообщение
Опять же, в списке инструкций не нашел таких "заточенных под типовые задачи ЦОС".
а ты знаешь, что это за инструкции?
__________________
даташит читать до того , а не после
Alex B. вне форума   Ответить с цитированием
Старый 04.09.2008, 11:11   #12
Alex B.
Super Moderator
 
Аватар для Alex B.
 
Регистрация: 25.02.2007
Адрес: Russia, SPb
Сообщений: 1,674
Вес репутации: 1729/73
Alex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant future
Отправить сообщение для Alex B. с помощью Skype™
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от DimaG Посмотреть сообщение
Еще раз советую - почитай про фиксед поинт арифметику, переложи на нее необходимые тебе алгоритмы ЦОС. Тогда и "заточенность" инструкций увидишь.
да при чем тут fixed-point и ЦОC? не путай парня...
__________________
даташит читать до того , а не после
Alex B. вне форума   Ответить с цитированием
Старый 04.09.2008, 11:16   #13
Mario
Senior Member
 
Аватар для Mario
 
Регистрация: 21.04.2007
Сообщений: 516
Вес репутации: 1151/55
Mario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud of
По умолчанию Ответ: Алгоритм Герцеля.

Первоначальная задача - передавать данные через голосовой канал в GSM. Использую SIM300DZ, но он не может детектировать DTMF. Можно его и аппаратно детектировать MT8870, но я решил сначала попробовать программно.
__________________
if(!Operate) Read(pDatasheet);
Mario вне форума   Ответить с цитированием
Старый 04.09.2008, 11:26   #14
Mario
Senior Member
 
Аватар для Mario
 
Регистрация: 21.04.2007
Сообщений: 516
Вес репутации: 1151/55
Mario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud of
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от Alex B. Посмотреть сообщение
а ты знаешь, что это за инструкции?
Нет, не знаю, но судя по описанию DimaG
Цитата:
Сообщение от DimaG Посмотреть сообщение
Фишка ДСП - в наличии инструкций и архитектуры "заточенных" под типовые задачи ЦОС (точнее, под типовые операции).
Например - "перемножить А на Б и сложить с В", "Перемножить А на Б, результат сдвинуть на 8" и тд - это одна команда.
А так же возможность выполнять инструкции параллельно..
и по даташиту на dsPIC33F12GP201 (стр.216-217) среди 72 команд я не нашел что-нибудь похожее на "перемножить А на Б и сложить с В", "Перемножить А на Б, результат сдвинуть на 8".
__________________
if(!Operate) Read(pDatasheet);
Mario вне форума   Ответить с цитированием
Старый 04.09.2008, 11:41   #15
DimaG
Senior Member
 
Регистрация: 25.02.2007
Адрес: Novosibirsk
Возраст: 35
Сообщений: 113
Вес репутации: 149/42
DimaG will become famous soon enoughDimaG will become famous soon enough
Отправить сообщение для DimaG с помощью ICQ
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от Alex B. Посмотреть сообщение
да при чем тут fixed-point и ЦОC? не путай парня...
А в чем путанница? Основная задача DSP - ЦОС (Гертцель - частный случай). Так как эти DSP целочисленники - желательно (почти обязательно) использовать fixed. В системе комманд нормального DSP присутствуют комманды для работы с fixed (+ команды, упрощающие реализацию типовых алгоритмов)
Где я не прав?
DimaG вне форума   Ответить с цитированием
Старый 04.09.2008, 11:46   #16
DimaG
Senior Member
 
Регистрация: 25.02.2007
Адрес: Novosibirsk
Возраст: 35
Сообщений: 113
Вес репутации: 149/42
DimaG will become famous soon enoughDimaG will become famous soon enough
Отправить сообщение для DimaG с помощью ICQ
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от Mario Посмотреть сообщение
Н
и по даташиту на dsPIC33F12GP201 (стр.216-217) среди 72 команд я не нашел что-нибудь похожее на "перемножить А на Б и сложить с В", "Перемножить А на Б, результат сдвинуть на 8".
Я тебе частные случаи привел. Не обязательно, что такие комманды присутствуют у данного DSP
DimaG вне форума   Ответить с цитированием
Старый 04.09.2008, 11:47   #17
Alex B.
Super Moderator
 
Аватар для Alex B.
 
Регистрация: 25.02.2007
Адрес: Russia, SPb
Сообщений: 1,674
Вес репутации: 1729/73
Alex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant future
Отправить сообщение для Alex B. с помощью Skype™
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от Mario Посмотреть сообщение
Нет, не знаю, но судя по описанию DimaG
и по даташиту на dsPIC33F12GP201 (стр.216-217) среди 72 команд я не нашел что-нибудь похожее на "перемножить А на Б и сложить с В", "Перемножить А на Б, результат сдвинуть на 8".
я не знаю, что ты читаешь. В последнем даташите DS70264A, в табл. 19-2 приведены все 83 инструкции
основная операция цифровой обработки сигналов - это умножение с накоплением (MAC). Кроме того, любой нормальный DSP должен иметь несколько шин к памяти для одновременной выборки, аппаратные циклы, аппаратное усечение и округление результата. Если проц не работает наитивно с плавающей точкой (что сейчас уже в порядке вещей - новые дешевые шарки у АД и даже моторные DSC у TI) - то да, он может/должен иметь аппаратную поддержку fixed-point (т.е. сдвиг при умножении и сложении, расширение знака и пр). НО! fixed-point не является синонимом DSP.
__________________
даташит читать до того , а не после

Последний раз редактировалось Alex B.; 04.09.2008 в 11:59.
Alex B. вне форума   Ответить с цитированием
Старый 04.09.2008, 11:50   #18
DimaG
Senior Member
 
Регистрация: 25.02.2007
Адрес: Novosibirsk
Возраст: 35
Сообщений: 113
Вес репутации: 149/42
DimaG will become famous soon enoughDimaG will become famous soon enough
Отправить сообщение для DimaG с помощью ICQ
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от Mario Посмотреть сообщение
Первоначальная задача - передавать данные через голосовой канал в GSM. Использую SIM300DZ, но он не может детектировать DTMF. Можно его и аппаратно детектировать MT8870, но я решил сначала попробовать программно.
"Все уже украдено до нас"..
Используй GPRS. Это не так сложно по сравнению с проблемами, с которыми ты столкнешься при передаче потока даных по голосовому каналу. Если упорствуешь - почитай про модемы (в частности, их математику) - как раз ложатся на твою задачу
DimaG вне форума   Ответить с цитированием
Старый 04.09.2008, 12:14   #19
Mario
Senior Member
 
Аватар для Mario
 
Регистрация: 21.04.2007
Сообщений: 516
Вес репутации: 1151/55
Mario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud of
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от Alex B. Посмотреть сообщение
я не знаю, что ты читаешь. В последнем даташите DS70264A, в табл. 19-2 приведены все 83 инструкции
основная операция цифровой обработки сигналов - это умножение с накоплением (MAC). Кроме того, любой нормальный DSP должен иметь несколько шин к памяти для одновременной выборки, аппаратные циклы, аппаратное усечение и округление результата. Если проц не работает наитивно с плавающей точкой (что сейчас уже в порядке вещей - новые дешевые шарки у АД и даже моторные DSC у TI) - то да, он может/должен иметь аппаратную поддержку fixed-point (т.е. сдвиг при умножении и сложении, расширение знака и пр). НО! fixed-point не является синонимом DSP.
Виноват, ступил. Было открыто несколько даташитов, и я, ух-шайтанама, глянул не в тот. Сейчас смотрю в DS70264C, все есть. Спасибо.

Цитата:
Сообщение от DimaG Посмотреть сообщение
"Все уже украдено до нас"..
Используй GPRS. Это не так сложно по сравнению с проблемами, с которыми ты столкнешься при передаче потока даных по голосовому каналу. Если упорствуешь - почитай про модемы (в частности, их математику) - как раз ложатся на твою задачу
"Передача данных через голосовой канал выбрана потому, что голосовой канал будет всегда, а CSD и GPRS - где есть, где нет" нерушимая точка зрения начальствующих органов. Поэтому DTMF.
Подумываю не поставить ли MT88L70. Кто знает как она работает, в смысле качество определения сигнала?
__________________
if(!Operate) Read(pDatasheet);

Последний раз редактировалось Mario; 04.09.2008 в 12:25.
Mario вне форума   Ответить с цитированием
Старый 04.09.2008, 12:25   #20
DimaG
Senior Member
 
Регистрация: 25.02.2007
Адрес: Novosibirsk
Возраст: 35
Сообщений: 113
Вес репутации: 149/42
DimaG will become famous soon enoughDimaG will become famous soon enough
Отправить сообщение для DimaG с помощью ICQ
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от Mario Посмотреть сообщение
"Передача данных через голосовой канал выбрана потому, что голосовой канал будет всегда, а CSD и GPRS - где есть, где нет" нерушимая точка зрения начальствующих органов. Поэтому DTMF.
Вариант приспособить готовый GSM-modem не рассматривал?
DimaG вне форума   Ответить с цитированием
Старый 04.09.2008, 12:36   #21
Mario
Senior Member
 
Аватар для Mario
 
Регистрация: 21.04.2007
Сообщений: 516
Вес репутации: 1151/55
Mario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud of
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от DimaG Посмотреть сообщение
Вариант приспособить готовый GSM-modem не рассматривал?
Не понял вопрос, что значит "готовый GSM-modem" ?
SIM300DZ - тоже готовый GSM-модем, только в нем нет функции декодирования DTMF - приходится изголяться.
WaveCOM Q2686 декодирует, но стоит гораздо дороже.
__________________
if(!Operate) Read(pDatasheet);
Mario вне форума   Ответить с цитированием
Старый 04.09.2008, 12:49   #22
DimaG
Senior Member
 
Регистрация: 25.02.2007
Адрес: Novosibirsk
Возраст: 35
Сообщений: 113
Вес репутации: 149/42
DimaG will become famous soon enoughDimaG will become famous soon enough
Отправить сообщение для DimaG с помощью ICQ
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от Mario Посмотреть сообщение
Не понял вопрос, что значит "готовый GSM-modem" ?
SIM300DZ - тоже готовый GSM-модем, только в нем нет функции декодирования DTMF - приходится изголяться.
WaveCOM Q2686 декодирует, но стоит гораздо дороже.
Имелось в виду - поискать, есть ли в природе уже готовые модемы, предназначенные для передачи данных в сетях GSM
DimaG вне форума   Ответить с цитированием
Старый 04.09.2008, 14:13   #23
Alex B.
Super Moderator
 
Аватар для Alex B.
 
Регистрация: 25.02.2007
Адрес: Russia, SPb
Сообщений: 1,674
Вес репутации: 1729/73
Alex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant future
Отправить сообщение для Alex B. с помощью Skype™
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от Mario Посмотреть сообщение
"Передача данных через голосовой канал выбрана потому, что голосовой канал будет всегда, а CSD и GPRS - где есть, где нет" нерушимая точка зрения начальствующих органов. Поэтому DTMF.
Подумываю не поставить ли MT88L70. Кто знает как она работает, в смысле качество определения сигнала?
CSD это та же передача через голосовой канал, так шта... не изобретайте велосипед. MT88L70 работает более-менее нормально. Но не всегда - почему я и делал декодер на dsPIC.
__________________
даташит читать до того , а не после
Alex B. вне форума   Ответить с цитированием
Старый 04.09.2008, 15:02   #24
Mario
Senior Member
 
Аватар для Mario
 
Регистрация: 21.04.2007
Сообщений: 516
Вес репутации: 1151/55
Mario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud ofMario has much to be proud of
По умолчанию Ответ: Алгоритм Герцеля.

Цитата:
Сообщение от Alex B. Посмотреть сообщение
CSD это та же передача через голосовой канал, так шта... не изобретайте велосипед.
Только, к сожалению, не во всех регионах CSD работает, т.к. для его работы GSM-оператор должен устанавливать дополнительное оборудование, а им пользуются не так часто. По этим же причинам GPRS не подходит.
Ну а передача DTMF работает практически везде, т.к. почти у каждого оператора есть голосовые меню. Поэтому приходится изобретать.
Кстати, чтобы быть точным и для реализации DTMF оператор тоже устанавливает дополнительное оборудование, т.е. с телефона оператору передается только команда на генерацию DTMF, а сам сигнал формирует оператор. Если же в линию самому передавать DTMF, то оператор определяет что это за посылка и опять же генерирует ее сам.
__________________
if(!Operate) Read(pDatasheet);
Mario вне форума   Ответить с цитированием
Старый 04.09.2008, 15:30   #25
Sash
Senior Member
 
Регистрация: 14.04.2007
Адрес: Не очень далеко от Питера (Новосибирск)
Возраст: 40
Сообщений: 964
Вес репутации: 1741/65
Sash has a brilliant futureSash has a brilliant futureSash has a brilliant futureSash has a brilliant futureSash has a brilliant futureSash has a brilliant futureSash has a brilliant futureSash has a brilliant futureSash has a brilliant futureSash has a brilliant futureSash has a brilliant future
По умолчанию Ответ: Алгоритм Герцеля.

Правда:
Цитата:
Сообщение от Mario Посмотреть сообщение
...с телефона оператору передается только команда на генерацию DTMF, а сам сигнал формирует оператор.
Неправда:
Цитата:
Если же в линию самому передавать DTMF, то оператор определяет что это за посылка и опять же генерирует ее сам.
Было БЫ вери гуд, если БЫ это было так...
Sash вне форума   Ответить с цитированием
Ответ

Метки
dtmf


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм Dima Продукция MICROCHIP 12 04.09.2008 14:19
Алгоритм рассчета времени (турботаймер) alex_new_2030 Общетехнические вопросы 10 26.04.2008 18:31
всего 3 байта, третий формируется из 2-х, какой алгоритм? Павел Продукция MICROCHIP 19 07.02.2008 16:11
Алгоритм интерполяции axxcell Продукция MICROCHIP 2 11.12.2007 21:28
Алгоритм реализацыи метода простых итераций BOSSUA Продукция MICROCHIP 3 17.09.2007 11:52


Часовой пояс GMT +3, время: 15:44.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot