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

 
 
 
Reply to this topicStart new topic
> Перевод коэффициентов в формат 0.15
Fenolftalein
сообщение Oct 31 2009, 14:03
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 20-10-09
Пользователь №: 53 097



Здравствуйте, извините, если не совсем по теме. Есть dat-файл с коэффициентами ЦФ в десятичном виде. Кто-нибудь подскажет прогу для перевода коэффициентов в формат 0.15. (пересчитывать вручную каждый раз не улыбается)
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Oct 31 2009, 14:08
Сообщение #2


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Напишите скрипт...


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
Fenolftalein
сообщение Oct 31 2009, 14:12
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 20-10-09
Пользователь №: 53 097



Цитата(DRUID3 @ Oct 31 2009, 18:08) *
Напишите скрипт...

На чем? Не представляю, как писать скрипт для работы с текстом ASCII.
Не верю, что никто раньше с этим не сталкивался. Может, в том же Matlabe есть средства?
Go to the top of the page
 
+Quote Post
V_G
сообщение Oct 31 2009, 15:24
Сообщение #4


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

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



А кто будет потреблять продукт перевода? Если какой-нибудь компилятор, то может, ему можно подсунуть файл в ASCII формате? А в разные представления числа можно переводить и в Excele (с обратным экспортом в ASCII формат). Например, коэффициенты ЦФ для ассемблера adsp21XX вполне можно передавать в текстовом формате.
Go to the top of the page
 
+Quote Post
Fenolftalein
сообщение Oct 31 2009, 15:45
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 20-10-09
Пользователь №: 53 097



Цитата(V_G @ Oct 31 2009, 19:24) *
А кто будет потреблять продукт перевода? Если какой-нибудь компилятор, то может, ему можно подсунуть файл в ASCII формате? А в разные представления числа можно переводить и в Excele (с обратным экспортом в ASCII формат). Например, коэффициенты ЦФ для ассемблера adsp21XX вполне можно передавать в текстовом формате.

Потреблять будет ADSP-21xx. Использую VDSP++3.5 Я инициализирую массив коэффициентов в PM из файла:
.section/pm pm_da;
.VAR coef[K]="coef_table.dat";
Проблема в том, что компилятор ругается, если числа в dat-файле в десятичном представлении.
Пример:
Фрагмент dat-файла
-0.00091909820846825603
-0.0027176960265955
-0.0024869527598323101
0.0036614383835070902
0.0136509252306624
0.017351165901093299
0.0076653061904216804
-0.0065547188696423999
-0.0076967840370653602
выдает синтактическую ошибку

Но если
0xbf4e
0xbf66
0xbf64
0x3f6d
0x3f8b
0x3f91
0x3f7f
0xbf7a
0xbf7f
все в порядке

Еще меня смущает, что Matlab представляет отрицательные числа в дополнительном коде, поймет ли MAC DSP такую форму записи?
Пример:
MR=MR+MX0*MY0(SS);
Go to the top of the page
 
+Quote Post
V_G
сообщение Oct 31 2009, 18:15
Сообщение #6


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

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Я детям (студентам) в курсовом как раз даю такое задание (они проектируют ЦФ, а потом прошивают в EZ-kit lite). В экселе с включенным пакетом анализа есть функция "ДЕС.В.ШЕСТН", она дает требуемый формат. Потом просто выделяете столбец с переведенными этой функцией коэффициентами, делаете ctrl-c, а затем ctrl-v в блокнот. Фсе

Да, коэффициенты они берут из Матлаба и умножают на 16384 для получения целочисленных двухбайтовых. Если массив надо разместить в памяти программ (24-битной), домножают еще на 256.
Но это для старого ассемблера. VDSP++, возможно, засосет и просто целые десятичные числа в пределах от -32768...32767

Сообщение отредактировал V_G - Oct 31 2009, 18:21
Go to the top of the page
 
+Quote Post
Fenolftalein
сообщение Nov 2 2009, 16:54
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 20-10-09
Пользователь №: 53 097



Не подскажете, как этот пакет включить (он входит в стандартную установку)?
Go to the top of the page
 
+Quote Post
V_G
сообщение Nov 3 2009, 00:15
Сообщение #8


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

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Нет, пакет анализа не входит в стандартную установку. В 2003 экселе Сервис->Надстройки->Установить галочку на пункте "Пакет анализа"
В OpenOffice по-моему, тоже есть, при открытии xls-файла с функцией "ДЕС.В.ШЕСТН" он какую-то аналогичную ставит на английском языке, названия не помню, типа DEC2HEX, наверное (по смыслу).
В микрософтовском офисе эта функция есть в хэлпе, почитайте. Там и про ее установку написано было

Сообщение отредактировал V_G - Nov 3 2009, 00:19
Go to the top of the page
 
+Quote Post
zmgor
сообщение Nov 3 2009, 09:58
Сообщение #9





Группа: Новичок
Сообщений: 1
Регистрация: 16-06-05
Пользователь №: 6 053



Цитата(Fenolftalein @ Oct 31 2009, 17:03) *
Здравствуйте, извините, если не совсем по теме. Есть dat-файл с коэффициентами ЦФ в десятичном виде. Кто-нибудь подскажет прогу для перевода коэффициентов в формат 0.15. (пересчитывать вручную каждый раз не улыбается)


Матлаб


a=[-0.00091909820846825603
-0.0027176960265955
-0.0024869527598323101
0.0036614383835070902
0.0136509252306624
0.017351165901093299
0.0076653061904216804
-0.0065547188696423999
-0.0076967840370653602];

b = num2hex(quantizer('double'),a);
for(n=1:size(b,1))
%sprintf(fd, '0x%s\n\r', b(n,1:4)') % fd - дескриптор открытого файла
disp(sprintf('0x%s', b(n,1:4)'))
end
Go to the top of the page
 
+Quote Post
Fenolftalein
сообщение Nov 4 2009, 08:45
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 20-10-09
Пользователь №: 53 097



Все-таки он понимает десятичные числа, нужно только округлить и добавить r. Пример
-0.0009r
-0.0027r
-0.0025r
0.0037r
0.0137r
0.0173r
0.0077r
Округляю в матлабе
bq=round(b*65536)/65536; % округление коэфф-ов b (формат 1.15)
[hq,f]=freqz(bq); %проверка влияния округления коэффициентов на АЧХ
После вставляю в dat-файл. Компилятор автоматически переводит в формат 1.15.
Кстати, насчет умножения на 256, для размещения в памяти программ.
При инициализации массива из файла коэффициенты размещаются в старших 16 битах
24-разрядной ячейки памяти автоматически.
Спасибо за скрипт.

Сообщение отредактировал Fenolftalein - Nov 4 2009, 08:48
Go to the top of the page
 
+Quote Post
qxov
сообщение Dec 10 2009, 10:40
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 86
Регистрация: 22-03-07
Из: Санкт-Петербург
Пользователь №: 26 406



Понимаю, что вопрос уже исчерпан, но (matlab)...

load coef_table.dat
q15 = round(coef_table*32767.5);

и сохранить
Go to the top of the page
 
+Quote Post

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

 


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


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