На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Логарифмическая шкала
    Всем салюта! :victory:

    Такой вопрос, парни и красавицы.

    Нужно построить логарифмическую шкалу.
    Если я правильно понимаю, она строится по принципу:
    Y = Ymin + Log( (Ymin+X*(Ymax-Ymin))/Ymin ) / Log(Ymax/Ymin)
    где X - нормализованная позиция на шкале (от 0 до 1); Ymin, Ymax - диапазон значений; Y - искомое значение на позиции X.

    Всё бы хорошо, но есть нюанс.
    При Ymin <= 0 эта функция не имеет решения.

    Как обычно такая задача решается?

    Скажем, нужна шкала от 0 до 1000.
    Или от -10 до +10 (чтобы она сжималась в обе стороны по мере удаления от 0, надо полагать(?)).
      Jin X, не нужно искать сложностей там, где их нет! На сколько я понял, у тебя есть две "сущности":
      1) Логарифмическая зависимость
      2) Нужная тебе шкальная система отсчета
      Вот возьми и наложи ее на твою систему отсчета. Логарифмическую зависимость ты вправе:
      1) Двигать относительно координат 0,0
      2) Масштабировать по нужному тебе коэффициенту (константе или функции)
      У тебя весь "инструментарий" есть, или я что-то не понимаю :-?
        JoeUser, не совсем понимаю тебя.
        Давай конкретно.
        Есть область значений [A; B], нужно найти значение на лог. шкале в относительной позиции X (0..1).

        К примеру, частота от 0 до 22050 Гц.
        Каково значение частоты будет в середине шкалы (X = 0.5)?
        Как это посчитать?
          Цитата Jin X @
          К примеру, частота от 0 до 22050 Гц.
          Если ты выбрал логарифмическую шкалу, будь добр, обеспечь чтобы весь диапазон значений был строго положительным.
          У тебя здесь явно слышимый человеком диапазон звуков. Зачем тебе частоты ниже 15 Гц?
          Цитата Jin X @
          Каково значение частоты будет в середине шкалы (X = 0.5)?
          Предположим, ты ограничил частоту снизу значением 22050/2048=10.7666015625.
          Тогда в середине шкалы у тебя будет значение sqrt(10.7666015625*22050) = 487.2407664113554
            Не понимаю проблемы... считаешь логарифм (раз ордината остаётся линейной - только для абсциссы), после чего обычным образом нормализуешь линейную шкалу. Для разметки реперных точек и расчёта значений (в т.ч. для расчёта абсциссы в середине шкалы) делаешь обратное преобразование (экспонента).

            Цитата Jin X @
            Всё бы хорошо, но есть нюанс.
            При Ymin <= 0 эта функция не имеет решения.

            Ну так какая может быть логарифмическая шкала для отрицательных абсцисс?
              Цитата amk @
              Если ты выбрал логарифмическую шкалу, будь добр, обеспечь чтобы весь диапазон значений был строго положительным.
              Ну я видел такие шкалы, которые начинаются с 0.
              Значит, там за 0 просто берут какое-то малое значение (типа 0.1)?

              Цитата amk @
              Предположим, ты ограничил частоту снизу значением 22050/2048=10.7666015625.
              Откуда такое значение? :huh:

              Цитата Akina @
              считаешь логарифм (раз ордината остаётся линейной - только для абсциссы), после чего обычным образом нормализуешь линейную шкалу. Для разметки реперных точек и расчёта значений (в т.ч. для расчёта абсциссы в середине шкалы) делаешь обратное преобразование (экспонента).
              Давай по-русски. Формулами и с конкретным примером :)
              Вот у меня конкретный вопрос:
              Цитата Jin X @
              К примеру, частота от 0 до 22050 Гц.
              Каково значение частоты будет в середине шкалы (X = 0.5)?
              Как это посчитать?


              Добавлено
              Цитата Akina @
              Ну так какая может быть логарифмическая шкала для отрицательных абсцисс?
              Зеркально, ИМХО. Главное разобраться, что делать с нулём :)
                Jin X, походу твой вопрос - не вопрос. Используй формулу:

                у = k + log(x+m)

                Где с помощью коэффициентов ты сможешь график двигать относительно 0:0 как тебе заблагорассудится.
                Остается вопрос "среднего" которое ты реально хочешь. Для функции у = x вполне хватит у/2 при max x.
                В случае логарифмической функции, х3, возможно следует брать интегралы. Так, чтобы интеграл от
                [0,n] == [n,max]. Но я не полностью вкуриваю что именно тебе нужно от логарифма.
                  То, что называют логарифмической шкалой, применяется только к величинам, которые не могут быть и отрицательными, и положительными. Например - шкала громкости в децибелах. И эта шкала не может включать ноль, так как ноль находится на -∞ по шкале.
                    Цитата Jin X @
                    К примеру, частота от 0 до 22050 Гц.

                    А нулевая частота возможна?
                    Ее в принципе нет, есть значения, рядом с нулем, но мы же таким на графике не будем заморачиваться.
                    Т.е. имеем формальную шкалу с нулем, но X не может в принципе принимать нулевые значения.
                    Ну и добавить проверку на ноль, чтоб возвращало результат "инфинити"
                      Цитата Black_Dragon @
                      А нулевая частота возможна?
                      Да, она называется "постоянный ток", а гармоника на нулевой частоте - "постоянная составляющая".
                      Сообщение отредактировано: Dushevny -
                        Цитата Dushevny @
                        гармоника на нулевой частоте - "постоянная составляющая".

                        А фаза?
                          Цитата Mikle @
                          А фаза?
                          А фазы нет.
                            Цитата JoeUser @
                            у = k + log(x+m)
                            Что такое k, что такое m, что такое x3, что такое n, что такое max? :lol:
                            В каких единицах это, в каких единицах x?
                            Я не понимаю вообще ничего из того, что ты написал... <_<

                            Цитата Mikle @
                            То, что называют логарифмической шкалой, применяется только к величинам, которые не могут быть и отрицательными, и положительными. Например - шкала громкости в децибелах. И эта шкала не может включать ноль, так как ноль находится на -∞ по шкале.
                            Я понимаю. Но вот, к примеру, скрин из Sound Forge.
                            Прикреплённая картинка
                            Прикреплённая картинка

                            Получается, что они вместо 0 взяли, скажем, 0.5, правильно? От балды по сути.

                            Я думал, может есть какая-то стандартная практика на эти случаи...
                              Цитата Jin X @
                              вот, к примеру, скрин из Sound Forge

                              Так тут шкала не логарифмическая, не соответствует запросу из п.1:
                              Цитата Jin X @
                              Нужно построить логарифмическую шкалу.
                                Присоединяюсь, это - не логарифмическая шкала.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0685 ]   [ 18 queries used ]   [ Generated: 16.04.24, 19:15 GMT ]