Arhn - архитектура программирования

Расширение Karplus-Strong с фильтром нижних частот

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

Для лучших результатов и контроля над ними я попытался реализовать расширенную версию алгоритма.
Поэтому вместо усредняющего фильтра мне нужен частотный фильтр наподобие ФНЧ.
Мой усредняющий фильтр имеет два входа и один выход : среднее(а,б) = (а+б)/2

Пример кода на странице в Википедии дает столько же выходных данных, сколько и входных данных.
http://en.wikipedia.org/wiki/Low-pass_filter

Я нашел другие (математические) версии, такие как:
http://cnx.org/content/m15490/latest/
H(z) = (1+(1/z))/2
Думаю, z — комплексное число.

Обе версии имеют два входа, но также и два выхода.
Как мне получить из этого одно значимое значение?
Или мне нужно переписать большие части алгоритма?
Если это так, где я могу найти хорошее объяснение этого?

12.12.2009

Ответы:


1

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

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

12.12.2009
  • Спасибо за ответ. Я не знал, что уже использую фильтр нижних частот. Тогда мне нужен более продвинутый с параметрами. Спасибо за подсказки по расчету коэффициента и порядка. Возможно, я буду использовать это в будущем. Но на данный момент проблема заключается в реализации такого фильтра. 13.12.2009
  • Реализация очень проста: y = c0*x[0] ​​+ c1*x[1]... Установка хороших значений для c — сложная часть. 13.12.2009
  • Да это просто. Также объясняет, почему среднее значение является фильтром нижних частот. (а+b)/2 => 0,5*а+0,5*b. Ответ на вопрос принят. Я предполагаю, что высокие и низкие частоты одинаково просты? Если да, не могли бы вы также написать эти алгоритмы? 13.12.2009

  • 2

    Фильтры могут быть выражены несколькими способами:

    1. На сложной равнине ваш пример H(z) = (1+(1/z))/2
    2. В качестве фильтра y[i] = h[0]*x[i] + h[1]*x[i-1] + h[2]*x[i-2] + ...
    3. В частотной области Y[f] = H[f] * X[f]

    Второй из них на самом деле является сверткой массивов h и x. Это также легче всего понять.

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

    Кажется, я вижу, о чем вы спрашиваете. Хотя вам не нужно больше одного выхода. Со страницы Википедии алгоритм синтеза строк Карплюса-Стронга нуждается в буфере длины L. Если у нас есть коэффициенты фильтра M (h), который дает результат формы,

    y[i] = x[i] + h[0]*y[i-L] + h[1]*y[i-(L+1)] + h[2]*y[i-(L+2)] + ...

    Синтез Karplus-Strong из здесь использует кольцевой буфер для хранения последних L выходов, y[i-1],...,y[i-L]. Это инициализируется значениями шума x[i] для i<=L; однако для i>L x[i]=0. Алгоритм будет экономить пространство, поскольку вы храните только значения L. Сигнал x[i] для i>L просто добавляется в кольцевой буфер.

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

    12.12.2009
  • Я почти ничего не знаю об этом, поэтому, возможно, я неправильно это реализовал. Я использовал объяснение из: cs.princeton.edu/ Courses/archive/fall07/cos126/assignments/ (не моя домашняя работа) и в соответствии с этим кольцевой буфер используется как задержка и обратная связь. Кроме того, шаг обновления требует только двух входных данных. И сгенерированный звук звучит как гитара. Если вы все еще считаете, что следует использовать все значения в буфере, не могли бы вы пояснить подробнее? 13.12.2009
  • Я работал, взглянув на статью со [страницы Википедии] [1]. У него y[n] = x[n] + 0.5*(y[n-N] + y[n-(N+1)]), а не y[n] = x[n] + 0.5*(y[n-1] + y[n-2]), как я и предполагал. Таким образом, вы, кажется, правы в отношении того, как строится буфер. Принстонская страница также добавляет затухание 0,996 к усреднению в буфере. Я не вижу причин, по которым вы не можете отфильтровать более двух элементов вместе. Но ваш пробег будет варьироваться, поэтому вам придется поэкспериментировать, чтобы определить, что звучит лучше. [1] jstor.org/pss/3680063 14.12.2009
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..