Чем перевернуть полярность волны?

  • Автор темы Автор темы moi
  • Дата начала Дата начала
SilverEye:
Фазу что ли?

Полярность это когда из sin делаешь –sin, а фаза это когда из sin делаешь cos

Нашел!
Термин по аглицики не знал, а так и в Audition’e оказывается есть…
Спасибо...
 
moi, ну вообще-то это не так. Сos(x) = Sin(x*Pi/2), то есть косинус это "сдвиг" синуса волны на 90 градусов вправо. А -Sin(x) = Sin(x*Pi), то есть "сдвиг" на 180 градусов. Тут просто дело в том, на сколько градусов мы сдвигаем фазу. :smile:

[ADDED=SilverEye]1134424396[/ADDED]
Ну это если рассуждать применительно к тригонометрическим функциям. :smile:
А вообще, перевернуть фазу сигнала означает именно поменять полярность.

[ADDED=SilverEye]1134424593[/ADDED]
В принципе, я тут подумал... Если разложить сигнал в ряд Фурье, и у каждой компоненты сменить знак, то произойдёт именно смена полярности. Так что это всё одна фигня. :smile:
 
Ну да... Плохо я выразился... Для тригонометрических функций все одно и тоже.. А вот для хаотических (это типа звукозапись наша) - тут фаза - одно, а полярность другое... Вроде как...
 
moi, я ж поэтому и добавил про ряд Фурье. Так вот, если некоторую волну разложить в ряд Фурье, и для каждого компонента (т.е. по сути частоты, которая представляется как a*sin(n*x) + b*cos(n*x), т.е. функция тригонометрическая) сдвинуть фазу на 180 градусов, то получим именно смену полярности.
То, что применимо к простейшим тригонометрическим функциям, то применимо и к рядам из них, а вся современная обработка звука в принципе на рядах Фурье и строится. :smile:
 
Ну, вряд ли кто-то будет делать такую примитивную операцию как "invert" через разложение в ряд Фурье, обойдутся умножением каждого отсчета на "-1".
 
SilverEye:
То, что применимо к простейшим тригонометрическим функциям, то применимо и к рядам из них, а вся современная обработка звука в принципе на рядах Фурье и строится
Не, - я конечно понимаю, что ты хочешь сказать... МОжет и я туплю.. А может если на бумажке расписывать Фурье для случ. функций - то сдвигом фазы замучаешься минус получать... А ладно, не суть... На минус домножить всех проще...
 
moi:
На минус домножить всех проще...
igorrr:
Ну, вряд ли кто-то будет делать такую примитивную операцию как \"invert\" через разложение в ряд Фурье, обойдутся умножением каждого отсчета на \"-1\".
Само собой! Но, если подойти к вопросу чисто теоретически... :biglaugh:
 
Khariton_Ustinovitch_York
Нет. Сдвиг одной компоненты будет выглядеть как
a*sin(n*(x + Pi/2)) + b* cos(n*(x + Pi/2)).
Т.е. сдвиг равен Pi/2 для любой компоненты.
 
igorrr:
Ну, вряд ли кто-то будет делать такую примитивную операцию как \"invert\" через разложение в ряд Фурье, обойдутся умножением каждого отсчета на \"-1\".

если уж вообще оптимизировать, то и умножением не обойдуцца. обойдуцца двумя операторами сложения, ибо скорость превыше всего! :smile: :smile: :smile:
 
to pse
если уж вообще оптимизировать, то и умножением не обойдуцца. обойдуцца двумя операторами сложения, ибо скорость превыше всего!
Это в смысле два раза отнять самого себя? А есть данные на сколько такая замена на писишных процах быстрее?
 
Сорри, а для каких целей это делается? Т.е. зачем менять полярность?
 
Вообще-то умножение на -1 эквивалентно замене старшего бита в двойном слове, представляющем семпл. То есть операция очень быстрая, и, насколько я помню из ассемблера, даже реализована в виде машинной команды отдельно от команд сложения и умножения.

[ADDED=SilverEye]1134670782[/ADDED]
RobertoAndy, для того, чтобы менять полярность. :smile: Иногда это становится полезным, например, при сравнении сигналов.
 
SilverEye:
Иногда это становится полезным, например, при сравнении сигналов.
Да. Лично мне захотелось увидеть действие лимитера. Сложи инвертированный сигнал волны с ней же (неиневертированной), но обработанной лимитером (без поднятия уровня). Увидишь, как утверждают мустор вносимый лимитером, но я с определением мусора несогласен... Смотрел в общем ради баловства...
 
Оценивать искажения на слух в отрыве от маскирующего их сигнала - пустая затея. Тест с вычитанием помогает оценить объективные параметры "искажений", но не их заметность.
 
Alexey Lukin:
Оценивать искажения на слух в отрыве от маскирующего их сигнала - пустая затея. Тест с вычитанием помогает оценить объективные параметры \"искажений\", но не их заметность
Я полностью согласен. Тем более то, что останется после вычитания, это как раз то чего в обработанной лимитером волне нет!
P.S. А захотел попробовать после прочтения вашей статьи, Alexey Lukin, про максимайзеры... :thumbsup:
 
А подскажите пожалуйста в Кубике2 как голос убрать?
зарание благодарствую.....
 
igorrr
Это в смысле два раза отнять самого себя? А есть данные на сколько такая замена на писишных процах быстрее?
В системе команд x86 для целочисленных данных существует специальная команда - смена знака. Эквивалентна булевой инверсии (то есть замены всех нулей на единицу и обратно) с последующим инкрементом (увеличению на единицу). Выполняется очень быстро.
 
igorrr:
Это в смысле два раза отнять самого себя? А есть данные на сколько такая замена на писишных процах быстрее?

Ну да. Отнять два раза. Насколько точно не скажу, но одну прописную истину я для себя усвоил раз и навсегда: умножение, деление и пр. выпоняются МЕДЛЕННЕЕ чем сложение и вычитание. Хотя на современных процах хз, считать такты машинного времени надо.
 
pse:
Ну да. Отнять два раза. Насколько точно не скажу, но одну прописную истину я для себя усвоил раз и навсегда: умножение, деление и пр. выпоняются МЕДЛЕННЕЕ чем сложение и вычитание.
Не стоить судить о том, о чём не имеешь никакого понятия. :smile:
Вот, например, умножение числа на любую степень двойки делается в разы быстрее всякого сложения, как и смена знака.
 
Умножение - это одно, а смена знака - другое. Эти вещи различаются именно на уровне команд процессора, как и я, и Serg196 уже говорили.
Выполнение операции смены знака, пожалуй, одна из самых быстрых команд. Для смены знака у числа всего лишь меняется старший бит в двоичном представлении.
 
pse
С математической точки зрения умножение на -1 и смена знака идентичны.
SilverEye
Умножение или деление на степень двойки - это одно, а эквивалентные им операции сдвига - это другое, хотя приводят они к одним и тем же результатам. Тем не менее, если использовать команду умножения (или деления), процессор будет именно умножать, а не проводить операцию сдвига.
Для целочисленных данных смена знака - это не смена старшего бита, а именно инверсия числа с последующим инкрементом (старший бит при этом, разумеется, меняется, если число не равно нулю), поскольку для знаковых чисел используется так называемый формат "с дополнением до нуля".
 
Serg196:
Умножение или деление на степень двойки - это одно, а эквивалентные им операции сдвига - это другое, хотя приводят они к одним и тем же результатам. Тем не менее, если использовать команду умножения (или деления), процессор будет именно умножать, а не проводить операцию сдвига.
Да блин ясен фиг. :smile: Я про то, что операция сдвига эквивалентна умножению на степень двойки, вот и всё.

Serg196:
Для целочисленных данных смена знака - это не смена старшего бита, а именно инверсия числа с последующим инкрементом (старший бит при этом, разумеется, меняется, если число не равно нулю), поскольку для знаковых чисел используется так называемый формат \"с дополнением до нуля\".
Ну я тут подзабыл всё это, т.к. не писал на ассемблере давно, поэтому что в памяти осталось - то и несу. :smile:
 

Сейчас просматривают