nabbla (nabbla1) wrote,
nabbla
nabbla1

Децибелы: сплошные минусы!

PhysUnitCalc v. 0.5 почти готова, на этой неделе постараюсь выложить. Проблема с неоднозначностями решена, для этого пришлось переписать программу почти что с нуля (она разваливалась под собственным весом и костыли становились все изощреннее и изощреннее), зато появилась возможность без особенных проблем ввести еще и логарифмические величины, проще говоря, децибелы, хотя можно будет и неперы потом добавить и даже звездные величины.

И все бы хорошо, но с ними возникли новые несуразности, которые не всплывали ранее:
1. Пишем -20 дБВ, жмем Enter и получаем в ответ ругань:
Лог. единицы измерения допустимы только для положительных действительных значений

Ларчик открывается просто: у оператора присвоения размерности приоритет самый высокий, поэтому выражение по сути такое: -(20 дБВ) - сначала формируется величина 20 дБВ, а потом берется попытка изменить ему знак. 20 дБВ преобразуется в вольты - 10 В - берется обратный знак - (-10 В) - и производится попытка записать это отрицательное число в децибелах, и тут-то оно и выскакивает.

Приходится в таких ситуацих писать (-20) дБВ, тогда мы получим желаемый 0.1 В. Если хочется, чтобы и верхее выражение имело обычный смысл, надо поменять приоритет операторов.
[Spoiler (click to open)]
Ставим унарному минусу приоритет выше, чем оператору присвоения размерности. У оператора возведения в степень приоритет должен быть еще выше, чтобы -5^2 давало -25, иначе выражение будет воспринято как (-5)^2 = 25. В принципе, это и неплохо, теперь мы можем написать 5^2 м, и это будет означать (5^2) м, а не 5^(2 м) как раньше, что сразу выдавало ошибку - возведение в размерную степень.

Вроде бы не вижу противоречий - можно и сделать. Надо только помнить, что теперь не всегда A-B будет означать то же самое, что A + (-B), т.е 1 V - 20 dBV даст -9 V, а 1 V + (-20 dBV) даст 1.1 V.


2. как быть с безразмерными децибелами? По идее, они должны по-разному воздействовать на амплитуды и на мощности, т.е 1 В * 20 дБ должен стать равен 10 В (мощность увеличилась в 100 раз - на 20 дБ, а напряжение значит лишь в 10 раз), а 1 Вт * 20 дБ будет 100 Вт. Тут могут быть еще вольты на метр, ватты на квадратный метр, паскали, джоули и пр.

[Все сложно]Этим мы открываем ящик Пандоры: пропадает сразу коммутативность, ассоциативность операций (это еще ладно), а что еще хуже - инвариантность к смене представления величины. До сих пор у меня можно было на любом этапе заменить вольты на микровольты, метры на футы, кельвины на цельсии и т.д., и получить тот же самый ответ, что и должно быть - величины-то одни и те же, мы просто по-разному их записываем! Тут же 10 будет и в Африке 10, а вот стоит ее представить в децибелах - сразу возникает вопрос - а 10 - это сколько децибел, 10 или 20?

Мы можем избавиться от новых неоднозначностей, если заявим - безразмерные децибелы вообще нельзя преобразовать в "разы", это "две большие разницы", как раз тем, что 2 раза одинаково действует на вольты и ватты, а 3 дБ - по-разному.

Либо самый простой вариант: мы не жадничаем и вводим две величины типа dB{ampl} и dB{power}, так что
A dB{ampl} = 20 log10(A),
A dB{power} = 10 log10(A),
и применяем ровно ту, которая нужна.


Даже странно, что эти вещи так и не были как следует формализованы.
Tags: physunitcalc, математика, программки
Subscribe

Posts from This Journal “physunitcalc” Tag

  • Очередная несуразность в единицах измерения

    Когда-то я написал программу PhysUnitCalc - калькулятор, умеющий работать с размерностями. Мне казалось, что я наступил уже на все грабли, которые…

  • PhysUnitCalc: о литералах, унарных минусах и порядке действий

    Что-то вожжа под хвост попала эту штуковину хоть немножко "причесать". И вспомнил о старой дилемме насчёт интерпретации знака "минус". Напишем…

  • TeX-калькулятор?

    Очень давно не занимался своим PhysUnitCalc, и не знаю, когда займусь - без того дела есть. Но сейчас вдруг новая идея оформилась: сделать ввод…

  • Надо бы про солнечные батареи написать...

    Когда-то начинал эпическую серию: теоретический к.п.д солнечных батарей: Введение Глава 1: чернее чёрного Глава 2: левой, правой! но копнул…

  • Новогодняя отгадка

    На предновогоднюю загадку. Мы пытались понять: какое право мы имеем, решая систему линейных уравнений, сравнивать между собой омы, безразмерные…

  • Предновогодняя загадка

    Что-то подзадолбали меня кватернионы, ПЛИС и в целом работа, надо отдыхать. Так что поговорим о чём-нибудь более приятном - о системе линейных…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 10 comments

Posts from This Journal “physunitcalc” Tag

  • Очередная несуразность в единицах измерения

    Когда-то я написал программу PhysUnitCalc - калькулятор, умеющий работать с размерностями. Мне казалось, что я наступил уже на все грабли, которые…

  • PhysUnitCalc: о литералах, унарных минусах и порядке действий

    Что-то вожжа под хвост попала эту штуковину хоть немножко "причесать". И вспомнил о старой дилемме насчёт интерпретации знака "минус". Напишем…

  • TeX-калькулятор?

    Очень давно не занимался своим PhysUnitCalc, и не знаю, когда займусь - без того дела есть. Но сейчас вдруг новая идея оформилась: сделать ввод…

  • Надо бы про солнечные батареи написать...

    Когда-то начинал эпическую серию: теоретический к.п.д солнечных батарей: Введение Глава 1: чернее чёрного Глава 2: левой, правой! но копнул…

  • Новогодняя отгадка

    На предновогоднюю загадку. Мы пытались понять: какое право мы имеем, решая систему линейных уравнений, сравнивать между собой омы, безразмерные…

  • Предновогодняя загадка

    Что-то подзадолбали меня кватернионы, ПЛИС и в целом работа, надо отдыхать. Так что поговорим о чём-нибудь более приятном - о системе линейных…