Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.12.108.236] |
|
Сообщ.
#1
,
|
|
|
Всем салюта!
Такой вопрос, парни и красавицы. Нужно построить логарифмическую шкалу. Если я правильно понимаю, она строится по принципу: 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, надо полагать(?)). |
Сообщ.
#2
,
|
|
|
Jin X, не нужно искать сложностей там, где их нет! На сколько я понял, у тебя есть две "сущности":
1) Логарифмическая зависимость 2) Нужная тебе шкальная система отсчета Вот возьми и наложи ее на твою систему отсчета. Логарифмическую зависимость ты вправе: 1) Двигать относительно координат 0,0 2) Масштабировать по нужному тебе коэффициенту (константе или функции) У тебя весь "инструментарий" есть, или я что-то не понимаю |
Сообщ.
#3
,
|
|
|
JoeUser, не совсем понимаю тебя.
Давай конкретно. Есть область значений [A; B], нужно найти значение на лог. шкале в относительной позиции X (0..1). К примеру, частота от 0 до 22050 Гц. Каково значение частоты будет в середине шкалы (X = 0.5)? Как это посчитать? |
Сообщ.
#4
,
|
|
|
Цитата Jin X @ Если ты выбрал логарифмическую шкалу, будь добр, обеспечь чтобы весь диапазон значений был строго положительным.К примеру, частота от 0 до 22050 Гц. У тебя здесь явно слышимый человеком диапазон звуков. Зачем тебе частоты ниже 15 Гц? Цитата Jin X @ Предположим, ты ограничил частоту снизу значением 22050/2048=10.7666015625.Каково значение частоты будет в середине шкалы (X = 0.5)? Тогда в середине шкалы у тебя будет значение sqrt(10.7666015625*22050) = 487.2407664113554 |
Сообщ.
#5
,
|
|
|
Не понимаю проблемы... считаешь логарифм (раз ордината остаётся линейной - только для абсциссы), после чего обычным образом нормализуешь линейную шкалу. Для разметки реперных точек и расчёта значений (в т.ч. для расчёта абсциссы в середине шкалы) делаешь обратное преобразование (экспонента).
Цитата Jin X @ Всё бы хорошо, но есть нюанс. При Ymin <= 0 эта функция не имеет решения. Ну так какая может быть логарифмическая шкала для отрицательных абсцисс? |
Сообщ.
#6
,
|
|
|
Цитата amk @ Ну я видел такие шкалы, которые начинаются с 0.Если ты выбрал логарифмическую шкалу, будь добр, обеспечь чтобы весь диапазон значений был строго положительным. Значит, там за 0 просто берут какое-то малое значение (типа 0.1)? Цитата amk @ Откуда такое значение? Предположим, ты ограничил частоту снизу значением 22050/2048=10.7666015625. Цитата Akina @ Давай по-русски. Формулами и с конкретным примером считаешь логарифм (раз ордината остаётся линейной - только для абсциссы), после чего обычным образом нормализуешь линейную шкалу. Для разметки реперных точек и расчёта значений (в т.ч. для расчёта абсциссы в середине шкалы) делаешь обратное преобразование (экспонента). Вот у меня конкретный вопрос: Цитата Jin X @ К примеру, частота от 0 до 22050 Гц. Каково значение частоты будет в середине шкалы (X = 0.5)? Как это посчитать? Добавлено Цитата Akina @ Зеркально, ИМХО. Главное разобраться, что делать с нулём Ну так какая может быть логарифмическая шкала для отрицательных абсцисс? |
Сообщ.
#7
,
|
|
|
Jin X, походу твой вопрос - не вопрос. Используй формулу:
у = k + log(x+m) Где с помощью коэффициентов ты сможешь график двигать относительно 0:0 как тебе заблагорассудится. Остается вопрос "среднего" которое ты реально хочешь. Для функции у = x вполне хватит у/2 при max x. В случае логарифмической функции, х3, возможно следует брать интегралы. Так, чтобы интеграл от [0,n] == [n,max]. Но я не полностью вкуриваю что именно тебе нужно от логарифма. |
Сообщ.
#8
,
|
|
|
То, что называют логарифмической шкалой, применяется только к величинам, которые не могут быть и отрицательными, и положительными. Например - шкала громкости в децибелах. И эта шкала не может включать ноль, так как ноль находится на -∞ по шкале.
|
Сообщ.
#9
,
|
|
|
Цитата Jin X @ К примеру, частота от 0 до 22050 Гц. А нулевая частота возможна? Ее в принципе нет, есть значения, рядом с нулем, но мы же таким на графике не будем заморачиваться. Т.е. имеем формальную шкалу с нулем, но X не может в принципе принимать нулевые значения. Ну и добавить проверку на ноль, чтоб возвращало результат "инфинити" |
Сообщ.
#10
,
|
|
|
Цитата Black_Dragon @ Да, она называется "постоянный ток", а гармоника на нулевой частоте - "постоянная составляющая". А нулевая частота возможна? |
Сообщ.
#11
,
|
|
|
Цитата Dushevny @ гармоника на нулевой частоте - "постоянная составляющая". А фаза? |
Сообщ.
#12
,
|
|
|
Цитата Mikle @ А фазы нет. А фаза? |
Сообщ.
#13
,
|
|
|
Цитата JoeUser @ Что такое k, что такое m, что такое x3, что такое n, что такое max? у = k + log(x+m) В каких единицах это, в каких единицах x? Я не понимаю вообще ничего из того, что ты написал... Цитата Mikle @ Я понимаю. Но вот, к примеру, скрин из Sound Forge.То, что называют логарифмической шкалой, применяется только к величинам, которые не могут быть и отрицательными, и положительными. Например - шкала громкости в децибелах. И эта шкала не может включать ноль, так как ноль находится на -∞ по шкале. Прикреплённая картинка
Получается, что они вместо 0 взяли, скажем, 0.5, правильно? От балды по сути. Я думал, может есть какая-то стандартная практика на эти случаи... |
Сообщ.
#14
,
|
|
|
Цитата Jin X @ вот, к примеру, скрин из Sound Forge Так тут шкала не логарифмическая, не соответствует запросу из п.1: Цитата Jin X @ Нужно построить логарифмическую шкалу. |
Сообщ.
#15
,
|
|
|
Присоединяюсь, это - не логарифмическая шкала.
|
Сообщ.
#16
,
|
|
|
А какая же это шкала?
Смотрите частоты, а не амплитуду. Хотя и по вертикали децибелы (но там нижний порог = -100db, а не -∞, поэтому тут вопросов нет). Добавлено Там даже опция есть "Логарифмическая шкала", она как раз включена. Отключаешь – линейная становится (равномерно частоты расположены). Добавлено Расстояния между 1-10, 10-100, 100-1000 и 1000-10000 одинаковые. А вы говорите, не логарифмическая. |
Сообщ.
#17
,
|
|
|
Цитата Jin X @ Нужно построить логарифмическую шкалу. Спрашиваем у Яндекса - "Построение ЛАЧХ" Получем ссылки, например: ЛАЧХ |
Сообщ.
#18
,
|
|
|
Цитата Jin X @ Ну я видел такие шкалы, которые начинаются с 0. Или ноль там не на месте, или шкала кривая. Цитата Jin X @ вот, к примеру, скрин из Sound Forge. На глаз там то, где по абсциссе написан ноль, значение будет приблизительно 0,4. Какого хрена - вопрос к рисователям... может, они в школе не дошли до логарифмов. Вот как оно выглядит, есть посчитать: Прикреплённая картинка
Цитата Jin X @ Вот у меня конкретный вопрос: К примеру, частота от 0 до 22050 Гц. На логарифмической шкале ноль быть не может. Только по ошибке. |
Сообщ.
#19
,
|
|
|
Понятно.
Короче, если нужен ноль, просто берём вместо него некое малое значение, меньшее которого считать особого смысла нет. Всем спасибо |
Сообщ.
#20
,
|
|
|
Цитата Jin X @ Человеческое ухо слышит звуки в диапазоне примерно от 16 Гц до 16 кГц. Есть люди, диапазон слышимости которых чуть шире,но не намного. Откуда такое значение? Добавлено Шкала не логарифмическая. Точнее она составлена из двух шкал - правая часть логарифмическая шкала, но меньше какого-то значения она меняется на какую-то другую, м.б. линейную. |
Сообщ.
#21
,
|
|
|
Цитата Jin X @ Что такое k, что такое m, что такое x3, что такое n, что такое max? В каких единицах это, в каких единицах x? Я не понимаю вообще ничего из того, что ты написал... Я тебе рассказывал, что твой логарифмический график, любой график вааще (равно как и шкалу) можно двигать относительно начала координат 0:0 с помощью коэффициентов. Обычный школьный курс математики. При этом, если ты используешь коэффициенты с операциями сложения или вычитания - то изначально график свою форму не меняет, а лишь "перемещается" по координатной сетке. Вот пример: y=ln(x) y=ln(x-1) y=ln(x)+1 y=ln(x+e)+1 А вот если используешь коэффициенты с операциями умножения или деления - график "деформируется". Это хорошо видно на гармонических функциях - меняется амплитуда или/и частота. Вот пример: y=sin(x) y=2sin(x) // увеличили амплитуду y=sin(2x) // увеличили частоту Таким образом, правильно задав коэффициенты, ты сможешь сформировать нужную тебе шкалу. И при этом она не перестанет иметь логарифмическую зависимость. Ну как-то так |
Сообщ.
#22
,
|
|
|
JoeUser, у тебя только синее и зелёное преобразование дают логарифмическую шкалу.
Главная особенность логарифмической шкалы - сдвиг по шкале на фиксированное расстояние означает увеличение величины в строго определённое число раз. Красное и чёрное преобразования таким свойством не обладают. Чаще поступают другим способом. Обрезают график логарифма в какой-то точке и заменяют ближнюю к нулю часть на касательную. После этого сдвигают график по высоте так, чтобы он начинался в нуле. После этого можно ещё достроить график до симметричного, получив линейную зависимость для малых и логарифмическую для больших значений Можно для перехода взять полиномиальную зависимость, тогда переход от логарифмической к другой зависимости получается не так заметен. Но так поступают редко. |
Сообщ.
#23
,
|
|
|
Цитата amk @ JoeUser, у тебя только синее и зелёное преобразование дают логарифмическую шкалу. Главная особенность логарифмической шкалы - сдвиг по шкале на фиксированное расстояние означает увеличение величины в строго определённое число раз. Красное и чёрное преобразования таким свойством не обладают. Тут я согласен - исходя из определения "логарифмической шкалы": Цитата Логарифмический масштаб (шкала) — шкала, длина отрезка которой пропорциональна логарифму отношения величин, отмеченных на концах этого отрезка, в то время как на шкале в линейном масштабе длина отрезка пропорциональна разности величин на его концах. При этом если мы двигаем по аргументу влево-вправо - функция логарифма остается, а если двигаем вверх-вниз - это уже не функция логарифма (а логарифма плюс-минус что-то), хотя график совпадает с логарифмическим по форме. Добавлено amk, Упс ... ты же хотел сказать - синее и черное? У зеленого добавляется к логарифму единица по-любому, а это уже не соответствует закономерности ln(x)? |
Сообщ.
#24
,
|
|
|
Цитата JoeUser @ Нет, именно синее и зелёное. У зелёного добавляемая вне логарифма единица не влияет на приращение шкалы.amk, Упс ... ты же хотел сказать - синее и черное? У чёрного единица вычитается из аргумента. Пусть логарифм будет по основанию два. При увеличении x от 2 до 3 (в полтора раза), y увеличивается от 0 до 1 (на 1). При увеличении x от 3 до 4.5 y увеличивается от 1 до log23.5 (немного меньше 2), то есть менее чем на 1. Ну а при уменьшении x с 1.5 до 1, у уменьшается с -1 до -∞ (изменение совсем не похоже на 1) |