В первом приближении надо загрузить wav или mp3 файл с музыкой в Excel, провести над загруженными данными Digital Signal Processing (DSP) или Цифровую Обработку Сигнала (ЦОС) по определенному алгоритму на Visual Basic for Application (VBA), сохранить результат в wav файл и прослушать его.

Алгоритм добавления четной гармоники в данном случае представляет собой возведение в квадрат исходных отсчетов сигнала, смещенных на некоторую постоянную величину, и последующего удаления постоянной составляющей.

Парабола аппроксимирует ВАХ триода
Парабола аппроксимирует ВАХ триода

Выгрузить данные в текстовый файл csv для использования с Excel из исходных звуковых файлов формата wav и mp3 возможно с помощью программы Audacity. Это многоплатформенный аудиоредактор звуковых файлов, ориентированный на работу с несколькими дорожками. Программа была выпущена и распространяется на условиях GNU General Public License. Работает под управлением операционных систем: Windows, Linux, macOS, FreeBSD.

Excel и Audacity
Excel и Audacity

Генерируем синусоидальный сигнал в Audacity (можно сгенерировать в Excel, но мы проверяем работоспособность всей предложенной цепочки действий).

Sin in Audacity
Sin in Audacity

Экспортируем и загружаем в Excel и обрабатываем F(x) = (sin(x)+1)*(sin(x)+1) для получения чётной ("ламповой"?) гармоники.

Входной sin и после обработки
Входной sin и после обработки

Проверяем, появилась ли вторая гармоника после обработки.

Вторая гармоника после обработки
Вторая гармоника после обработки

Проделаем операции по загрузке, обработке и выгрузке с реальным музыкальным сигналом (гитара).

Исходный музыкальный сигнал (гитара) и его спектр
Исходный музыкальный сигнал (гитара) и его спектр

Загружаем исходный музыкальный сигнал в Excel и обрабатываем для обогащения гармониками.

Исходный сигнал до и после обработки в Excel (в csv https://disk.yandex.ru/d/ynhW-4bQc8TCDg)
Исходный сигнал до и после обработки в Excel (в csv https://disk.yandex.ru/d/ynhW-4bQc8TCDg)

Экспортируем из Excel в csv, импортируем в Audacity, прослушиваем и сравниваем.

Сохранено на Яндекс.Диск WAV файл  https://disk.yandex.ru/d/pIueCZFySiL2Aw
Сохранено на Яндекс.Диск WAV файл https://disk.yandex.ru/d/pIueCZFySiL2Aw

Визуально разница в "осцилограммах" хорошо заметна, а вот на слух отличия не так очевидны. Мне, на мой слух, кажется, что обработанный звук немного ярче и удары по струнам немного более отчетливы. Конечно, хотелось бы более яркого и впечатляющего эффекта. Возможно надо использовать более высокие степени или дробные степени вместо возведения в квадрат или экспоненту при обработке или попробовать несимметрично смещенный arctg(x), или попробовать многоканальную систему наподобие Aphex Aural Exciter. Жду предложений в комментариях. >>Подписывайтесь на мой Хабр-профиль.

P.S. Модернизировал алгоритм по результатам обсуждений в комментариях, применил разделение на две частотные полосы, как сделано в Aphex Aural Exciter. Новый звук имеет гораздо более отчетливый эффект увеличения яркости. https://disk.yandex.ru/d/y18kiOIMN7CLCA

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


  1. voldemar_d
    07.07.2023 06:35
    +2

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

    А можно узнать, почему такая цепочка была выбрана? Почему не написать программу, которая и на входе берет WAV или mp3, обрабатывает и выдает тоже WAV или mp3? Заодно можно сделать кнопку "Play" и прямо на ходу слушать результат обработки. А еще можно сделать кнопку "Bypass", чтобы можно было прямо во время воспроизведения включать/выключать обработку, разницу можно будет сразу оценить.

    попробовать многоканальную систему наподобие Aphex Aural Exciter

    Зачем здесь многоканальность? И как Вы собираетесь попробовать эту систему в предложенной цепочке действий?


    1. Oksenija Автор
      07.07.2023 06:35
      +3

      написать можно и их много уже написано, но я не нашел именно с возведением в квадрат. Кроме того декодинг мп3 да и wav не такая простая задача, надо готовые либы использовать, и так как использовался корпоративный комп под лимитированным юзером (в ночные смены сисадмином когда все тихо) возникли бы проблемы с лицензиями и безопасностью). А може и не возникли - но надо разбираться.

      Плюсы - Эксель уже был установлен, легальный. Аудасити - легальный, фрии, опен сорс, админских прав при установке не требует.

      Эксель - не требует компиляции, не нужна Visual Studio, скорость обработки сравнительно хорошая, не С++ конечно, но норм. Работает норм под лимитированным юзером на корп. ПК.

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

      ---

      Зачем здесь многоканальность? И как Вы собираетесь попробовать эту систему в предложенной цепочке действий?

      В Аурал Эксайтер - звук делится на НЧ, СЧ, ВЧ - по всем трем каналам применяются разные нелинейные обработки, и фильтры разные. Все это можно реализовать в Эксель - ФНЧ, ФСЧ, ФВЧ, разные виды нелинейностей, пост фильтрацию. В целом это экспериментальная методология и цепочка для быстрой проверки множества и возможно сложных математических алгоритмов возможно с визуализацией промежуточных результатов


      1. voldemar_d
        07.07.2023 06:35
        +1

        Тогда это не многоканальность, а многополосность. В целом идея понятна, просто никогда раньше не видел, чтобы на VBA делали DSP. Можно, конечно. Просто я больше 20 лет назад на c++ всякие фильтры для звука писал, и приходилось стараться, чтобы на каком-нибудь Pentium 100 это в реальном времени успевало звук обрабатывать.


        1. Oksenija Автор
          07.07.2023 06:35

          БПФ скажем 256 точек тянуло?


          1. voldemar_d
            07.07.2023 06:35
            +2

            И куда больше тянуло. FIR equalizer на 10000 точек в стерео, например.


  1. AndroidKotlin
    07.07.2023 06:35
    +2

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


  1. Trancevocal
    07.07.2023 06:35

    разница в звуке есть, некоторый подъем средних частот. Но это малозаметное явление, в реальных ламповых усилителях эффект реально ощущается намного сильнее


  1. PythonProgramer
    07.07.2023 06:35
    +1

    Конечно Python подойдет для таких целей лучше, но и Excel - интересное нестандартное применение. Предлагаю попробовать логарифм о смещением и фильтр низких частот после.


    1. Oksenija Автор
      07.07.2023 06:35

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


  1. sci_nov
    07.07.2023 06:35
    +1

    А почему Вы прибавили единицу к синусам перед возведением в квадрат?


    1. Oksenija Автор
      07.07.2023 06:35

      это имитация так называемого сеточного смещения на лампе. 1 не обязательно, в данном случае была выбрана 1 чтобы сигнал в сумме с 1 не становился отрицательным, для избежания "заворачивания" его вверх - после возведения в квадрат - такого эффекта в ламповых усилителях нет и он неприятно воспринимается на слух как жужжание. После возведения в квадрат вычисляется среднее или постоянная составляющая на радиолюбительском жаргоне и вычитается из сигнала. Потому на спектре нет пика в 0 Гц. В ламповых усилителях также постоянная составляющая не проходит через трасформатор на динамики.


      1. sci_nov
        07.07.2023 06:35

        получается, чтобы сохранить исходную гармонику.


        1. Oksenija Автор
          07.07.2023 06:35
          +3

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


          1. sci_nov
            07.07.2023 06:35

            Тогда, возможно, было бы правдоподобнее использовать уравнение i = k1 * u + k2 * u*u, где k2 << k1, u = A*sin(...) + A.


            1. Oksenija Автор
              07.07.2023 06:35

              ну да близко... (sin(x)+1)**2=sin(x)**2 + 2*sin(x) +1 = (1-cos(2*x))/2 + 2*sin(x)+1 =

              0.5-0.5*cos(2*x)+2*sin(x)+1

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


              1. sci_nov
                07.07.2023 06:35

                Тогда вопрос зачем всё это делается :)


                1. Oksenija Автор
                  07.07.2023 06:35
                  +1

                  логика такая, есть лампы, ои дают классный звук, попробуем в первом приближении смоделировать лампу, известно - лампы генерят нелинейные искаджения, небольшие, в основном считается что четные гармоники, ВАХ лампы в некоторых пределах хорошо аппрокимируется x**2 - попробуем это сделать и послушаем что получилось. А ка вы предлагаете?

                  Ваша формула на реальных сигнала будет

                  i = k1 * u + k2 * u*u, -> k1*(n1*sin(b1*x) + a1 + k3*sin(b2*x)+a2 +..) + k2*((n1*sin(b1*x) + a1 + k3*sin(b2*x)+a2 +..)*((n1*sin(b1*x) + a1 + k3*sin(b2*x)+a2 +..)

                  моя же формула (A1 + A2)**2 = A1**2 + 2*A1*A2 + A2**2 где A2 - реальный сигнал как сумма синусов с разной частотой и амплитудой. Если константа А1 много больше A2 то А2**2 можно пренебречь и останется

                  конст + сам сигнал * конст

                  константу можн вычесть и получим сам сигнал без искажений.

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


                  1. sci_nov
                    07.07.2023 06:35

                    Как сделано у Вас - это определяет фиксированный и довольно большой уровень второй гармоники. Лампы, вероятно, дают меньший уровень, иначе применение таких усилителей (УМЗЧ) было бы весьма специфическим.

                    Я сомневаюсь, что ВАХ - редуцированная парабола y = K * (x - x0)^2. Есть общая форма записи: y = k0 + k1 * x + k2 * x*x, а коэффициенты по идее надо искать в справочниках по лампам.

                    Реалистичное моделирование в цифре - довольно-таки сложная вещь и одним квадратом здесь не обойдешься, т.к. есть динамические эффекты: при подаче входного сигнала ВАХ начинает как бы дрожать в некоторых пределах.


                    1. Oksenija Автор
                      07.07.2023 06:35
                      +7


                    1. Oksenija Автор
                      07.07.2023 06:35

                      на счет дрожание - вы имеете ввиду емкость и индуктивность (реактивности) электродов в лампе или что-то другое? В чистой без реактивностей ВАХ ничего дрожать в принципе не может. Любой сигнал на достаточно маленьком временном интервале является константой. Итого логически делаем вывод что дрожание ВАХ должно наблюдаться на КОНСТАНТОМ входном напряжении. Вроде такого нет. Разве что тепловые шумы.


                      1. viphabr
                        07.07.2023 06:35
                        +1

                        Вы правы, но не совсем, в магнитных материалах есть, например, гистерезис, т.е. в выходных трансформаторах ламповых усилителей. Эта нелинейность без реактивностей, т.е. не сводится к инерционности индуктивности, тем не менее ее форма зависит от предыдущего значения напряжения!


                      1. Oksenija Автор
                        07.07.2023 06:35

                        Согласен, интересное замечание!


                      1. sci_nov
                        07.07.2023 06:35
                        +3

                        имею ввиду обратные электроны. там на самом деле всё сложнее, когда лампа раскачана, то есть когда громкость довольно-таки большая. На константном - нет, и эта ВАХ - статическая.

                        По-поводу функции... да, похоже что квадрат без линейной части. Тогда перед синусом надо поставить множитель, т.е.:

                        [1+k \sin(wt + \phi)]^2

                        и при малом k это будет малосигнальное приближение.


                      1. Oksenija Автор
                        07.07.2023 06:35
                        +1

                        обмозговав ваше предложение все же думаю надо его проверить - в текущей версии на слух искажения маленькие - можно не бояться и сделать более грубо - исходный сигнал плюс небольшая доля но более сильных искажений просто сигнал в квадрате без сеточного смещения!


                      1. sci_nov
                        07.07.2023 06:35
                        +1

                        Вероятно, что есть публикации/форумы на эту тему.

                        С другой стороны, если есть генератор сигналов, ламповый усилитель и анализатор спектра, то можно подавать на вход разные модельные сигналы и пытаться понять как формируется выходной спектр. Потом составить мат. модель. Но это довольно таки творческая и не быстрая задача и, вероятно, подобное тоже где-нибудь опубликовано.

                        Лампа лампой, но в усилителе может быть несколько ламп плюс схема соединения, и итоговый эффект будет несколько иной.


                      1. Oksenija Автор
                        07.07.2023 06:35
                        +1

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


                      1. sci_nov
                        07.07.2023 06:35
                        +3

                        Да... Чтобы понять, надо начинать с малого.


                      1. Oksenija Автор
                        07.07.2023 06:35
                        +2

                        изменил алгоритм, две частотные полосы, более сильные чётные гармоники, теперь увеличение яркости отчетливо слышно. https://disk.yandex.ru/d/y18kiOIMN7CLCA


                      1. BorisZommer
                        07.07.2023 06:35
                        +1

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


                      1. sci_nov
                        07.07.2023 06:35

                        О да, на телефоне заметил разницу. На предыдущем не замечаю.