реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Конвертация числа, О том как из слона сделать ёжика
kanzler
сообщение Jun 23 2006, 04:31
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 340
Регистрация: 27-02-06
Из: Екатеринбург
Пользователь №: 14 728



Использую полосовой фильтр 16 порядка, параметры которого:
1. разрядность входных данных - 16 бит.
2. разрядность коэффициентов - 8 бит.
3. каскадны фильтр с количеством каскадов 2-го порядка - 8.

Результат получается разрядностью 24 бита, как преобразовать результат в число с разрядностью 16 бит без потери младших разрядов?
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jun 23 2006, 05:03
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(kanzler @ Jun 23 2006, 07:31) *
Результат получается разрядностью 24 бита, как преобразовать результат в число с разрядностью 16 бит без потери младших разрядов?

Вы ж понимаете --- чудес-то не бывает. Не хотите терять младшие --- потеряете старшие.
Go to the top of the page
 
+Quote Post
kanzler
сообщение Jun 23 2006, 06:35
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 340
Регистрация: 27-02-06
Из: Екатеринбург
Пользователь №: 14 728



Цитата(andrew_b @ Jun 23 2006, 11:03) *
Вы ж понимаете --- чудес-то не бывает. Не хотите терять младшие --- потеряете старшие.


Понимаю что чудес нет, но может существуют способы преобразовать в 16 бит без потери?
Go to the top of the page
 
+Quote Post
bve
сообщение Jun 23 2006, 07:48
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 316
Регистрация: 20-02-05
Из: Ленинградская обл.
Пользователь №: 2 765



Цитата(kanzler @ Jun 23 2006, 08:31) *
Использую полосовой фильтр 16 порядка, параметры которого:
1. разрядность входных данных - 16 бит.
2. разрядность коэффициентов - 8 бит.
3. каскадны фильтр с количеством каскадов 2-го порядка - 8.

Результат получается разрядностью 24 бита, как преобразовать результат в число с разрядностью 16 бит без потери младших разрядов?


Простите, а при разрядности коэффициентов - 8, зачем Вам 16 бит входных данных?
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jun 23 2006, 08:24
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(bve @ Jun 23 2006, 10:48) *
Простите, а при разрядности коэффициентов - 8, зачем Вам 16 бит входных данных?

А каким образом связаны разрядности коэффициентов и данных?
Go to the top of the page
 
+Quote Post
kanzler
сообщение Jun 23 2006, 09:34
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 340
Регистрация: 27-02-06
Из: Екатеринбург
Пользователь №: 14 728



Цитата(andrew_b @ Jun 23 2006, 14:24) *
Цитата(bve @ Jun 23 2006, 10:48) *

Простите, а при разрядности коэффициентов - 8, зачем Вам 16 бит входных данных?

А каким образом связаны разрядности коэффициентов и данных?


Вот и я думаю что они не связаны. Нужно всего лишь преобразовать число из 24 бит в 16 бит без потери информации.
Go to the top of the page
 
+Quote Post
vvs157
сообщение Jun 23 2006, 10:12
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(kanzler @ Jun 23 2006, 10:35) *
Цитата(andrew_b @ Jun 23 2006, 11:03) *

Вы ж понимаете --- чудес-то не бывает. Не хотите терять младшие --- потеряете старшие.


Понимаю что чудес нет, но может существуют способы преобразовать в 16 бит без потери?


Это как? У Вас есть 24 битное число - это десятичное число - от 0 до 16777215 и Вы хотите взаимно однозначным преобразованием превратить его в 16 битное число от 0 до 65535 без потери точности. Это невозможно в принципе.
Go to the top of the page
 
+Quote Post
IgorV
сообщение Jun 23 2006, 10:13
Сообщение #8





Группа: Новичок
Сообщений: 11
Регистрация: 24-01-06
Пользователь №: 13 549



Преобразовывая 24 бита в 16 не потерять информацию можно только если есть 8 незначащих разрядов, если их нет или их меньше, то потеря информации будет все равно, как ни крути
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 23 2006, 13:32
Сообщение #9


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(kanzler @ Jun 23 2006, 03:31) *
Использую полосовой фильтр 16 порядка, параметры которого:
1. разрядность входных данных - 16 бит.
2. разрядность коэффициентов - 8 бит.
3. каскадны фильтр с количеством каскадов 2-го порядка - 8.

Результат получается разрядностью 24 бита, как преобразовать результат в число с разрядностью 16 бит без потери младших разрядов?


Здесь вы неправы, результат теоретически должен быть 28 бит, поскольку умножение 8-битного коэффициента на 16-битное данное даёт 24 бита, плюс сложение 16 таких 24-битных произведений. Итого 28 бит. Кстати, динамический диапазон составит 168 дБ, такие сигналы только с Луны принимать(:-).

Так что, если вы определитесь с требуемым динамическим диапазоном результатов фильтрации и максимальным выходным значением результата фильтрации, просто сдвиньте ваш результат на n вправо и оставьте только старшие 16-бит.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Doka
сообщение Jul 3 2006, 10:20
Сообщение #10


Electrical Engineer
******

Группа: СуперМодераторы
Сообщений: 2 163
Регистрация: 4-10-04
Пользователь №: 778



Цитата(kanzler @ Jun 23 2006, 08:31) *
Использую полосовой фильтр 16 порядка, параметры которого:
...
3. каскадны фильтр с количеством каскадов 2-го порядка - 8.
...


судя по этой строке у Вас всёже БИХ-фильтр, сконструированный из секций 2го порядка
странно как у вас при 8бит на коэфф. ЧХ не разваливаются :-/
Вы уверены в том, что после каждого каскада у Вас не происходит округления и ваши 24 бит обеспечивает лишь последний (кстати, 1 из 8ми) каскад округление результата которого "погоду уже не делают" ?!?!


--------------------
Блог iDoka.ru
CV linkedin.com/in/iDoka
Sources github.com/iDoka


Never stop thinking...........................
Go to the top of the page
 
+Quote Post
Atashi
сообщение Jul 8 2006, 20:18
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 66
Регистрация: 30-04-05
Пользователь №: 4 630



"
Здесь вы неправы, результат теоретически должен быть 28 бит, поскольку умножение 8-битного коэффициента на 16-битное данное даёт 24 бита, плюс сложение 16 таких 24-битных произведений. Итого 28 бит.
"

Боюсь, мне трудно согласиться с этим утверждением.
ДЛИНА, она же разрядность, действительно увеличится. Но ТОЧНОСТЬ будет по-прежнему определяться точностью наименее точного компонента. И, как ни странно, действительно 16-р-ный выход может быть получен из ВОТ ТЕХ 24-х без потери точности! потому как они сами давно неточные. только это надо делать не ПОТОМ, а ДО ТОГО, т.е. отбрасывать лишнее в каждом члене, - что б Вы потом с ними ни делали.
Откровенно, я как-то давненько не занимался вопросами точности в таком аспекте, но не думаю, что сильно ошибаюсь. Навскидку, младших можно смело мочить, - но все ж подумать бы сначала неплохо. Как всегда, не настаиваю, а подсказываю направление... Удобная позиция, а?!

Сообщение отредактировал Atashi - Jul 8 2006, 20:19
Go to the top of the page
 
+Quote Post
Atashi
сообщение Jul 10 2006, 07:57
Сообщение #12


Участник
*

Группа: Новичок
Сообщений: 66
Регистрация: 30-04-05
Пользователь №: 4 630



мы здесь с коллегами посоветовались и решили расстроить Вас еще раз.
после перемножения 1-байтного на 2-байтный точность (!) результата будет соответствовать точности 1-байтного компонента. так что из результирующих 28 бит можно отбрасывать все, что начинается во втором слева байте.
можно привести формулу или сослаться на раздел "приближенные вычисления", но лучше приведу наглядное.
если измерить диаметр детали и получить "3 пальца", то, перемножая на пи с точностью до 707-го знака, все равно точность длины окружности будет +/- 1 палец.
резюме. отбрасывайте лишнее смело - оно все равно где-то потом отбросится.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 10 2006, 12:53
Сообщение #13


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Здесь вы неправы, результат теоретически должен быть 28 бит, поскольку умножение 8-битного коэффициента на 16-битное данное даёт 24 бита, плюс сложение 16 таких 24-битных произведений. Итого 28 бит.

Цитата(Atashi @ Jul 8 2006, 19:18) *
Боюсь, мне трудно согласиться с этим утверждением.

Это с каким же утверждением? Что сумма 16-ти произведений 16-разрядных чисел и 8-разрядных чисел ТЕОРЕТИЧЕСКИ укладывается в 28 разрядов? В принципе легко показать, что результат может превысить 24 разряда. Попробуйте привести пример обратного, что результат никогда не превысит 24 бит(:-).

Цитата(Atashi @ Jul 8 2006, 19:18) *
ДЛИНА, она же разрядность, действительно увеличится.
Но ТОЧНОСТЬ будет по-прежнему определяться точностью наименее точного компонента.

Точность определяется парой чисел, увы! Автор определил разрядность входных чисел,
и вы не вправе произвольно менять их точность. Она задана!

Цитата(Atashi @ Jul 8 2006, 19:18) *
И, как ни странно, действительно 16-р-ный выход может быть получен из ВОТ ТЕХ 24-х без потери точности! потому как они сами давно неточные. только это надо делать не ПОТОМ, а ДО ТОГО, т.е. отбрасывать лишнее в каждом члене, - что б Вы потом с ними ни делали.

Ничего не понятно, поясните.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 10 2006, 13:29
Сообщение #14


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



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

Цитата(Atashi @ Jul 10 2006, 06:57) *
мы здесь с коллегами посоветовались и решили расстроить Вас еще раз.
после перемножения 1-байтного на 2-байтный точность (!) результата будет соответствовать точности 1-байтного компонента. так что из результирующих 28 бит можно отбрасывать все, что начинается во втором слева байте.

Ну во-первых, там не только перемножение, но еще и сложение произведений, почему вы игнорируете вклад суммирования? Во-вторых, я думаю, автор выбрал 16-битные входные числа, исходя из динамического диапазона, т.е. они могут меняться от 1 до 65535 или вгрубе 96 дБ. И любой сигнал вы обязаны обработать. Однако, следуя вашей логике, входной 4-битный сигнал даст нуль на выходе фильтра. Фактически вы советуете автору: ерунда, вместо 16-битного ацп можно воспользоваться 12-битным... Ну а то, что входной диапазон чисел вместо 96 дБ стал 72 - ничего страшного..."можно отбрасывать".

Цитата(Atashi @ Jul 10 2006, 06:57) *
можно привести формулу или сослаться на раздел "приближенные вычисления", но лучше приведу наглядное.
если измерить диаметр детали и получить "3 пальца", то, перемножая на пи с точностью до 707-го знака, все равно точность длины окружности будет +/- 1 палец.

Зато точность измерения длины окружности не будет искажена числом "пи". А вот если вы вместо 707 знаков возьмете 3.1 к качестве "пи", то точность длины окружности будет зависеть не только от точности измерения диаметра, но и от "квази-пи".

Кстати, мы не знаем почему и как автор выбирал свои 8-битные коэффициенты. Теоретически опять же, может оказаться так, что это усеченные 16-битные, просто так счастливо совпало для его задачи, что все младшие восемь бит - нулевые.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Atashi
сообщение Jul 11 2006, 08:06
Сообщение #15


Участник
*

Группа: Новичок
Сообщений: 66
Регистрация: 30-04-05
Пользователь №: 4 630



ОЧЕНЬ боюсь, что вновь не смогу согласиться... (боюсь - но пишу!)
начну, как все мы, с конца.
да, точность ПИ влияет. Если вычислить пи/256=0,0123..., то при такой дискретизации (8 бит) придется брать пи не хуже, чем до третьего знака. в любом случае, все вычисляется.
об остальном спорить не буду, тк все уже сказал. Как говорили древние, sapienti sat.
как почти всегда на форумах, исходные данные описываются не полностью или неконкретно. ПОЧЕМУ у него там 8, а не-там 16 бит - только автору известно. работаем с тем, что есть.
а вообще, сложно все это...

ps. (x+delta)*(y+delta^2)=... дельта - погрешность 8 бит,
в квадрате - это частный случай, когда 16 бит... итд. дальше все само получается. (ТО ЖЕ и при сложении, и даже при вычитании)
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 06:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01481 секунд с 7
ELECTRONIX ©2004-2016