осилил 2 курса
библиотека имеет функции бпф и фильтров, есть генераторы и генератор огибающей
короче можно синтезировать звуки, делать анализатор спектра и все такое
с фильтрами пока ладно, сейчас у меня вопрос - как восстанавливать биты из аудиопотока?
почитал это
http://www.softelectro.ru/interface.html
вот там есть 3 периода 2200гц обозначенный как захват линии
а почему 3? это как-то стандартизировано?
есть еще такая штука hdlc
High-Level Data Link Control (HDLC) — бит-ориентированный[1] протокол канального уровня сетевой модели OSI, разработанный ISO.
https://ru.wikipedia.org/wiki/HDLC
как вообще происходит восстановление бит из 2х частот?
что такое nrzi? я так понял, что это посылка 01111110 3 раза, чтобы получить определенный рисунок
еще бывает 10101010, типа изменение состояния хорошо отлавливается петлей захвата частотного детектора
например в спектруме был пилотон в 1.5 секунды и система подготавливалась к приему
еще вопрос
хдлс - это общее название что ли? например у меня есть софт для пакетного радио и там протокол ах25
этот ах25 и есть конкретная реализация, когда там каждый байт расписан?
или хдлц это общий протокол и в нем сидит ах25?
я в исходниках смотрел, но там нихера не понятно, т.к. еще есть структуры для pocsag и других пейджинговых систем для германии
https://github.com/csete/qtmm/blob/mast ... /cafsk12.h
вот кому интересно
софт декодирует только афск1200
например вот S57LN-0 to APRS-0 UI^ PID=F0
=4603.63N/01431.26E-Op. Andrej
я так понял - это поля протокола апрс, который базируется на ах25
у меня есть еще образец звука под названием "пакет" и там вот что
KD2BHC-0 to CQ-0 via TELEM-0 UI PID=F0
P4C,727,0,0,0,
т.е. ах25 позволяет раскодировать поток бит в буквы + там есть еще контрольная сумма
выбрал я этот протокол, т.к. есть готовый софт для декодирования, чтобы тестировать
---
так вот, вернемся к вопросу о получении 1 и 0 из звука
допустим вот кусок из того примера

как разграничить визуально 1 и 0?
преамбула длинная совсем, 500мс
а как компутер понимает это? оно как-то завязано на samplerate?
upd
зашел еще спросить
если звуковой поток имеет формат 16бит 44100гц, то это значит, что на один семпл получается 2 байта?
пиндос в видосе так говорит, когда поясняет кусок кода генератора
я использую библиотеку его naudio
Код: Выделить всё
public override int Read(byte[] buffer, int offset, int count)
{
int samples = count / 2;
for (int i = 0; i < samples; i++)
{
double sine = amplitude * Math.Sin(Math.PI * 2 * frequency * time);
time += 1.0 / 44100;
short truncated = (short)Math.Round(sine * (Math.Pow(2, 15) - 1));
buffer[i * 2] = (byte)(truncated & 0x00ff);
buffer[i * 2 + 1] = (byte)((truncated & 0xff00) >> 8);
}
return count;
}
метод Read надо переписать, т.к. он базовый в классе и наследуется public class WaveTone : WaveStream
WaveTone это мой класс генератора синуса с параметрами частоты и амплитуды
только я так и не понял, что значит int count
и насколько я понимаю - Read это callback метод и те параметры в скобках не входные, а выходные что ли, только выходят или точнее входят через жопу?
согласно матану вот так генерится расово правильный синус
double sine = amplitude * Math.Sin(Math.PI * 2 * frequency * time);
только почему-то амплитуда у него максимум это 1.0
в чем она измеряется?
ведь по идее цап понимает только положительные числа от 0 до 65535 при 16 битном разрешении
time += 1.0 / 44100;
вот тут мы вычисляем время в секундах
я долго тупил над тем, что такое 1.0, потом допер, что период T = 1/f
дальше начинается содомия
short truncated = (short)Math.Round(sine * (Math.Pow(2, 15) - 1));
buffer[i * 2] = (byte)(truncated & 0x00ff);
buffer[i * 2 + 1] = (byte)((truncated & 0xff00) >>

;
буфер почему-то 8 бит и приходится пихать все это вот таким макаром
---
в результате я так и не понял, что в буфере получается? в режиме отладки я там вижу целые числа, но они типа не являются синусоидой, т.е. если их извлечь прямо в ексель, то синуса не будет?
---
если я правильно понимаю, то скорость передачи в битах за секунду
т.е. лог1 это 1200гц должна звучать какое-то время
лог0 это 2200гц и запускается по дефолту как несущая
каким макаром делается длительность 1 и 0 при передече на 1200бод
для примера число 01111110 и за ним еще идет 01111110
http://webcache.googleusercontent.com/s ... n&&ct=clnk
вот тут хороший рисунок есть, только загвозка в том, что я не знаю, как сделать этот переключатель и чтобы он выдерживал точное время
естественно это не будет в реальном времени делаться, будет запись в буфер
я хотел бы сделать 1 семпл 2200гц и 1 семпл 1200, типа 2 буфера
и потом бы я засовывал в 3й буфер нужные семплы частот 8 раз, по длине байта