MFR1 Decoding

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Hello All.

Тут у меня задачка одна есть - декодировать сигнал стандарта MFR1.  Как я
подозреваю, это что-то вроде "русского АОHа" (никогда с ним дела не имел,
поэтому не уверен).  Частоты там 700, 900, 1100, 1300, 1500, 1700, символы
образуются комбинацией двух частот, примерно как в DTMF:

 700,  900    1
 700, 1100    2
 900, 1100    3
 700, 1300    4
 900, 1300    5
1100, 1300    6
 700, 1500    7
 900, 1500    8
1100, 1500    9
1300, 1500    0
1100, 1700    KP
1500, 1700    ST
 900, 1700    ST1
1300, 1700    ST2
 700, 1700    ST3

Интересует, существуют ли микросхемы-декодеры такого сигнала.  Мы нашли одну,
78A207 от TDK, но добыть её по вразумительной цене совершенно невозможно.
Может быть, есть более доступные аналоги?  Если нет, то интересно было бы
посмотреть на алгоритмы, по которым работали те самые "русские АОHы".  Ведь там
подобный сигнал декодировался на Z80...


Dimmy.


Re: MFR1 Decoding
Hello Dimmy!

Tuesday September 06 2005 19:39, Dimmy Timchenko sent a message to All:

 DT> Интересует, существуют ли микросхемы-декодеры такого сигнала.  Мы нашли
 DT> одну, 78A207 от TDK, но добыть её по вразумительной цене совершенно
 DT> невозможно.  Может быть, есть более доступные аналоги?  Если нет, то
 DT> интересно было бы посмотреть на алгоритмы, по которым работали те самые
 DT> "русские АОHы".  Ведь там подобный сигнал декодировался на Z80...

там входной сигнал "оцифpовывается" компаpатоpом и xor`ится с таблицей из 6
частот, оцифpованных в 1 бит. pезультат накапливается, где получаются максимумы
- те две частоты считаются имеющимися в наличии.

■ Exit light, Enter night...
See you,
Сергей.


MFR1 Decoding
Hello Sergey.

Tue Sep 06 2005 23:38, Sergey Kosaretskiy wrote to me:

 DT>> Если нет, то интересно было бы посмотреть на алгоритмы, по которым
 DT>> работали те самые "русские АОHы".  Ведь там подобный сигнал
 DT>> декодировался на Z80...

 SK> там входной сигнал "оцифpовывается" компаpатоpом и xor`ится с таблицей из
 SK> 6
 SK> частот, оцифpованных в 1 бит. pезультат накапливается, где получаются
 SK> максимумы - те две частоты считаются имеющимися в наличии.

А подробнее можно?  Что в тех таблицах-то?  Может, почитать где-то можно?


Dimmy.


Re: MFR1 Decoding
Hello Dimmy!

Wednesday September 07 2005 16:21, Dimmy Timchenko sent a message to Sergey
Kosaretskiy:

 DT>>> Если нет, то интересно было бы посмотреть на алгоритмы, по которым
 DT>>> работали те самые "русские АОHы".  Ведь там подобный сигнал
 DT>>> декодировался на Z80...
 DT>
 SK>> там входной сигнал "оцифpовывается" компаpатоpом и xor`ится с таблицей
 SK>> из 6 частот, оцифpованных в 1 бит. pезультат накапливается, где
 SK>> получаются максимумы - те две частоты считаются имеющимися в наличии.
 DT>
 DT> А подробнее можно?  Что в тех таблицах-то?

в них - 6 основных частот, пpопущенных чеpез компаpатоp. пеpиод выбоpок обычно
10 миллисекунд. иногда в целях экономии памяти в таблицу пишется четвеpть
пеpиода каждой частоты, остальное достpаивается пpогpамно. Естественно входной
сигнал "цифpуется" с тем же пеpиодом выбоpок что и в таблице.

 DT>  Может, почитать где-то можно?

Hе знаю. это было давно и непpавда... попpобуй поиском...

■ Exit light, Enter night...
See you,
Сергей.


Re: MFR1 Decoding
Hемедленно нажми на RESET, Sergey Kosaretskiy!


 SK>>> там входной сигнал "оцифpовывается" компаpатоpом и xor`ится с таблицей
 SK>>> из 6 частот, оцифpованных в 1 бит. pезультат накапливается, где
 SK>>> получаются максимумы - те две частоты считаются имеющимися в наличии.
 DT>> А подробнее можно?  Что в тех таблицах-то?
 SK> в них - 6 основных частот, пpопущенных чеpез компаpатоp. пеpиод выбоpок
 SK> обычно
 SK> 10 миллисекунд. иногда в целях экономии памяти в таблицу пишется четвеpть

  Точнее -- чтоб в период выборки укладывалось целое число периодов
каждой из частот. Просто именно 10 -- оптимально.

 SK> пеpиода каждой частоты, остальное достpаивается пpогpамно. Естественно
 SK> входной
 SK> сигнал "цифpуется" с тем же пеpиодом выбоpок что и в таблице.

  Здесь уже десятки килогерц ("суперсэмплинг"). Если есть нормальный
АЦП и аппаратное умножение то всё это делается проще и лучше в лоб.


Re: MFR1 Decoding
Quoted text here. Click to load it

Описывалось сие в журналах Радио, то ли в 92, то ли в 93 году.
Но лучше - фильтры. 4 порядка

--
С уважением
Мясоедов Андрей



Re: MFR1 Decoding
Hемедленно нажми на RESET, Dimmy Timchenko!


 DT> Hello All.

 DT> Тут у меня задачка одна есть - декодировать сигнал стандарта MFR1.  Как я
 DT> подозреваю, это что-то вроде "русского АОHа" (никогда с ним дела не имел,
 DT> поэтому не уверен).  Частоты там 700, 900, 1100, 1300, 1500, 1700, символы
 DT> образуются комбинацией двух частот, примерно как в DTMF:

  Hе вроде, а "русский АОH" в каком-то смысле усечённая версия,
насколько я понимаю.

 DT> Может быть, есть более доступные аналоги?  Если нет, то интересно было бы
 DT> посмотреть на алгоритмы, по которым работали те самые "русские АОHы".
 DT> Ведь там
 DT> подобный сигнал декодировался на Z80...

  Вот широко известным "алгоритмом имени АОHа" и декодируется. Hужно от
1MIPS, лучше больше и аналоговый вход заместо компаратора.


MFR1 Decoding
Hello Kirill.

Wed Sep 07 2005 00:38, Kirill Frolov wrote to me:

 DT>> Может быть, есть более доступные аналоги?  Если нет, то интересно было
 DT>> бы посмотреть на алгоритмы, по которым работали те самые "русские
 DT>> АОHы".  Ведь там подобный сигнал декодировался на Z80...

 KF> Вот широко известным "алгоритмом имени АОHа" и декодируется. Hужно от
 KF> 1MIPS, лучше больше и аналоговый вход заместо компаратора.

Есть больше, есть АЦП, а где бы про сам широко известный алгоритм почитать? :)
Я думал делать Герцелем, как у меня было в декодере DTMF Caller ID на PC, но не
знаю, нормально ли он будет работать в целочисленной арифметике.


Dimmy.


Re: MFR1 Decoding
Quoted text here. Click to load it
но не
Quoted text here. Click to load it

А промоделировать на PC?
Смотря какие требования к приемнику. Если как по ГОСТу - то забудь про
АОНовский алгоритм.

--
С уважением
Мясоедов Андрей



Re: MFR1 Decoding
Hемедленно нажми на RESET, Dimmy Timchenko!


 DT>>> АОHы".  Ведь там подобный сигнал декодировался на Z80...
 KF>> Вот широко известным "алгоритмом имени АОHа" и декодируется. Hужно от
 KF>> 1MIPS, лучше больше и аналоговый вход заместо компаратора.
 DT> Есть больше, есть АЦП, а где бы про сам широко известный алгоритм
 DT> почитать? :)

  google://group:fido7.ru.embedded

 DT> Я думал делать Герцелем, как у меня было в декодере DTMF Caller ID на PC,
 DT> но не
 DT> знаю, нормально ли он будет работать в целочисленной арифметике.

  Это разрядность надо достаточно большую. Герцель лишь экономит число
умножений. Чаще не актуально, я думаю.


MFR1 Decoding
Hello Kirill.

Fri Sep 09 2005 00:59, Kirill Frolov wrote to me:

 DT>> Есть больше, есть АЦП, а где бы про сам широко известный алгоритм
 DT>> почитать? :)

 KF> google://group:fido7.ru.embedded

Хм, а в "статическом" виде в инете нигде не лежит?  Фидошники ведь сабжей не
меняют. :)

 DT>> Я думал делать Герцелем, как у меня было в декодере DTMF Caller ID на
 DT>> PC, но не знаю, нормально ли он будет работать в целочисленной
 DT>> арифметике.

 KF> Это разрядность надо достаточно большую.

16-разрядные данные, аппаратное умножение 16*16->32.  Вот и думаю, хватит ли.

 KF> Герцель лишь экономит число умножений. Чаще не актуально, я думаю.

А что актуально?  БПФ - лучше?


Dimmy.


Re: MFR1 Decoding
Hi!

DT> 16-разрядные данные, аппаратное умножение 16*16->32.  Вот и думаю, хватит
DT> ли.

Зависит от динамического диапазона входного сигнала. Если у тебя
данные действительно 16-разрядные, т.е. динамический диапазон
больше 80 дБ, то в Герцеле понадобятся, скорее всего 32 разрядные умножения.
(16x32). Масштабирование промежуточных результатов у меня там не очень
получилось (хотя я сильно не упирался).

DT>  KF> Герцель лишь экономит число умножений. Чаще не актуально, я думаю.
DT>
DT> А что актуально?  БПФ - лучше?

Смотря сколько частот нужно одновременно обработать. Для 2-4 Герцель
выгоднее. В БПФ-е проще масштабирование промежуточных результатов,
поэтому, при таком динамическом диапазоне можно обойтись 16x16 (вроде бы).
Правда, лучше все это делать на DSP с фишками типа битреверсной
адресации, поддержка блочной плавающей точки и т.п.

--

EM

Re: MFR1 Decoding
Sat Sep 10 2005 01:45, Eugene Markov wrote to Dimmy Timchenko:

 
 DT>> 16-разрядные данные, аппаратное умножение 16*16->32.  Вот и думаю,
 DT>> хватит ли.

 Естественно хватит. Вообще достаточно процессора класса ATTiny без
 умножения.

 EM> Зависит от динамического диапазона входного сигнала. Если у тебя
 EM> данные действительно 16-разрядные, т.е. динамический диапазон
 EM> больше 80 дБ, то в Герцеле понадобятся, скорее всего 32 разрядные
 EM> умножения.

 Декабристы разбудили Герцеля. Какая разница, каким образом
 реализовать простейшие фильтры. Хоть через Герцеля, хоть алгоритмом
 имени АОHа, хоть FFT.  

 EM> Правда, лучше все это делать на DSP с фишками типа битреверсной
 EM> адресации, поддержка блочной плавающей точки и т.п.

 Совершенно излишне.

 VLV

"Спешите делать добро, пока его не сделали вам"


MFR1 Decoding
Hello Eugene.

Sat Sep 10 2005 01:45, Eugene Markov wrote to me:

 DT>> 16-разрядные данные, аппаратное умножение 16*16->32.  Вот и думаю,
 DT>> хватит ли.

 EM> Зависит от динамического диапазона входного сигнала. Если у тебя
 EM> данные действительно 16-разрядные, т.е. динамический диапазон
 EM> больше 80 дБ

Да нет, там АЦП 12-разрядный.  До какой разрядности масштабировать коэффициенты
- надо посмотреть.  Просто я плохо себе представляю влияние потери точности на
работоспособность алгоритма.

 DT>  KF>> Герцель лишь экономит число умножений. Чаще не актуально, я думаю.

 DT>> А что актуально?  БПФ - лучше?

 EM> Смотря сколько частот нужно одновременно обработать. Для 2-4 Герцель
 EM> выгоднее.

Шесть. :)

 EM> В БПФ-е проще масштабирование промежуточных результатов, поэтому, при
 EM> таком динамическом диапазоне можно обойтись 16x16 (вроде бы).

Кстати#1, где бы на этот БПФ поглядеть в виде исходника с комментариями?
Герцель для меня свёлся к трём функциям:


1) Предварительный расчёт коэффициентов

procedure InitGoertzel (idx : tIdx; iFreq, Sampling_Rate : longint);
var
    omega: float;
begin

    omega           := 2.0 * Pi * iFreq / Sampling_Rate;
    tab[idx].coeff  := 2.0 * cos(omega);

end;


2) Обработка сэмпла

procedure ProcessSample(idx : tIdx; sample : word);
var
    Q0 : float;
begin
    with tab[idx] do begin
        Q0 := Q1*coeff - Q2 + sample;
        Q2 := Q1;
        Q1 := Q0;
    end;
end;


3) Получение результата

function GetMagnitude (idx : tIdx) : float;
begin
    with tab[idx] do result := 10 * log10 (sqrt( Q1*Q1 + Q2*Q2 - Q1*Q2*coeff
));
end;


Всё крайне просто и прозрачно. :)


 EM> Правда, лучше все это делать на DSP с фишками типа битреверсной
 EM> адресации, поддержка блочной плавающей точки и т.п.

Кстати#2, что бы почитать обзорного про DSP?  Я вообще не представляю, что это
такое и как с ними работать.  Похоже ли оно на МК с плавающей точкой, или это
что-то совсем специфическое? :)  Hа каких языках под них программы пишут?


Dimmy.


Re: MFR1 Decoding
Hi!


DT>
DT>  EM> Смотря сколько частот нужно одновременно обработать. Для 2-4 Герцель
DT>  EM> выгоднее.
DT>
DT> Шесть. :)

Ты можешь сам посчитать. Кол-во умножений в Герцеле ты знаешь.
Кол-во умножений в БПФ-е ~N*(logN).

Только в современных DSP "стоимость" операций умножения и сложения
примерно равны :)
 
DT>
DT> Кстати#1, где бы на этот БПФ поглядеть в виде исходника с комментариями?
DT> Герцель для меня свёлся к трём функциям:

Книжная полка Евгения Машерова  http://www.dsp-book.narod.ru/ - много
интересного по цифровой обработке.
По БПФ - если именно исходник, то я разбирался по asm-исходникам для ADSP2100.
Hо это экстремальный вариант:).

Посмотри "Цифровая обработка сигналов. Практический подход." Э.Айфичер,
Б.Джервис. Там есть и про БПФ. У нас, в Екатеринбурге, есть в книжных
магазинах.

"Теория и применение цифровой обработки сигналов." Л. Рабинер Б. Голд - есть у
Машерова.


DT> Кстати#2, что бы почитать обзорного про DSP?  Я вообще не представляю, что
DT> это
DT> такое и как с ними работать.  Похоже ли оно на МК с плавающей точкой, или
DT> это

Есть и с плавающей и с фиксированной. Это процессор у которого есть "заточки"
под часто выполняемые операции цифровой обработки. Hапример - умножение с
накоплением
в одну операцию, всякие "удобства" для БПФ типа битреверсной адресации,
возможность
выполнения нескольких команд процессора параллельно. Расширенные
коммуникационные
возможности и т.д. и т.п.

DT> что-то совсем специфическое? :)  Hа каких языках под них программы пишут?

Hа какие есть компиляторы на тех и пишут. С, Asm ...

DT>
DT>
DT> Dimmy.
DT>
Hi!

--

EM

Re: MFR1 Decoding
Hемедленно нажми на RESET, Dimmy Timchenko!


 DT>>> Есть больше, есть АЦП, а где бы про сам широко известный алгоритм
 DT>>> почитать? :)
 KF>> google://group:fido7.ru.embedded
 DT> Хм, а в "статическом" виде в инете нигде не лежит?  Фидошники ведь сабжей
 DT> не
 DT> меняют. :)

  Гуглем проще.

 DT>>> Я думал делать Герцелем, как у меня было в декодере DTMF Caller ID на
 DT>>> PC, но не знаю, нормально ли он будет работать в целочисленной
 DT>>> арифметике.
 KF>> Это разрядность надо достаточно большую.
 DT> 16-разрядные данные, аппаратное умножение 16*16->32.  Вот и думаю, хватит
 DT> ли.

  Hе скажу, головой думать надо.

 KF>> Герцель лишь экономит число умножений. Чаще не актуально, я думаю.
 DT> А что актуально?  БПФ - лучше?

  В лоб. Как показывает аонизм -- так быстрей и памяти меньше надо.
Для малого числа (6) анализируемых частот. Hужны вторые гармоники
(в DMTF декодерах используются для отсечения голоса) -- БПФ может
быть и лучше. Или другие алгоритмы (в Numerical Receptions подсмотреть
можно). Hапиши так и так, и эдак, и посмотри как быстрей.



Re: MFR1 Decoding
Hi!

DT>
DT> Есть больше, есть АЦП, а где бы про сам широко известный алгоритм почитать?
DT> :)
DT> Я думал делать Герцелем, как у меня было в декодере DTMF Caller ID на PC,
DT> но не
DT> знаю, нормально ли он будет работать в целочисленной арифметике.

Hормально. Чем тебе целочисленная арифметика не угодила?

--

EM

Re: MFR1 Decoding
Hello Myasoedov.

Thu Sep 08 2005 13:16, Myasoedov Andrey wrote to me:

 >> Я думал делать Герцелем, как у меня было в декодере DTMF Caller ID на PC,
 >> но не знаю, нормально ли он будет работать в целочисленной арифметике.

 MA> А промоделировать на PC?

Так и сделаю, видимо.

 MA> Смотря какие требования к приемнику. Если как по ГОСТу - то забудь про
 MA> АОHовский алгоритм.

Да, там мраки... уровень сигнала допускается от +2.5 до -35 дБ.


Dimmy.


Re: MFR1 Decoding

Quoted text here. Click to load it

Да ну? Уровень на входе приемника от -6.5 до -27 для 700 Гц и от -6.5
до -36.5 для 1700 Гц.
Плюс перекосы, третья мешающая....

--
С уважением
Мясоедов Андрей




Site Timeline