Генерация прямоугольной волны - PullRequest
0 голосов
/ 27 октября 2019

Требуется, чтобы прямоугольная волна с коэффициентом заполнения 50% генерировалась с помощью JavaScript. В ходе проведенных исследований я определил функцию Matlab square(), которая способна генерировать прямоугольную волну с коэффициентом заполнения 50% на основе параметров, которые передаются в функцию. В моем случае это делается следующим образом:

square(2 * pi * frequency * [range of values]);

Чтобы достичь тех же результатов с помощью JavaScript, я попытался использовать функцию Math.sign () для преобразования синусоидальной волны. в эквивалент прямоугольной волны, следующим образом:

Math.sign(Math.sin(2 * Math.PI * frequency * [range of values]));

Если не используется функция Matlab square(), большинство онлайн-ресурсов, кажется, предлагают этот подход для генерации прямоугольной волны с рабочим циклом 50%.

Однако, похоже, что эти две функции не всегда дают одинаковые результаты. Для уравнения Math.sign() можно заметить, что когда значение частоты установлено на «10», а диапазон значений установлен на [0], Math.sin(2 * Math.PI * 10 * 0) приводит к значению 0, которое затем может быть обработано втри способа: либо преобразовать в -1 / 1 / удалить из списка результирующих значений. Теперь преобразование этого значения в -1 / 1 не позволит достичь 50% -ного рабочего цикла, поэтому эти числовые преобразования не могут быть выполнены (результирующие значения выглядят следующим образом: [0, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1]). Таким образом, в этом случае значение «0» должно быть удалено из списка результирующих значений.

Теперь, скажем, частота установлена ​​на «6,67», например, так: Math.sin(2 * Math.PI * 6.67 * 0), результирующее значение 0 должнобыть преобразовано в 1, чтобы обеспечить поддержание 50% рабочего цикла (результирующие значения выглядят следующим образом: [0, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1]). Таким образом, отсутствует согласованность в способе обработки результирующих значений 0 между различными сценариями.

Мне требуется решение, которое будет работать во всех различных сценариях независимо от значения «частоты». Есть ли способ реализовать функцию Matlab square() в JavaScript, чтобы получить точно такие же значения?

...