Как найти среднее / среднее значение звука в Найквисте - PullRequest
4 голосов
/ 09 августа 2010

Я пытаюсь написать простой подключаемый модуль измерения для Audacity, и это примерно так же весело, как колотить камни по моему черепу. Все, что я хочу сделать, это взять кусок аудио и найти среднее значение всех сэмплов (смещение блока DC ), чтобы я мог представить его как число пользователю и вычесть его смещение постоянного тока от образцов для дальнейшей обработки. Я знаю и понимаю математику, которую хочу сделать, но я не понимаю, как это сделать в Lisp / XLisp / Nyquist / что угодно.

Справочная информация в этой теме

Насколько я знаю, для этого нет функции. По какой-то причине функция snd-avg фактически не вычисляет среднее значение звука, как вы могли ожидать. Сначала получает абсолютное значение, а , а затем вычисляет среднее значение. вычисляет среднее значение, а затем - абсолютное значение. Хотя есть отдельная функция snd-abs, которая может это сделать. >: (* ​​1017 *

Так что, я думаю, я должен написать свой собственный? Это означает преобразование звука в массив, а затем вычисление его среднего значения?

(snd-fetch-array sound len step)

Считывает последовательные массивы образцов из звук, возвращая либо массив FLONUMs или NIL, когда звук завершается.

(snd-samples sound limit)

Преобразует сэмплы в массив lisp.

Функции Найквиста

И нет даже усредненной функции, так что мне тоже придется делать сумму самостоятельно? Но математические функции работают только над списками? Итак, мне нужно преобразовать массив в список?

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

Нет, (hp s 0.1) не будет работать, так как:

  1. Я хочу удалить только DC и сохранять произвольно низкие частоты. 0,01 Гц должно пройти без изменений, постоянный ток должен быть удален.
  2. Фильтр верхних частот является причинно-следственным, и первые выборки формы волны остаются неизменными, независимо от того, какую частоту колена вы используете, что делает его бесполезным для измерения пиковых выборок и т. Д.

1 Ответ

0 голосов
/ 18 августа 2010

НЕВЕРМИНД

snd-maxsamp вычисляет абсолютное значение, а не snd-avg. snd-avg работает просто отлично. Вот как можно выжать из него число («FLONUM»):

(snd-fetch (snd-avg s (round len) (round len) OP-AVERAGE))

Это дает отрицательное число для отрицательных образцов и положительное число для положительных образцов, как и должно быть.

Должен ли этот вопрос быть удален или оставлен в качестве примера для других?

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