Автор |
Сообщение |
|
Дата: 16 Янв 2006 22:48:16
#
Подскажите где найти компоненты для Delphi с помощью которых можно декодировать FSK (со звуковой платы).
Можно и под другую среду. А если нет таких то хотябы как из стандартных компонентов это сделать.
|
|
Дата: 16 Янв 2006 23:05:38
#
Deeper
Самому писать надо и демодулятор и декодер, стандартные fsk демодуляторы будут 0 и 1 выдавать не так как тебе нужно, а в расчете 900 = 0 1500 = 1 или наоборот, в общем не прокатит.
|
Реклама Google
|
|
|
Дата: 19 Янв 2006 12:33:40
#
Ну ладно. А если самому писать. То с чего начинать?
|
|
Дата: 19 Янв 2006 14:29:16
#
Deeper
Хм... с чего начать? А чего вообще умеешь? Тут был товарищ, который просил ему рассказать, как на delphi быстренько сляпать DRM-декодер, а то что описание протокола DRM занимает около 20-25 листов он как то не подумал, так там еще и понимать надо чего написано. ;)
|
|
Дата: 19 Янв 2006 14:46:30 · Поправил: 0x25
#
Ну ладно. А если самому писать. То с чего начинать?
если на пальцах, то
перебираешь таблицу синуса
и функцией корреляции с текущим семплом.
частота freq. процедуры решает
|
|
Дата: 19 Янв 2006 15:27:09
#
0x25 Круто! Программист что ли? :)
|
|
Дата: 19 Янв 2006 18:21:59
#
Я делал тупо в лоб. Определял время между пиками сигнала соответвенно получал частоту сигнала потом замерял время присутвия такой частоты и получал 0 или 1. Но по-моему ето немного криво-вато.
А если начать с LabView.
|
|
Дата: 19 Янв 2006 20:18:46
#
Deeper
А если начать с LabView. Гм... а чего усышать хотите? Начинайте. ;)
|
|
Дата: 19 Янв 2006 20:29:38
#
>Ну ладно. А если самому писать. То с чего начинать?
1. Найти исходники по работе со звуковой платой
2. Найти исходники по FFT (для мониторинга)
3. Разобратся как работают DSP фильтра
4. Собрать все докучи и написать прогу :)
Удачи!
|
|
Дата: 19 Янв 2006 20:47:49
#
>Я делал тупо в лоб. Определял время между пиками сигнала соответвенно >получал частоту сигнала потом замерял время присутвия такой частоты и >получал 0 или 1. Но по-моему ето немного криво-вато.
Для FSK проще всего пропустить сигнал через DSP полосовые фильтра (FIR или IIR), детектировать, и сгладить все LPF фильтром. После этих действий получим изначальную последовательность 0 и 1...
|
|
Дата: 20 Янв 2006 09:54:37
#
Попробуем. У меня есть SignalLab и AudioLab от OpenWare. Попробую пропустить сигнал через FFT и IIR. Посмотрим что получится на диаграмме.
|
|
Дата: 20 Янв 2006 10:19:04
#
Можно ради интереса еще посмотреть исходники модуля Soundmodem от линуксового ядра. Он вроде поддерживал fsk, psk и afsk. Только в 2.6 его уже нету, надо брать ядро 2.4.
|
|
Дата: 20 Янв 2006 10:24:03
#
Тьфу ты, я все перепутал как обычно :)
FSK в модуле ядра нет, надо найти софтинку Soundmodem которая работает как клиентское приложение, вот там должно быть.
|
|
Дата: 20 Янв 2006 11:01:05
#
|
|
Дата: 20 Янв 2006 13:10:38
#
>Кажется несложно переделать для делфи.
Проще написать новое чем что-то переделывать :)
По DSP фильтрам можно почитать здесь, довольно доходчиво расписано:
HTTP://WWW.DSPGUIDE.COM/
По работе со звуковой картой, не помню ссылку, но инфа у меня сохранена
под именем: Delphi Programming Sound or Volume Level Meter.htm
если надо будет, думаю гугля найдет...
В FSK нет ничего сложного, толи дело PSK... |
|
Дата: 20 Янв 2006 22:02:40
#
FSK - это не сложно. Но у меня продолжительность сигнала одной частоты всего лишь 0,6 мс. А в Делфи нет таймера меньше 1мс. А все остальные таймеры работают неустойчиво.
|
|
Дата: 20 Янв 2006 22:37:38
#
>всего лишь 0,6 мс. А в Делфи нет таймера меньше 1мс. А все остальные ?>таймеры работают неустойчиво.
Зачем тебе таймер? Ты снимаешь сигнал с входа в буфер, пускай длиной 256 семплов. Один семпл - 1/11025 секунды или 1/22050, смортря какую дискретизацию поставишь. А далее время отсчитуй по семплам. Если у тебя 0.6 мс - это 7 семлов при 11025 или 13 при 22050, с учетом округления.
|
|
Дата: 21 Янв 2006 15:30:34
#
А вот до этого я не догадался! Интересно. Значит чтобы измерить частоту сигнала надо пройтись по буферу, определить пики и потом индексу пика в буфере можно определить сколько времени прошло до следующего пика.
Спасибо.
|
|
Дата: 21 Янв 2006 15:51:56
#
собственно я декодировал тот файл.
Вот что вышло:
01010000010100100011000000011101
01010000010100100011000000011101
01010000010100100011000000011101
01010000010100100011000000011101
01010000010100100011000000011101
01100111111101000001010101011111
01100111111101000001010101011111
01100111111101000001010101011111
01100111111101000001010101011111
01100111111101000001010101011111
01100111111101000001010101011111
00000100101001001010100010000010
что дальше с ним делать??
|
|
Дата: 21 Янв 2006 16:29:40
#
Я думаю что надо перевести как минимум в шеснадцатиричный вид!
|
|
Дата: 21 Янв 2006 16:34:34
#
А как на счет поделиться методом или исходником декодера.
Или это именно по тому методу как до сих пор говорилось?
Просто раскодировать это сложно за счет того, что мне не изветна исходная информация.
у меня же есть такой LARS передатчик и я примерно знаю что он передает.
|
|
Дата: 21 Янв 2006 16:37:48
#
И также интересно каким образом демодулирована посылка. В автомате или вручную?
|
|
Дата: 21 Янв 2006 18:05:11
#
Да вот конечно любопытно... А что он вообще передает?
Можно скажем чтобы был текст и звуковой файл передачи?
>И также интересно каким образом демодулирована посылка. В автомате или >вручную?
Ну в автомате наверное... Запустил файл винампом и через loopback
прога принимала этот сигнал. Можно в реальном времени, прямо с эфира принимать тоже. На экран выкидало вот такие пакеты по 32 бита, согласно описанию протокола.
Метод тот что давал, применялись BPF и LPF FIR фильтра (16 tap)
|
|
Дата: 21 Янв 2006 18:25:57
#
>А вот до этого я не догадался! Интересно. Значит чтобы измерить частоту >сигнала надо пройтись по буферу, определить пики и потом индексу пика в >буфере можно определить сколько времени прошло до следующего пика.
Частоту мерять не надо! Достаточно пропустить входной сигнал через 2 фильтра. Далее мы получим 2 буфера с фильрованым сигналом. Потом просто по семплам отнимаем модуля первого буфера от второго:
lpf[i+c_lpf]:=abs(acc)-abs(acc1);
У нас выйдет как бы такой сигнал, как после пропускания через диодный мост в БП. А далее просто сгладим ВЧ импульсы и получим почти четкий меандр. А далее уже дело техники...
А по семплам можно высчитать длину посылки только, т.е. время посылки 1500 или 900гц...
|
|
Дата: 21 Янв 2006 19:37:59
#
Ну в общем в данном случае надо считать именно время присутствия каждой частоты и согласно ему принимать решение 1 или 0. Так написано в инструкции.
Получается что и меанд не нужен.
А что за програ о которой вы упоминали?
|
|
Дата: 22 Янв 2006 09:39:50
#
Моя прога, делал когда-то для приема rtty. Вот переделал под lars...
|
|
Дата: 22 Янв 2006 09:57:28
#
>Получается что и меанд не нужен.
Я имел ввиду последовательность 0 и 1 до модулирования.
|
|
Дата: 23 Янв 2006 18:48:58
#
А можно такую прогу в Копилку для сравнения с результата с моим?
|
|
Дата: 23 Янв 2006 18:51:22
#
|
|
Дата: 23 Янв 2006 18:54:16
#
Спасибо. Просто она в другой ветке и я её потом заметил.
Прошу прощения.
|
Реклама Google |
|