«Господь всемогущий! Кажется я только что убил мистера Мэя!… Но как бы то ни было, продолжим» (С) Дж. Кларксон

В этой статье я расскажу, как передать видео (ну, почти видео) при помощи звука через воду, используя обычный ноутбук, кусок провода, два джека 3.5 мм и две пьезо пищалки. А так же объясню почему и как это работает, расскажу забавную историю про то, как мы это придумали. А в качестве вишенки на торт, к статье прилагается проект на C# с исходниками, чтобы все, кому интересно, сами могли попробовать, ведь научное знание проверяемо, не так ли?

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

Подводный GPS с нуля за год
Подводный GPS: продолжение
Навигация под водой: пеленгуй — не пеленгуй, обречен ты на успех
К вопросу о влиянии цианобактерий на речевые функции президента

В общем, нужно усвоить одну простую истину: видео через воду на какие-либо значимые расстояния (ну хотя бы сотни метров) при помощи акустики передать нельзя. Дело в крайне узкой доступной полосе частот и сильной неравномерности затухания разных частот с расстоянием. Плюсом идет шум, многолучевое распространение, реверберация, изменение скорости звука в среде от плотности (то есть от давления, температуры и солености), эффект доплера, который кстати работает не совсем так, как в радиосвязи.

Предельные значения скоростей для самых современных гидроакустических модемов находятся очень далеко от того, чтобы ими можно было передавать видео. Насколько мне известно, рекорд принадлежит компании EvoLogics и составляет 62.5 kbps с заявленной максимальной дистанцией 300 метров. Более того, слова о невозможности передачи видео звуком через воду (на разумные дистанции) как раз и принадлежат Константину Георгиевичу, основателю и руководителю EvoLogics.

В бытность мою научным сотрудником НИИ Гидросвязи, тогда еще абсолютно несмышленым, мне хотелось великих свершений, побед на севере и на юге, большого разрыхления почв, (нет, мне и сейчас их хочется, но тогда я совсем был не отягощен багажом опыта и знаний и все казалось почти магическим и сказочным). В нашем тогдашнем коллективе (часть которого является моим настоящим) мы часто фантазировали на тему каких-нибудь нереальных гидроакустических проектов, рылись на свалке складе и пробовали использовать подряд всякие артефакты великой древней цивилизации, частью которой и является тот НИИ, попутно пытаясь постичь дао гидроакустической связи.

Погружение в те воспоминания вызывает во мне противоречивые чувства. Тогда казалось, ничто и никто не могло нас остановить: мы выбили у директора китайский фрезерный станок для макетирования изделий, собирали нормобарические корпуса из голландских водопроводных труб Van De Lande, производителю которых даже писали письмо на тему: “А не проверяли ли вы случайно, какое внешнее давление выдерживают ваши трубы?”. За собственные средства собирали макеты в контейнерах для завтраков и втайне от руководства самовольно выезжали на испытания, по коллегам и родственникам собирая ледобуры, санки, даже в складчину покупали китайскую ПВХ лодку в Ашане. Оглядываясь назад, я чувствую как сердце мое наполняется ужасом, ностальгией и трепетом.

Справедливости ради стоит отметить, что все это время мы получали огромную поддержку от некоторых наших руководителей – словом и делом, а в последствие все наши поделки легализовались в ОКР (имеется в виду Опытно-Конструкторская Работа а не Обсессивно-Компульсивное Расстройство), который даже был представлен на международном военно-морском салоне в 2013 году. Да-да, мы возили на салон наши водопроводные трубы, выкрашенные StDmitirev собственноручно в ярко-оранжевый! Вот они, в чемоданчиках:



Как-то раз мой друг и коллега StDmitirev в разгар беседы о спектрах и спекрограммах произнес сокраментальную фразу:

«А вот, было бы прикольно сделать такую систему: подводник сидит в подводной лодке и смотрит в монитор, на котором плавно движется спектрограмма, на которой как пальцем другого подводника по запотевшему окну другой подводной лодки написаны буквы и цифры».

Все посмеялись, поразвивали эту тему, вроде бы даже в тот же день нарисовали смайлик на спектрограмме и послушали как он звучит. Мне же страшно захотелось это привести к практическому виду.

Сейчас уже сложно вспомнить (дело было в далеком 2012 году). В моем распоряжении был рабочий компьютер с веб-камерой, разные артефакты-антенны и специальное “ведро гидроакустическое повышающее” (ВГ-1-П) с водой. Повышающим его назвали из-за того, что я всякому начальству показывал в нем работу разных макетов оборудования, что привело к моему повышению до старшего научного сотрудника.

Я не стеснен никакими обязательствами, сам метод давно опубликован в открытом доступе, а результаты многократно докладывались на конференциях.

Итак, рассказываю, как на духу – как передать видео через воду:

Как сформировать сигнал?


Мы помним, что идея основывается на «рисовании на спектрограмме», то есть, передаваемая картинка – это есть спектрограмма сигнала. Для преобразования сигнала из временной области в частотную и обратно удобно применять (ну, например) преобразование Фурье, точнее быстрое преобразование Фурье, для краткости называемое БПФ или, что более привычно FFT (Fast Fourier Transform).

Так как нам надо превратить картинку (кадр видео) в звуковой сигнал, который можно было бы излучить звуковой картой любого компьютера, то для формирования мы очевидно воспользуемся обратным преобразованием – IFFT. Мы будем излучать картинку по столбцам, а сигнал для одного столбца будет формироваться как на следующей схеме:


=
Допустим, что размер окна FFT у нас равен N и есть массив размером N. Если считать его спектром сигнала, то его нулевой элемент соответствует нулевой частоте (постоянка), а отсчет с индексом N-1 соответствует частоте дискретизации Sample Rate. Нужно выбрать такие размеры кадра изображения и размер окна FFT, чтобы с одной стороны все это хоть как-то было похоже на видео (передача одного кадра занимала бы разумное время), а с другой — используемая полоса частот была адекватной в принципе и адекватной доступному оборудованию. Теперь, если с какого-нибудь понравившегося отсчета мы (снизу вверх на схеме) впишем значения яркостей столбца картинки (Frame coloumn), а потом выполним обратное FFT, то на выходе получим сигнал, кодирующий один столбец изображения. Теперь нам остается таким же образом сформировать сигналы для остальных столбцов изображения и поочередно излучить их при помощи звуковой карты.

Стоит отметить что FFT на выходе дает массив комплексных значений, так вот наш сигнал – это вещественная часть. Само собой, получившийся сигнал по столбцам приводится к 16-ти битным знаковым целым (в таком виде обычно хранят цифровой звуковой сигнал) и нормализуется.

На самом деле в начале картинки я еще вписываю несколько столбцов максимальной яркости, в последствии, на стороне приемника это позволит определить АЧХ приемопередающего тракта (и канала передачи), которая будучи инвертирована и немного сглажена поможет нам улучшить принимаемый кадр.

На мой взгляд проще всего продемонстрировать устройство передатчика куском кода, вот он (метод Encode класса Encoder):

public double[] Encode(Bitmap source)
        {
            Bitmap frame;

            if (source.PixelFormat != System.Drawing.Imaging.PixelFormat.Format8bppIndexed)
                frame = Grayscale.CommonAlgorithms.RMY.Apply(source);
            else
                frame = source;

            if (!frame.Size.Equals(frameSize))
                frame = resizer.Apply(frame);       

            double[] samples = new double[fftSize * frameSize.Width];
            alglib.complex[] slice = new alglib.complex[fftSize];
            double maxSlice;
            int sampleIndex = 0;

            int colsCount = frameSize.Width;
            int startRow = startLine;
            int endRow = startRow + frameSize.Height;

            for (int x = 0; x < colsCount; x++)
            {
                for (int y = startRow; y < endRow; y++)
                    slice[y].x = (frame.GetPixel(x, frameSize.Height - (y - startRow) - 1).R / 255.0) * short.MaxValue;

                for (int y = 0; y < fftSize; y++)
                    slice[y].x *= randomizerMask[y];

                alglib.fftc1dinv(ref slice);

                maxSlice = double.MinValue;
                for (int y = 0; y < slice.Length; y++)
                    if (Math.Abs(slice[y].x) > maxSlice)
                        maxSlice = Math.Abs(slice[y].x);
                
                for (int i = 0; i < slice.Length; i++)
                {
                    samples[sampleIndex] = (short)Math.Round(slice[i].x * short.MaxValue / maxSlice);
                    sampleIndex++;
                }    
            }

            return samples;
        }

Код, естественно, ни на что не претендует и писался впопыхах чисто для демонстрации.

Так что на счет скорости передачи?


И как ее оценить? Нам удалось (со зла не со зла) около двух месяцев сохранять интригу и некоторые наши старшие товарищи и руководители в свободное время умудрялись исписывать кучу бумаги, прикидывая как могла получиться ТАКАЯ бешеная скорость передачи.

Например, если частота дискретизации 96 кГц, а размер окна FFT мы примем равным 512, на вход передатчику будем подавать картинки размером 120 х 120 пикселей (8 бит на пиксель), то время, которое потребуется для передачи одного кадра изображения составит:

120*512/96000 = 0.64 секунды

Битовая скорость вроде бы должна составить:

120х120*8 / 0.64 = 180 000 бит в секунду!

Сын директора в то время восторгался – да это же можно уже Интернет-протоколы использовать! Это же прорыв!

Как я покажу ниже, очень легко попасть в такое заблуждение. Что же тут не так? Ведь все так просто и изящно!

На самом же деле подобный расчет скорости неприменим к данному методу, так же, как например, он неприменим к аналоговому телевизионному сигналу, сколько там бит на пиксель? =) А как на счет простейшего детекторного приемника? =))

Описанный метод передачи по сути АНАЛОГОВЫЙ и понятия «бит» и «пиксель» к нему не применимы – можно в той же картинке, теоретически, взять не 8 бит на яркость пикселя а 16 и «скорость» автоматически возрастет двукратно.

Самое время показать самые первые результаты нашего «прорыва»:



Картинка выше была получена нами зимой 2012 года на реке Пичуга. Дистанция передачи составила 700 метров. Да, увы, мой дорогой читатель, это совсем не HD и даже не тянет на самый позорный CamRip. Не помню уже кто, но кто-то очень точно подметил, что все наши «видео» похожи на передачу сигналов о помощи с погибающей планеты.

Что примечательно, с натяжкой этот можно характеризовать как некое подобие OFDM – данные передаются на ортогональных поднесущих, что означает хорошую устойчивость к тональным и другим узкополосным помехам – в этом случае искажаются отдельные «строки» картинки. Импульсная же помеха – наоборот, искажает один или группу столбцов. Характерная «полосатость» картинок вызвана т.н. частотно-селективным замиранием вследствие многолучевого распространения, но об этом я расскажу как-нибудь в другой раз.

Как устроен приемник?


Сразу оговорюсь, что для того, чтобы попробовать этот метод в ведре или даже в небольшом бассейне, будет вполне достаточно двух часовых пьез (такие круглые) с припаянным к ним разъемом для звуковой карты. Для передатчика можно взять достаточно длинный (2-3-4-5 метров) и неэкранированный кабель, загерметизировав сам пьезоэлемент цапон-лаком или небольшим слоем герметика – на несколько раз точно хватит. Получившуюся гидроакустическую антенну (не, ну а что?) вставляем в разъем для наушников.

На фото внизу разные пьезы, оказавшиеся под рукой на момент написания статьи. Все показанные пьезоэлементы вполне годятся для «попробовать» и обычно есть в любом помойке радиомагазине. Пятак не обладает пьезоэффектом и присутствует на картинке для масштаба.



Для приемника лучше взять экранированный микрофонный кабель с таким же разъемом и замазанной герметиком или лаком пьезой на конце. Эту антенну вставляем в разъем для микрофона.

Для экспериментов на водоеме в качестве передатчика лучше взять какое-нибудь пьезокольцо и подавать на него усиленный (усилителя на TDA2030 с правильно намотанным трансформатором хватит на несколько сотен метров в хорошем водоеме или можно намотать ещё 5 витков) сигнал. Для приемника в этом случае тоже потребуется предусилитель и желательно полосовой фильтр. Если читателям будет интересно более подробно узнать про это – скажите об этом в комментариях и мы постараемся сделать статью, посвященную созданию усилителей мощности, предусилителей и антенн для гидроакустической связи.

Итак, вернемся к приемнику, точнее к его софтовой части


Самое главное в связи – это синхронизация и определение наличия полезного сигнала. В нашем примере детектирование производится по энергии в полосе: определяются места где она резко возрастает (начало кадра) и где резко спадает (конец кадра), с условием что от фронта до спада должно быть не меньше длительности кадра.

При всей своей простоте работает на удивление неплохо.

Данные со звуковой карты собираются по FFTSize отсчетов, над ними сразу выполняется FFT и в виде отдельных «слайсов» они хранятся, дожидаясь того момента, когда будут обработаны процедурой поиска, вот ее код (метод Search в классе Receiver):

private void Search()
        {
            int sliceIndex = 0;
            int frameWidth = encoder.FrameSize.Width;
            int minSlicesToSearch = Convert.ToInt32((frameWidth + 5) * 2);
            int sliceSize = encoder.FFTSize;
            double weight;
            int lastRisePosition = 0;
            int prevRisePosition = 0;
            
            while ((slices.Count > minSlicesToSearch) && (sliceIndex < slices.Count))
            {
                weight = 0.0;
                for (int i = 0; i < sliceSize; i++)
                    weight += Math.Abs(slices[sliceIndex][i]);

                double ratio = weight / previousWeight;

                if ((ratio >= risePeekRatio) && (sliceIndex - prevRisePosition > frameWidth))
                {
                    prevRisePosition = lastRisePosition;
                    lastRisePosition = sliceIndex;

                    if (lastRisePosition + (frameWidth + 5) < slices.Count)
                    {
                        double[][] samples = new double[frameWidth + 5][];
                        for (int i = 0; i < frameWidth + 5; i++)
                        {
                            samples[i] = new double[sliceSize];
                            Array.Copy(slices[lastRisePosition + i], samples[i], sliceSize);
                        }

                        slices.RemoveRange(0, sliceIndex);
                        lastRisePosition = 0;

                        if (FrameReceived != null)
                            FrameReceived(this, new FrameReceivedEventArgs(encoder.DecodeEx(samples, 5)));                            

                        lastRisePosition = sliceIndex;
                    }
                    
                }

                sliceIndex++;
                previousWeight = weight;
            }

            Interlocked.Decrement(ref isSearching);
        }

А вот кусок кода, который отвечает за декодирование картинки (Encoder.DecodeEx):

public Bitmap Decode(double[] samples, int measureCols)
        {
            int colCount = samples.Length / fftSize;
            if (colCount == frameSize.Width + measureCols)
            {
                int rowCount = frameSize.Height;
                Bitmap temp = new Bitmap(colCount, rowCount);

                double[] slice = new double[fftSize];
                alglib.complex[] sliceC = new alglib.complex[fftSize];
                int samplesCount = 0;
                byte component;

                int decodeStart = startLine;
                int decodeEnd = startLine + rowCount;

                double maxSlice;

                for (int x = 0; x < colCount; x++)
                {
                    for (int y = 0; y < fftSize; y++)
                    {
                        slice[y] = samples[samplesCount];
                        samplesCount++;
                    }

                    alglib.fftr1d(slice, out sliceC);

                    maxSlice = double.MinValue;
                    for (int y = decodeStart; y < decodeEnd; y++)
                        if (alglib.math.abscomplex(sliceC[y].x) > maxSlice)
                            maxSlice = alglib.math.abscomplex(sliceC[y].x);

                    int offset = temp.Height + decodeStart - 1;

                    for (int y = decodeStart; y < decodeEnd; y++)
                    {
                        component = (byte)(255.0 * alglib.math.abscomplex(sliceC[y].x) / maxSlice);
                        temp.SetPixel(x, offset - y, Color.FromArgb(component, component, component));
                    }
                }
                return temp;

            }
            else
            {
                throw new ApplicationException("Specified array length error");
            }
        }

А сейчас предлагаю посмотреть на результаты экспериментов по передаче «видео», проводившихся в разное время в разных водоемах.

Обе картинки (ниже) были записаны на международном военно-морском салоне в СПб в 2013 году на нашем (тогда) стенде через два ноутбука и аквариум.

Разобрать, что написано на бейдже не представляется возможным





А вот два «видео» записанных нами в одном из заливов Ладожского Озера в Карелии, они являются своего рода рекордом для данного метода (просто дальше мы никогда не пробовали и вряд ли будем) – первое из них получено на дистанции 500 а второе аж 1000 метров:

Передача видео через воду, дистанция 500 м (файл 8.7 мБ)



Поскольку «видео» писалось в реальном времени при помощи веб-камеры, то в кадр попадали разные странные вещи. Будет очень интересно, если кто-нибудь угадает и напишет в комментарии, что находится на заднем плане в последнем «видео» ).

В подтверждение того, что метод давным-давно опубликован — наша статья аж за 2013 год

Для захвата изображения с веб-камеры я использовал замечательную библиотеку AForge.

Функции работы с комплексными числами и FFT используются из прекрасной библиотеки AlgLib.

И, как я и обещал, весь проект на C# (VS2012) прилагается к статье в качестве материала для «домашней» работы. Для удобства отдельно лежит проект и бинарные файлы.
В демке предусмотрена возможность изменения (перемещения) занимаемой полосы частот а также гамма-коррекция выходного кадра (все можно менять в реальном времени).

P.S.


Я давно не брал в руки C# и очень сложно найти время в рабочем графике, поэтому заранее извиняюсь за сумбурность и поспешность кода.

P.P.S.


Кусок провода, два джека и две пьезы к статье не прикладываю – на всех не хватит.

Errata и Appendix


— В некоторых звуковых картах на входе есть ФНЧ который трагически обрезает все выше ~15 кГц (зачем???).

— По умолчанию демо-проект работает с частотой дискретизации 96 кГц, но не все современные звуковые карты ее поддерживают (Почему???). Если оборудование не может 96 кГц то нужно установить в настройках 48 кГц, если нет, то 44100 уж точно поддерживается везде, однако, длительность передачи одного кадра будет соответственно больше.

Вот список ноутбуков и звуковых карт, которые можно считать оборудованием юного гидроакустика:

  • Lenovo ideapad Y510P со звуком JBL
  • Asus N55S
  • Asus K501U
  • внешняя звуковая карта Sound Blaster X-Fi Surround 5.1 (model no. SB 1095)

Комментарии (65)


  1. San_tit
    06.12.2017 08:05

    Согласен, про некорректность подсчёта битрейта, но что мешает подобным образом передавать уже цифровой сигнал?
    П.С. широкополосной (очень) помехоустойчивой передачей (правда в радио) занимались мои коллеги, если интересно, могу дать контакты.


    1. StDmitirev
      06.12.2017 09:06
      +2

      Как говорит один мой коллега:«Передать-то можно что угодно, но вот принять — это проблема.» В воде или не получается большой скорости передачи, или, если получается, вероятность ошибки стремится к единице. Плюс доступная полоса частот намного меньше чем в радиоканале (буквально несколько десятков килогерц).


      1. San_tit
        06.12.2017 09:21
        +2

        Вероятность ошибки 1 — это отлично :-) куда хуже, когда 0.5 :-) про передачу, естественно они и принимали вполне успешно.


        1. AlekDikarev Автор
          06.12.2017 09:32

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


          1. San_tit
            06.12.2017 10:16
            +1

            Ни в коем случае не посягаю, но иногда случайные идеи из других областей приводят к прорыву. Тут, видимо, не тот случай, конечно :-)
            Удачи в исследованиях


    1. vin2809
      06.12.2017 11:58
      -1

      Зачем автору контакты, если он даже не использовал опыт своих коллег (судя по названию стенда с первой иллюстрации).


      1. AlekDikarev Автор
        06.12.2017 12:01

        А расскажите подробнее, что вы имеете в виду?)


        1. vin2809
          06.12.2017 12:08

          Я имел ввиду, что автор имеет отношение к ОкеанПрибор, в котором и проводились работы по передаче информации на большие расстояния. Поэтому не стоит мне минусовать…


          1. StDmitirev
            06.12.2017 12:16
            +1

            Про такие эксперименты мы знаем, также как и знаем тех кто таким занимался, но передача данных на большие расстояния и подобные эксперименты с видео — вещи сильно разные.
            Скорость передачи данных при передаче на 100-200-300 километров будет столь низкой, что передача одного кадра видео несколько затянется. Это будут даже не минуты.


          1. AlekDikarev Автор
            06.12.2017 12:28
            +2

            Во-первых, технически не Океанприбор, а НИИ Гидросвязи. Во-вторых не просто эксперименты, а даже серийные системы. В-третьих люди, которые стоят за этим — наши учителя и мы их конечно же знаем. С чего вы взяли, что мы не использовали опыт? — мы учились у них. Как вы сравниваете шуточный метод передачи картинки (на 1 км) с системами, передающими цифровые данные на десятки и сотни километров? И чем вызван ваш негатив?


            1. vin2809
              06.12.2017 12:36
              +1

              Извините, если вызвал именно негативные чувства, я просто хотел направить в нужное русло, а сама задумка превосходная.


  1. Bookvarenko
    06.12.2017 09:48

    Это шикарно! Теплота и ламповость идеи и реализации зашкаливают! Сразу вспомнился PixiScope Алексанра Золотова. www.warmplace.ru/soft/pixiscope/index_ru.php


    1. StDmitirev
      06.12.2017 18:37

      Была шальная мысль добавить к методу пару тёплых ламповых усилителей, но мы решили воспользоваться современными средствами)))


  1. Ig_B
    06.12.2017 10:11

    На заднем плане последнего видео мокрый гидрокостюм?


    1. AlekDikarev Автор
      06.12.2017 10:18

      Мимо )


    1. vassabi
      06.12.2017 10:34

      а еще — совиньон марочное и (пиво?) Байкал


      1. AlekDikarev Автор
        06.12.2017 11:49

        Не, ну это просто слишком) это не на фоне


  1. dimonoid
    06.12.2017 10:51

    А если сжать и добавить коды восстановления? Использовать несколько микрофонов?


    1. Alexeyslav
      06.12.2017 11:51
      +1

      Это всё не спасёт от полного замирания сигнала на некоторых частотах.
      Хотя это похоже на современный WiFi, 3G где вместо одного широкого канала по сути делают очень много параллельных узкополосных — такие неприятности как узкополосное замирание таким каналам не страшны — просто информация по некоторым каналам будет передана повторно по другим. И помехи как правило не перекрывают весь частотный диапазон — всегда остаются некоторое количество каналов помех в которых нет. В итоге от наличия помех и препятствий страдает только скорость передачи данных а не отваливается канал полностью.


      1. Bronto3
        07.12.2017 00:20

        вы ещё забыли привести в пример ADSL — там и упреждающее кодирование есть (FEC).


  1. JasterOne
    06.12.2017 11:59

    Улучшите метод и можно запускать в производство камеры для рыболовов… :)
    Сейчас используются проводные, что не удобно при ловле летом с берега.


    1. StDmitirev
      06.12.2017 12:37
      +1

      Не совсем понимаю как это поможет. Камеру же всё равно надо как-то возвращать назад и, наверное, вы её будете привязывать.


  1. amarao
    06.12.2017 14:54

    Вопрос: а почему передача односторонняя? Почему бы не подстраиваться под специфику канала связи, передававая в обратную сторону коррекцию?

    Например, раз в Н времени передавать две картинки (шахматку и инверсную шахматку). Получатель передаёт отправителю коррекцию (что надо поправить чтобы картинка была похожа на картинку). На выходе более точная картинка, компенсирующая искажения.

    Далее: почему видео идёт несжатым потоком? Почему бы вместо видео не передавать цифровой сигнал? ADSL так делает же, и docsys.


    1. AlekDikarev Автор
      06.12.2017 15:27

      Канал меняется очень быстро. Смысл есть отстраиваться от неравномерности АЧХ канала — что и сделано по пяти белым столбцам.

      Видео несжатым потоком потому что это аналоговая передача. Декодер — глаза и человеческий мозг. Если что-то сжать и так передавать то ничего работать не будет.

      На самом деле для передачи цифровой информации мы (и другие команды, которые этим занимаются) применяют другие методы.


      1. amarao
        06.12.2017 16:49

        Я хочу сказать, что при том, что мозг умеет «восстанавливать» картинку по искажению, любой формат с допустимыми потерями позволит передавать больше, по-прежнему перекладывая на мозг человека задачу восстановления искажений.

        Просто подумайте: если вы можете передавать сколько-то пикселов в секунду (утрируя, ч/б, т.е. один бит на пиксел) с 20% ошибками, то:
        а) либо можно пытаться ошибки восстановить (-40% полосы, как минимум), либо
        б) передавать повреждённые данные в таком виде, который допускает повреждения.

        Интуитивно я могу сказать, что если вы передали несжатое фиговое видео, то через тот же канал можно передать сжатое видео в лучшем качестве. Пусть даже и с таким же числом огрехов.


        1. StDmitirev
          06.12.2017 18:35
          +1

          Тут ситуация как с водолазной телефонией: или аналоговая передача со всеми плюсами и минусами (коих гораздо меньше чем при передаче видео), или цифровая передача, но на неё (в большинстве случаев) не хватит пропускной способности канала.
          Также и с видео. Цифровые методы тут не подойдут, ибо сразу потянут за собой помехоустойчивые кодирования и драматическое снижение скорости передачи.
          Можно, глянуть в сторону методов сжатия, что применяются в аналоговом видео, но не думаю, что они дадут существенное увеличение разрешения или качества. Хотя, если вдруг у кого возникнет желание поэкспериментировать и описать результаты, то с радостью почитаем о полученных результатах.


          1. amarao
            06.12.2017 19:28

            Вы мыслите в рамках парадигмы — «цифра, значит точно». А бывают цифровые каналы без «помехоустойчивого кодирования», т.е. цифры оно передаёт, но «как придётся». Дальше повех этого используется любой видеоформат, допускающий искажение. Основное, что хочется — это:
            а) использовать жестокий блюр для удаления мелочи
            б) все фичи современных видеокодеков (передача только изменений, движение и т.д.)

            Компрессию как таковую использовать не получится (т.к. она чувствительна к искажениям), но хотя бы чистку картинки и удаление кусков, которые не меняются (после процессинга) — сделать можно пытаться. На выходе будет возможность передавать большее разрешение в ту же полосу. И, возможно, больше FPS'ов.


            1. AlekDikarev Автор
              06.12.2017 20:30

              Можете считать что метод из статьи это как раз «цифра как придётся»). Нам к сожалению некогда заниматься развитием данного способа — поэтому мы и выложили исходники, в AForge (которая используется в демке) очень богатый набор для обработки изображений — если есть желание все из описанного вами можно реализовать.


          1. yetanotherman
            06.12.2017 21:07
            +1

            Как-то сильно безапеляционно звучит «тут вам не радио», «цифра не подойдет». Вот про это действительно интересно было бы почитать — какие такие там такие особенности среды. Зря автор не привел характеристики канала — какая там полоса возможна, какого SNR стоит ожидать, чем там неоднородности среды или чем многолучевое распространение в воде хуже, чем в других средах.

            А так читать про то, как к пьезе прикрутили FFT — оно конечно увлекательно, но всем и так понятно, как это сделать.

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


            1. AlekDikarev Автор
              06.12.2017 21:14

              Видите ли, это гиктаймс а не научный журнал да и согласитесь — невозможно в одной статье охватить такую широчайшую тему как гидроакустический канал. Многим было бы скучно читать формулы и графики, но если такая потребность есть, то в будущем мы будем иметь это в виду.

              «Цифра не подойдёт» — это ваши слова, во всех «взрослых» системах у нас широкополосная цифровая передача, а здесь просто забавная игрушка которую несложно повторить дома и модифицировать.


              1. yetanotherman
                06.12.2017 21:31

                Отнюдь не скучно. Буду очень рад, если будет такая статья.
                «Цифра не подойдет» — возможно, не понял вашего посыла.


                1. AlekDikarev Автор
                  06.12.2017 21:45

                  Ок, с оказией напишем про канал. Мой коллега имел в виду что конкретно в этом методе цифра не поможет.


            1. AlekDikarev Автор
              06.12.2017 21:18

              И кстати да, приведённые «видео» — это же буквально спектр сигнала из настоящей «подводы» (с вырезанными промежутками тишины между кадрами), и можно видеть как он меняется в реальном времени — все помехи, полосчатость из-за частотно-селективного замирания


              1. yetanotherman
                06.12.2017 21:36

                Да, у меня именно поэтому сомнения и возникли — алгоритмически ведь можно побороть это даже в аналоге, добавив в схему обратную связь. Можно порезать спектр и склеить назад, избегая мертвых участков — и это только первое, что на ум приходит. Такая коррекция, кажись, в телефонных модемах применялась — в каких-то зюхелевских пропиретарных расширениях — если я ничего не перепутал.


                1. AlekDikarev Автор
                  06.12.2017 21:49

                  Да, можно избегать задавленных полос, но обратная связь не сильно поможет — канал может меняться очень быстро — по факту даже ща время одного кадра, а если дистанция ощутима (скорость звука в среднем 1450 м/с) — обратная связь всегда будет опаздывать и будет бесполезной. Плюс в воде нельзя практически получить полный дуплекс, тем более для широкополосного сигнала.


  1. seri0shka
    06.12.2017 18:44
    -1

    Извините, немного не в тему. Давно появилась идея, всё никак не проверю. Можно ли аналоговое чёрно-белое видео записать-воспроизвести через звуковую карту? Насколько помню, частота строк в тв сигнале 15625 Гц, при хорошей частоте дискретизации должно быть вполне рабочее решение. Понятно что на проктике это никому не нужно, но всё-таки.


    1. Bluewolf
      06.12.2017 19:17
      +1

      Это частота следования каждой новой строки, т.е. передается 15625 строк в секунду. Пиксельная частота (хоть это и не совсем корректное слово для аналогового) сигнала гораздо выше (единицы мегагерц). Соответственно, аудиокарты и близко не хватит.


      1. Bookvarenko
        06.12.2017 19:37
        -1

        На самом деле хватит. Я ссылку кидал на сайт warmplace.ru Там покопай и будет тебе щасте. Даже на патефонную пластинку можно записать это ваше видео.


        1. Bluewolf
          07.12.2017 10:43

          Для стандартного видеосигнала — строго не хватит.
          Есть еще SSTV — для него хватит, но это не то, что было в исходном вопросе.


          1. Bookvarenko
            08.12.2017 09:55

            В исходном вопросе смешаны в кучу кони и люди. Если отбросить шум про частоты, дискретизацит и прочее и посмотреть на суть вопроса — можно ли аналоговое ч-б видео записать-воспроизвести через аудиокарту, то ответ — да, можно, но не просто.


  1. port443
    06.12.2017 20:49

    Странно, что никто не вспомнил про это: youtu.be/M9xMuPWAZW8?t=5m25s


    1. AlekDikarev Автор
      06.12.2017 20:58

      Шикарно) странно что мне не попалось это раньше


      1. StDmitirev
        06.12.2017 22:32

        Один из примеров рождения почти одинаковых идей у разных людей)


    1. foxrus87
      08.12.2017 11:26

      вроде приложение на телефоне было. Распечатываешь такой «звук» на компе, а потом проводишь телефоном (включенной камерой) и звук воспроизводится. Одно время нас это веселило на работе.


      1. Bookvarenko
        08.12.2017 12:26

        Phonopaper или как-то так. Тоже программа А. Золотова.


      1. AlekDikarev Автор
        08.12.2017 12:57

        Не, это немного не то. Приложение просто рисует спектрограмму или читает ее или воспроизводит. В статье кадр изображения — спектр.


        1. Bookvarenko
          08.12.2017 15:09

          Интересно узнать грязные подробности — как называлась программа?


          1. AlekDikarev Автор
            08.12.2017 15:23

            Я про Phonopaper. Как я понял из его описания


  1. leshabirukov
    06.12.2017 23:06

    У меня вопрос по гидроакустике: вот аквалангист не может определить направление на звук, потому что скорость звука в воде другая и стандартный механизм, который есть у мозга не срабатывает. Такая идея: ловить сигнал микрофонами в ушах, и перекодировать звук, поменяв все разницы задержек с водных на воздушные. Как вы думаете, сработает?


    1. StDmitirev
      06.12.2017 23:39
      +1

      Может и сработать, но точность определения будет сильно зависеть от ситуации и от самого водолаза))) Придётся каждого поверять и на лоб печать ставить)))) Вообще, для определения направления под водой (применительно к водолазам) есть разные решения. Сразу скажу своё мнение, что возлагать на водолаза задачи по определению направления на слух — негуманно и неудобно. У него под водой и других задач хватает и всё, что поддаётся автоматизации надо автоматизировать, в разумных пределах.
      Собственно, какие бывают варианты… Бывают варианты, когда на водолаза ставят два гидрофона и блок для обработки сигналов, определяющий примерное направление на источник звука и выдающий команды типа: справа, слева, по центру (а вот спереди или сзади уже не определит, да и дистанцию не скажет).
      Есть, например водолазный акустический компас нашей разработки, указывающий направление на приводной маяк (с точностью несколько градусов) и дистанцию до него (с точностью до метра), но там уже используются сложные сигналы и относительно сложная антенна.
      В самом минималистичном варианте, на водолаза можно повесить один гидрофон, но самому водолазу, для определения направления на приводной маяк, (или источник сигнала) придётся некоторое время поплавать кругами. Плюс понадобится довольно приличный MEMS IMU.
      Ну и можете прочитать статью про подводный GPS (в самом начале статьи есть ссылки).


  1. MShekunov
    08.12.2017 11:26

    Интересует железо!!! Усилитель мощности, приёмная часть и т.д. А особенно, как согласовывали пьезоэлемент со средой!?


    1. AlekDikarev Автор
      08.12.2017 11:33

      Как я упоминал в статье, чтобы просто попробовать в ведре/ванне/небольшом бассейне — ничего кроме часовых пьезопищалок и звуковой карты вам не нужно. Если хотите попередавать в пруду/озере — можно брать любой удобный усилитель типо TDA — на малые дистанции (ну, скажем метров 100) даже трансформатора не надо, но часовой пьезы уже может не хватить — придется искать кольцо. Самый простой вариант его загерметизировать — тщательно промазать герметиком (берите «жидкую резину» kimtek правда стоит под 900 р за флакон). На приемную сторону очень важен предусилитель с band-pass ну или хотя бы ФВЧ ибо обычно ниже 10 кГц в водоемах достаточно шумно. Для больших дистанций и глубин хоббийными силами вопрос качественно решить не получится.


      1. dragonnur
        08.12.2017 14:38

        Для больших дистанций и глубин надо бы в магнитострикционный излучатель. Не знаю, получится ли с магнитным клапаном от дизельного впрыска, надо бы конструкцию пошурудить


        1. AlekDikarev Автор
          08.12.2017 14:57

          Магнитострикционные преобразователи на большие дальности и глубины не используют из-за слишком малой мощности, а применяют пьезокерамику, но там уже многое решает конструкция антенн и аналоговый тракт. Хоббистам это не под силу и не нужно. Если вы хотите поиграться в небольших водоемах вам вполне хватит почти любой TDA (ну, например TDA2030) подключенной напрямую к кольцу без трансформатора. Клапаны и прочие такие штуки позволят сделать излучатель на сотни и десятки герц, опять же для небольших водоемов это никто не применяет. И вообще на таких частотах никто не работает )


          1. dragonnur
            08.12.2017 15:10

            Вам о чёмнть говорит ВУС 472200? ;) я просто не соображу на пальцах, есть ли возможность создать разгруженный магнитострикционный излучатель из электромагнитного клапана (его мне проще всего достать, потому что лень возиться).


            1. AlekDikarev Автор
              08.12.2017 15:28

              Никак нет тащмайор )
              По теме: В лучших домах филадельфии используют пьезокерамику — стоит она совсем не дорого и сейчас пьезоэлементы почти любые можно купить на али за мелкий прайс. С магнитострикционными излучателями практически не имел дела за их бесполезностью кроме как в измерительном бассейне что-нибудь поделать


              1. dragonnur
                08.12.2017 15:34

                Даже если б я был с такими звёздами — был бы кап-три. Но я всего лишь лийтинант (с) Покровский и даже не страшный. Просто магнитострикционные излучатели нормально работают при внешних давлениях в десяток МПа. Можно, конечно, и пьезу такую запилить, да геморно


            1. StDmitirev
              08.12.2017 15:34

              Вполне говорит, но может тогда есть возможность где-нибудь отвинтить готовую антенну?)))) Про магнитострикционные излучатели с ходу ничего не скажем, ибо не используем. Есть подозрение, что стоит поискать в патентах. Наверняка кто-то думал в эту сторону и даже что-то патентовал.


              1. dragonnur
                08.12.2017 15:37

                От меня ближайшая такая ГА антенна — миль триста, да и то по прямой в т.ч. по суше :)
                И, да, спасибо за наводку.


                1. StDmitirev
                  08.12.2017 15:43

                  Тогда проблема. Разве что, могу магазин порекомендовать, где пьезокерамику можно купить. Да и не только её)


                  1. dragonnur
                    09.12.2017 11:51

                    А и не откажусь, и даже спасибо заранее скажу.


                    1. StDmitirev
                      09.12.2017 12:59

                      www.quartz1.com
                      Ищите по запросу «пьезо». Сразу кину ложку известной субстанции в сторону магазина. Бывают случаи, что могут прислать не совсем то, что надо, и обмен на нужно затягивается почти на вечность. Потому, лучше покупать лично) А так, уникальное место, где можно разные интересные штуки добыть)))


                    1. MShekunov
                      09.12.2017 18:29

                      Я заказываю в «Аврора-Элма». У них большой выбор элементов в каталоге. Но с физ. лицами не работают… И почему-то частота резонанса заказываемых мною элементов чаще всего +5%. Это укладывается в допуски, но всё же.


                      1. StDmitirev
                        09.12.2017 18:46

                        Аврора-Элма — одни из немногих производителей, осколок просто гигантского завода, разорённого в «святые 90-е»©™. Есть ещё НИИ Элпа, а больше, честно говоря, и не вспомню. Частота, скорее всего, обусловлена технологией изготовления на последних этапах производства и/или настройкой используемого измерительного оборудования. Например, на одном из заводов, производящих кварцевые генераторы, заказчики иногда приезжали со своими частотомерами или согласовывали в какую сторону должно быть отклонение по частоте. Оказывалось, что частотомер заказчиков и частотомер на заводе дают довольно разные показания. Хотя оба поверены и с кучей штампов)
                        Ну а на магазин я сослался для тех, кто хочет купить пьезокерамику для своих нужд и без больших затруднений.


                        1. AlekDikarev Автор
                          09.12.2017 20:35

                          А ещё есть аврора — бинииб, другой осколок огромного завода великой древней цивилизации) они тоже делают керамику. Зажигалки там для газовых плит и пищалки для пожарной сигнализации