Сеанс передачи видео звуком через воду с разоблачением

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

    В этой статье я расскажу, как передать видео (ну, почти видео) при помощи звука через воду, используя обычный ноутбук, кусок провода, два джека 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)
    Поделиться публикацией
    Никаких подозрительных скриптов, только релевантные баннеры. Не релевантные? Пиши на: adv@tmtm.ru с темой «Полундра»

    Зачем оно вам?
    Реклама
    Комментарии 83
    • +1

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

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

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

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

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

        • –2
          Зачем автору контакты, если он даже не использовал опыт своих коллег (судя по названию стенда с первой иллюстрации).
          • 0
            А расскажите подробнее, что вы имеете в виду?)
            • 0
              Я имел ввиду, что автор имеет отношение к ОкеанПрибор, в котором и проводились работы по передаче информации на большие расстояния. Поэтому не стоит мне минусовать…
              • +1
                Про такие эксперименты мы знаем, также как и знаем тех кто таким занимался, но передача данных на большие расстояния и подобные эксперименты с видео — вещи сильно разные.
                Скорость передачи данных при передаче на 100-200-300 километров будет столь низкой, что передача одного кадра видео несколько затянется. Это будут даже не минуты.
                • +2
                  Во-первых, технически не Океанприбор, а НИИ Гидросвязи. Во-вторых не просто эксперименты, а даже серийные системы. В-третьих люди, которые стоят за этим — наши учителя и мы их конечно же знаем. С чего вы взяли, что мы не использовали опыт? — мы учились у них. Как вы сравниваете шуточный метод передачи картинки (на 1 км) с системами, передающими цифровые данные на десятки и сотни километров? И чем вызван ваш негатив?
                  • +1
                    Извините, если вызвал именно негативные чувства, я просто хотел направить в нужное русло, а сама задумка превосходная.
          • +3
            Это шикарно! Теплота и ламповость идеи и реализации зашкаливают! Сразу вспомнился PixiScope Алексанра Золотова. www.warmplace.ru/soft/pixiscope/index_ru.php
            • +1
              Была шальная мысль добавить к методу пару тёплых ламповых усилителей, но мы решили воспользоваться современными средствами)))
            • +1
              На заднем плане последнего видео мокрый гидрокостюм?
              • 0
                Мимо )
                • +1
                  а еще — совиньон марочное и (пиво?) Байкал
                  • 0
                    Не, ну это просто слишком) это не на фоне
                • 0
                  А если сжать и добавить коды восстановления? Использовать несколько микрофонов?
                  • +1
                    Это всё не спасёт от полного замирания сигнала на некоторых частотах.
                    Хотя это похоже на современный WiFi, 3G где вместо одного широкого канала по сути делают очень много параллельных узкополосных — такие неприятности как узкополосное замирание таким каналам не страшны — просто информация по некоторым каналам будет передана повторно по другим. И помехи как правило не перекрывают весь частотный диапазон — всегда остаются некоторое количество каналов помех в которых нет. В итоге от наличия помех и препятствий страдает только скорость передачи данных а не отваливается канал полностью.
                    • 0
                      вы ещё забыли привести в пример ADSL — там и упреждающее кодирование есть (FEC).
                  • 0
                    Улучшите метод и можно запускать в производство камеры для рыболовов… :)
                    Сейчас используются проводные, что не удобно при ловле летом с берега.
                    • +2
                      Не совсем понимаю как это поможет. Камеру же всё равно надо как-то возвращать назад и, наверное, вы её будете привязывать.
                    • +1
                      Вопрос: а почему передача односторонняя? Почему бы не подстраиваться под специфику канала связи, передававая в обратную сторону коррекцию?

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

                      Далее: почему видео идёт несжатым потоком? Почему бы вместо видео не передавать цифровой сигнал? ADSL так делает же, и docsys.
                      • 0
                        Канал меняется очень быстро. Смысл есть отстраиваться от неравномерности АЧХ канала — что и сделано по пяти белым столбцам.

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

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

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

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

                              Компрессию как таковую использовать не получится (т.к. она чувствительна к искажениям), но хотя бы чистку картинки и удаление кусков, которые не меняются (после процессинга) — сделать можно пытаться. На выходе будет возможность передавать большее разрешение в ту же полосу. И, возможно, больше FPS'ов.
                              • 0
                                Можете считать что метод из статьи это как раз «цифра как придётся»). Нам к сожалению некогда заниматься развитием данного способа — поэтому мы и выложили исходники, в AForge (которая используется в демке) очень богатый набор для обработки изображений — если есть желание все из описанного вами можно реализовать.
                              • +3
                                Как-то сильно безапеляционно звучит «тут вам не радио», «цифра не подойдет». Вот про это действительно интересно было бы почитать — какие такие там такие особенности среды. Зря автор не привел характеристики канала — какая там полоса возможна, какого SNR стоит ожидать, чем там неоднородности среды или чем многолучевое распространение в воде хуже, чем в других средах.

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

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

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

                                    • 0
                                      Ок, с оказией напишем про канал. Мой коллега имел в виду что конкретно в этом методе цифра не поможет.
                                  • 0
                                    И кстати да, приведённые «видео» — это же буквально спектр сигнала из настоящей «подводы» (с вырезанными промежутками тишины между кадрами), и можно видеть как он меняется в реальном времени — все помехи, полосчатость из-за частотно-селективного замирания
                                    • 0
                                      Да, у меня именно поэтому сомнения и возникли — алгоритмически ведь можно побороть это даже в аналоге, добавив в схему обратную связь. Можно порезать спектр и склеить назад, избегая мертвых участков — и это только первое, что на ум приходит. Такая коррекция, кажись, в телефонных модемах применялась — в каких-то зюхелевских пропиретарных расширениях — если я ничего не перепутал.
                                      • 0
                                        Да, можно избегать задавленных полос, но обратная связь не сильно поможет — канал может меняться очень быстро — по факту даже ща время одного кадра, а если дистанция ощутима (скорость звука в среднем 1450 м/с) — обратная связь всегда будет опаздывать и будет бесполезной. Плюс в воде нельзя практически получить полный дуплекс, тем более для широкополосного сигнала.
                          • 0
                            Извините, немного не в тему. Давно появилась идея, всё никак не проверю. Можно ли аналоговое чёрно-белое видео записать-воспроизвести через звуковую карту? Насколько помню, частота строк в тв сигнале 15625 Гц, при хорошей частоте дискретизации должно быть вполне рабочее решение. Понятно что на проктике это никому не нужно, но всё-таки.
                            • +2
                              Это частота следования каждой новой строки, т.е. передается 15625 строк в секунду. Пиксельная частота (хоть это и не совсем корректное слово для аналогового) сигнала гораздо выше (единицы мегагерц). Соответственно, аудиокарты и близко не хватит.
                              • –1
                                На самом деле хватит. Я ссылку кидал на сайт warmplace.ru Там покопай и будет тебе щасте. Даже на патефонную пластинку можно записать это ваше видео.
                                • +1
                                  Для стандартного видеосигнала — строго не хватит.
                                  Есть еще SSTV — для него хватит, но это не то, что было в исходном вопросе.
                                  • +1
                                    В исходном вопросе смешаны в кучу кони и люди. Если отбросить шум про частоты, дискретизацит и прочее и посмотреть на суть вопроса — можно ли аналоговое ч-б видео записать-воспроизвести через аудиокарту, то ответ — да, можно, но не просто.
                            • +1
                              Странно, что никто не вспомнил про это: youtu.be/M9xMuPWAZW8?t=5m25s
                              • 0
                                Шикарно) странно что мне не попалось это раньше
                                • +1
                                  Один из примеров рождения почти одинаковых идей у разных людей)
                                • 0
                                  вроде приложение на телефоне было. Распечатываешь такой «звук» на компе, а потом проводишь телефоном (включенной камерой) и звук воспроизводится. Одно время нас это веселило на работе.
                                  • 0
                                    Phonopaper или как-то так. Тоже программа А. Золотова.
                                    • 0
                                      Не, это немного не то. Приложение просто рисует спектрограмму или читает ее или воспроизводит. В статье кадр изображения — спектр.
                                      • 0
                                        Интересно узнать грязные подробности — как называлась программа?
                                        • 0
                                          Я про Phonopaper. Как я понял из его описания
                                  • +1
                                    У меня вопрос по гидроакустике: вот аквалангист не может определить направление на звук, потому что скорость звука в воде другая и стандартный механизм, который есть у мозга не срабатывает. Такая идея: ловить сигнал микрофонами в ушах, и перекодировать звук, поменяв все разницы задержек с водных на воздушные. Как вы думаете, сработает?
                                    • +2
                                      Может и сработать, но точность определения будет сильно зависеть от ситуации и от самого водолаза))) Придётся каждого поверять и на лоб печать ставить)))) Вообще, для определения направления под водой (применительно к водолазам) есть разные решения. Сразу скажу своё мнение, что возлагать на водолаза задачи по определению направления на слух — негуманно и неудобно. У него под водой и других задач хватает и всё, что поддаётся автоматизации надо автоматизировать, в разумных пределах.
                                      Собственно, какие бывают варианты… Бывают варианты, когда на водолаза ставят два гидрофона и блок для обработки сигналов, определяющий примерное направление на источник звука и выдающий команды типа: справа, слева, по центру (а вот спереди или сзади уже не определит, да и дистанцию не скажет).
                                      Есть, например водолазный акустический компас нашей разработки, указывающий направление на приводной маяк (с точностью несколько градусов) и дистанцию до него (с точностью до метра), но там уже используются сложные сигналы и относительно сложная антенна.
                                      В самом минималистичном варианте, на водолаза можно повесить один гидрофон, но самому водолазу, для определения направления на приводной маяк, (или источник сигнала) придётся некоторое время поплавать кругами. Плюс понадобится довольно приличный MEMS IMU.
                                      Ну и можете прочитать статью про подводный GPS (в самом начале статьи есть ссылки).
                                    • 0

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

                                      • 0
                                        Как я упоминал в статье, чтобы просто попробовать в ведре/ванне/небольшом бассейне — ничего кроме часовых пьезопищалок и звуковой карты вам не нужно. Если хотите попередавать в пруду/озере — можно брать любой удобный усилитель типо TDA — на малые дистанции (ну, скажем метров 100) даже трансформатора не надо, но часовой пьезы уже может не хватить — придется искать кольцо. Самый простой вариант его загерметизировать — тщательно промазать герметиком (берите «жидкую резину» kimtek правда стоит под 900 р за флакон). На приемную сторону очень важен предусилитель с band-pass ну или хотя бы ФВЧ ибо обычно ниже 10 кГц в водоемах достаточно шумно. Для больших дистанций и глубин хоббийными силами вопрос качественно решить не получится.
                                        • 0
                                          Для больших дистанций и глубин надо бы в магнитострикционный излучатель. Не знаю, получится ли с магнитным клапаном от дизельного впрыска, надо бы конструкцию пошурудить
                                          • 0
                                            Магнитострикционные преобразователи на большие дальности и глубины не используют из-за слишком малой мощности, а применяют пьезокерамику, но там уже многое решает конструкция антенн и аналоговый тракт. Хоббистам это не под силу и не нужно. Если вы хотите поиграться в небольших водоемах вам вполне хватит почти любой TDA (ну, например TDA2030) подключенной напрямую к кольцу без трансформатора. Клапаны и прочие такие штуки позволят сделать излучатель на сотни и десятки герц, опять же для небольших водоемов это никто не применяет. И вообще на таких частотах никто не работает )
                                            • 0
                                              Вам о чёмнть говорит ВУС 472200? ;) я просто не соображу на пальцах, есть ли возможность создать разгруженный магнитострикционный излучатель из электромагнитного клапана (его мне проще всего достать, потому что лень возиться).
                                              • 0
                                                Никак нет тащмайор )
                                                По теме: В лучших домах филадельфии используют пьезокерамику — стоит она совсем не дорого и сейчас пьезоэлементы почти любые можно купить на али за мелкий прайс. С магнитострикционными излучателями практически не имел дела за их бесполезностью кроме как в измерительном бассейне что-нибудь поделать
                                                • 0
                                                  Даже если б я был с такими звёздами — был бы кап-три. Но я всего лишь лийтинант (с) Покровский и даже не страшный. Просто магнитострикционные излучатели нормально работают при внешних давлениях в десяток МПа. Можно, конечно, и пьезу такую запилить, да геморно
                                                • 0
                                                  Вполне говорит, но может тогда есть возможность где-нибудь отвинтить готовую антенну?)))) Про магнитострикционные излучатели с ходу ничего не скажем, ибо не используем. Есть подозрение, что стоит поискать в патентах. Наверняка кто-то думал в эту сторону и даже что-то патентовал.
                                                  • 0
                                                    От меня ближайшая такая ГА антенна — миль триста, да и то по прямой в т.ч. по суше :)
                                                    И, да, спасибо за наводку.
                                                    • 0
                                                      Тогда проблема. Разве что, могу магазин порекомендовать, где пьезокерамику можно купить. Да и не только её)
                                                      • 0
                                                        А и не откажусь, и даже спасибо заранее скажу.
                                                        • 0
                                                          www.quartz1.com
                                                          Ищите по запросу «пьезо». Сразу кину ложку известной субстанции в сторону магазина. Бывают случаи, что могут прислать не совсем то, что надо, и обмен на нужно затягивается почти на вечность. Потому, лучше покупать лично) А так, уникальное место, где можно разные интересные штуки добыть)))
                                                        • 0
                                                          Я заказываю в «Аврора-Элма». У них большой выбор элементов в каталоге. Но с физ. лицами не работают… И почему-то частота резонанса заказываемых мною элементов чаще всего +5%. Это укладывается в допуски, но всё же.
                                                          • 0
                                                            Аврора-Элма — одни из немногих производителей, осколок просто гигантского завода, разорённого в «святые 90-е»©™. Есть ещё НИИ Элпа, а больше, честно говоря, и не вспомню. Частота, скорее всего, обусловлена технологией изготовления на последних этапах производства и/или настройкой используемого измерительного оборудования. Например, на одном из заводов, производящих кварцевые генераторы, заказчики иногда приезжали со своими частотомерами или согласовывали в какую сторону должно быть отклонение по частоте. Оказывалось, что частотомер заказчиков и частотомер на заводе дают довольно разные показания. Хотя оба поверены и с кучей штампов)
                                                            Ну а на магазин я сослался для тех, кто хочет купить пьезокерамику для своих нужд и без больших затруднений.
                                                            • 0
                                                              А ещё есть аврора — бинииб, другой осколок огромного завода великой древней цивилизации) они тоже делают керамику. Зажигалки там для газовых плит и пищалки для пожарной сигнализации
                                                          • 0
                                                            Спасибо!
                                        • Спасибо за интересную статью. Мы занимаемся подобными исследованиями, а точнее разработкой ультразвукового дальномера. Хотелось бы узнать технические подробности вашей системы, а именно амплитуду сигнала на входе излучателя звука и на выходе приемника звука на определенном расстоянии (например 500 м). На данный момент нам удалось передать звук с помощью обычных пьезопластин на расстояние не более 1-2 м в воде. Соотношение амплитуд излучателя и приемника при этом было более чем 1000 раз.

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

                                                • 0
                                                  Не совсем понял какой системы вы хотите узнать технические подробности? Если вы про передачу «видео» в статье — так там просто два ноутбука и две пьезопищалки от часов с припаянными к ним двухметровыми проводами и обычными джеками 3.5. То, что передавалось на 1 км там был усилитель на какой-то TDA 70 Вт c странсформатором, подобранным из хлама. В качестве пьезоэлементов использовались кольца (на обеих сторонах)
                                                  • Ну вот хотелось бы узнать хотя бы среднюю амплитуду сигнала на выходе трансформатора. Фраза "подобранным из хлама", к сожалению, нам не слишком помогла. И совсем неплохо было бы, если бы Вы сообщили какая амплитуда генерилась при этом на входе звуковой карты. Спасибо.

                                                    • +1
                                                      Для передачи на 1-2 метра нам за глаза хватало китайских пьез, как на фото в статье. Амплитуда сигнала около вольта, если память не изменяет. Ну и на микрофонном входе надо будет поставить усиление микрофона и порулить громкостью.
                                                      На километр передавали используя усилитель на 70Вт (tda1562) и трансформатором ТН-36 т.к. он первый попался под руку. Собственно, собрали из того, что под руку попалось. А вот как его подключали уже не вспомню. Амплитуды уже подбираются исходя их параметров конкретной антенны (из её характеристики) и могут быть от десятков до нескольких сотен вольт.
                                                      Да, на часовую пьезу десятки вольт не подавайте) Её порвёт)
                                                      • Да, по поводу последнего согласен, рассыпается пьеза после попыток раскачать ее большей амплитудой) Но у нас в радиомагазинах что-то помощнее сложно достать. Какой толщины пьезоизлучатели Вы использовали в мощных версиях?

                                                    • 0
                                                      Для себя мы вывели безопасное напряжение — 200 Вольт на каждый миллиметр толщины пьезоэлемента. Если элемент 4 мм, следовательно, 800 Вольт — достаточное напряжение. НО! Необходимо излучатель согласовывать со средой — водой. Иначе, если просто пьезоэлемент опустить в воду, то лишь около 10% мощности отдаётся в виде акустических волн. Простым подбором защитного (просветляющего) покрытия с определённой толщиной (зависит от скорости звука в материале этого покрытия), можно довести отдаваемую мощность до 30%. Та же схема работает и на приём.

                                                      P.S. ключевая фраза для поиска: «отражение/прохождение ультразвука на границе двух сред»
                                                      • 0
                                                        Это вот все беды и изобретение велосипедов от того, что целые инженерные и конструкторские школы ушли во тьму с начала 90-х. Есть же книги, ГОСТы ну. Для разных условий работы разные составы керамики и формы преобразователей, от формы зависят и геометрия колебаний, резонансы, они меняются от давления/закрепления/трансформатора. Это же не кусок пирога ой-вей
                                                        • 0
                                                          Так в двух предложениях всё и не опишешь.
                                                          Было бы здорово, если бы вы посвятили статью именно излучателям. Там упомянем и форму, и составы керамики и прочие важные детали.
                                                • Спасибо за информацию.

                                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.