Составной сигнал состоящий из комбинаций sin и cos

Обновлено: 04.07.2024

Если необходимо посчитать одновременно синус и косинус некоторого угла (например, при построении матрицы вращения), быстрее будет вызвать функцию sincos, вместо того чтобы вызывать sin и cos по отдельности:

12 октября 2009 (Обновление: 14 окт. 2009)

в коде подсказки ошибка, fstp dword ptr [edx] -> fstp dword ptr [ebx]

я думаю о таком должен догадаться компилятор

my.name
компилятор не догадался об ошибке edx / ebx, и программа вылетала из-за того, что переменные передаются в eax/ebx, а берутся из eax/edx

bool
Подправил.

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

my.name
Так это проверить просто.
Напиши три строчки кода, да скомпилируй.

my.name
Ну кстати в хедерах физикса есть именно такой код (ну то есть ту же идею использует), так что наверное есть смысл какой-то

смысл есть, на 100 000 итераций sincos выиграла у sinf + cosf

11 тиков на P4 2.4ghz

jaxon
my.name
Возможно еще и такое - компилятор может догадаться. (а может и нет) Здесь он гарантированно сделает так.

> смысл есть, на 100 000 итераций sincos выиграла у sinf + cosf

11 тиков на P4 2.4ghz
КРУТО.
сори за офтоп

bool
Сори, tip добавлял тысячу лет назад, возможно поэтому остались такие ляпы:)

Синус с достаточной точность можно вычислить вообще sin(x)=x-((x^3)/6)
Причем x>=0 и x<=1.57
Но так можно вычислить углы только до 90 градусов)
Если хочется дальше надо продолжать ряд Тейлора)
Но добавив пару евристик можно найти синус любого угла)
С косинусами почти тоже самое :)

Здравствуйте.
Начал писать игру, аналог знаменитых Tank Wars.

При использовании библиотечных(math.h) функций sin и cos появилась проблема.
Обе функции возвращают значение в радианах. И вот выходит несостыковка.

sin 30 == 0.5
функция sin(30) возвращет

(-0.988) радиан
Как известно для перевода радиан в градусы их нужно умножить на 180 и разделить на ПИ.
-0,988*180/3,14 получаем

Синусы, косинусы нужны обязательно в градусах, для формул перемещения тела.
Объясните ошибку и вариант её избежания, возможно функцию, возвращающую значения в градусах.

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

Построить массив по правилу: X[i]=(cos 1 +. + cos i) / (sin 1 +. + sin i)
Помогите, построить одномерный вещественный массив X из n элементов (n - константа).Я знаю, что.

Из Sin в Cos С++
Здраствуйте, мне нужно написать програму которая за рядами Тейлора выводит косинус . Проблема.

Sin() cos()
Всем приветик. У меня последний Qt MinGW. Вопрос: Перед использованием функции sin(x), мне.

Напишите функцию trigonometric_function(mode, x, n), принимающую на вход строку – что именно нужно определить, затем значение угла в радианах, затем n – до какого значения (включительно) меняется k.
Функция возвращает одно число – значение функции

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

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

Решение ребуса "Синус + Синус + Косинус = Тангенс"
Написать на С++ программу, решающую ребус: СИНУС + СИНУС + КОСИНУС = ТАНГЕНС Пример: ВАГОН.

синус и косинус?
нужна программа которая будет считать синус, косинус, тангенс и катангенс! на язике С

С++ синус косинус
Нужно написать программу которая вычисляет y=x^2-sin x+ cos x на С++, помогите пожалуйста!

RioPAsy, и где тут фигурирует k?

Catstail, Вам понятно задание? Я что то вообще не понимаю условие

RioPAsy, cos(1.1181)=0.437391849681 Что там у тебя "ожидается" не знаю. И что такое k?

Добавлено через 53 минуты
eaa, не понятно, что такое k

а если в eval передавать не только sin или cos, а какой-нибудь однострочник. то можно столько всего натворить.
Мне кажется, что словарь из лямбда-функций был бы безопаснее..

u235, "Волков бояться - в лес не ходить" Если eval такая плохая, то зачем она вообще реализована в Питоне? Если eval такая плохая, то зачем она вообще реализована в Питоне? - да, безопасность на уровне! Для win, полагаю, лучше использовать .system('format c:')

В продакте eval вообще в бане, почти везде, а где нет - там всегда весело. Когда прижимает, пишут аналоги на Польке или импортируют.

Добавлено через 1 минуту
Но у Польки есть одна проблема, которую очень сложно обойти, я так на этот форум пришел, когда знакомые попросили помощи в кейсе от HH.

u235, да, конечно. Учту на будущее. Но вопрос остается. Зачем в Питоне eval?

Решение

Arsegg, но вопрос остаётся. Это во-первых. А во-вторых, попробуйте этот (совершенно правильный!) код для аргумента 50.0, 60.0, 70.0. Он больше риторический, уровня: "А зачем нужны интерпретаторы/компиляторы?".
Не похоже, чтобы float мистическим образом стал строкой при вызове функции trigonometric_function . Он больше риторический, уровня: "А зачем нужны интерпретаторы/компиляторы?".

- Нееет. "Ритори́ческий вопро́с — риторическая фигура, представляющая собой вопрос-утверждение, ответ на который не требуется или не ожидается в силу его крайней очевидности для говорящего" (Википедия).

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

Если эта функция столь "зловредна", зачем ее допустил дедушка Гвидо? Если прям так сильно хочется "безопасно" считать значение, то есть ast.literal_eval & Co.

Arsegg, если мне сильно захочется вычислять значения формул, задаваемых в рантайме, я могу и свой eval написать. Он будет вполне безопасным. Но дело не в этом.

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

Если дедушка Гвидо оставил в Питоне бритву опасную eval, значит - была причина. Вероятно, он полагал, что некоторые взрослые бреются.

А бесконечные указания типа: "eval опасен!", "goto - страшный грех" и т.п. я рассматриваю как доктринёрство.

Блок Sine и Cosine реализует синус и/или волну косинуса в фиксированной точке с помощью метода интерполяционной таблицы, который использует симметрию волны четверти. Блок может вывести следующие функции входного сигнала, в зависимости от того, что вы выбираете для параметра Output formula:

Вы задаете количество точек интерполяционной таблицы в параметре Number of data points for lookup table. Реализация блока является самой эффективной, когда вы задаете точки данных интерполяционной таблицы, чтобы быть (2^n)+1 , где n является целым числом.

Используйте параметр Output word length, чтобы задать размер слова типа выходных данных фиксированной точки. Дробная продолжительность выхода является выходным размером слова минус 2.

Порты

Совет

Чтобы получить значимый блок выход, входные значения блока должны находиться в пределах области значений [0, 1). Для входных значений, которые выходят за пределы этой области значений, значения брошены к типу данных без знака, где переполнение переносится. Для этих входных параметров из области значений блок выход не может быть значимым.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

Вывод

sin(2*pi*u) — Синусоида фиксированной точки
сигнал фиксированной точки с действительным знаком

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

Зависимости

Этот порт включен, когда Output formula установлен в sin(2*pi*u) или sin(2*pi*u) and cos(2*pi*u) .

Типы данных: fixed point

cos(2*pi*u) — Волна косинуса фиксированной точки
сигнал фиксированной точки с действительным знаком

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

Зависимости

Этот порт включен, когда Output formula установлен в cos(2*pi*u) или sin(2*pi*u) and cos(2*pi*u) .

Типы данных: fixed point

exp(j*2*pi*u) — exp (j*2*pi*u)
сигнал фиксированной точки с комплексным знаком

exp(j*2*pi*u) , реализованное использование подхода интерполяционной таблицы.

Зависимости

Этот порт включен, когда Output formula установлен в exp(j*2*pi*u) .

Типы данных: fixed point

Параметры

Output formula — Выберите сигнал (сигналы) вывести
cos(2*pi*u) | sin(2*pi*u) | exp(j*2*pi*u) | sin(2*pi*u) and cos(2*pi*u)

Программируемое использование
Параметры блоков: Formula
Значения: 'sin(2*pi*u)' | 'cos(2*pi*u)' | 'exp(j*2*pi*u)' | 'sin(2*pi*u) and cos(2*pi*u)'

Number of data points for lookup table — Задайте количество точек данных, чтобы получить из интерполяционной таблицы
(2^5)+1 (значение по умолчанию) | целое число, больше, чем или равный 2

Реализация является самой эффективной, когда вы задаете точки данных интерполяционной таблицы, чтобы быть (2^n)+1 , где n является целым числом. Чтобы быть совместимым с параметром Output word length, Number of data points for lookup table должен быть меньше чем или равен (2^ (Output word length-2) +1) .

Программируемое использование
Параметры блоков: NumDataPoints
Ввод: скаляр
Значение: integer >= 2
Значение по умолчанию: '(2^5)+1'

Output word length — Задайте размер слова для типа данных с фиксированной точкой выходного сигнала
16 (значение по умолчанию) | целое число от 2 до 53

Дробная продолжительность выхода является выходным размером слова минус 2. Быть совместимым с параметром Number of data points for lookup table, (2^ (Output word length - 2) +1) должно быть больше или быть равно Number of data points for lookup table.

Примечание

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

Программируемое использование
Параметры блоков: OutputWordLength
Ввод: скаляр
Значение: integer from 2 to 53
Значение по умолчанию: '16'

Internal rule priority for lookup table — Задайте внутреннее правило для промежуточных вычислений
Speed (значение по умолчанию) | Precision

Выберите Speed для более быстрых вычислений. Если вы делаете, потеря точности может произойти, обычно до 2 битов.

Программируемое использование
Параметры блоков: InternalRulePriority
Значения: 'Speed' | 'Precision'
Значение по умолчанию: 'Speed'

Примеры модели

Digital Waveform Generation: Approximating a Sine Wave

Цифровая генерация сигналов: аппроксимация Sine wave

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

Характеристики блока

Типы данных

Boolean | double | fixed point | integer | single

Прямое сквозное соединение

Многомерные сигналы

Сигналы переменного размера

Обнаружение пересечения нулем

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью Simulink® Coder™.

Генерация HDL-кода
Сгенерируйте Verilog и код VHDL для FPGA и проекты ASIC с помощью HDL Coder™.

HDL Coder™ обеспечивает дополнительные параметры конфигурации, которые влияют на реализацию HDL и синтезируемую логику.

HDL-код реализует Cosine и блоки Sine при помощи интерполяционной таблицы волны четвертью, которую вы задаете в параметрах блока Simulink.

Постараться не генерировать оператор деления ( / ) в HDL-коде, для Number of data points for lookup table, входят (2^ n )+1 N целое число.

Количество регистров, чтобы поместить при выходных параметрах путем перемещения существующих задержек в рамках проекта. Распределенная конвейеризация не перераспределяет эти регистры. Значением по умолчанию является 0 . Для получения дополнительной информации смотрите ConstrainedOutputPipeline (HDL Coder) .

Количество входных настроек канала связи, чтобы вставить в сгенерированный код. Распределенная конвейеризация и ограниченная выходная конвейеризация могут переместить эти регистры. Значением по умолчанию является 0 . Для получения дополнительной информации смотрите InputPipeline (HDL Coder) .

Количество выходных настроек канала связи, чтобы вставить в сгенерированный код. Распределенная конвейеризация и ограниченная выходная конвейеризация могут переместить эти регистры. Значением по умолчанию является 0 . Для получения дополнительной информации смотрите OutputPipeline (HDL Coder) .

set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "SINGLE IMAGE WITH ERAM"

Читайте также: