Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Перевод коэффициентов в формат 0.15
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Fenolftalein
Здравствуйте, извините, если не совсем по теме. Есть dat-файл с коэффициентами ЦФ в десятичном виде. Кто-нибудь подскажет прогу для перевода коэффициентов в формат 0.15. (пересчитывать вручную каждый раз не улыбается)
DRUID3
Напишите скрипт...
Fenolftalein
Цитата(DRUID3 @ Oct 31 2009, 18:08) *
Напишите скрипт...

На чем? Не представляю, как писать скрипт для работы с текстом ASCII.
Не верю, что никто раньше с этим не сталкивался. Может, в том же Matlabe есть средства?
V_G
А кто будет потреблять продукт перевода? Если какой-нибудь компилятор, то может, ему можно подсунуть файл в ASCII формате? А в разные представления числа можно переводить и в Excele (с обратным экспортом в ASCII формат). Например, коэффициенты ЦФ для ассемблера adsp21XX вполне можно передавать в текстовом формате.
Fenolftalein
Цитата(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);
V_G
Я детям (студентам) в курсовом как раз даю такое задание (они проектируют ЦФ, а потом прошивают в EZ-kit lite). В экселе с включенным пакетом анализа есть функция "ДЕС.В.ШЕСТН", она дает требуемый формат. Потом просто выделяете столбец с переведенными этой функцией коэффициентами, делаете ctrl-c, а затем ctrl-v в блокнот. Фсе

Да, коэффициенты они берут из Матлаба и умножают на 16384 для получения целочисленных двухбайтовых. Если массив надо разместить в памяти программ (24-битной), домножают еще на 256.
Но это для старого ассемблера. VDSP++, возможно, засосет и просто целые десятичные числа в пределах от -32768...32767
Fenolftalein
Не подскажете, как этот пакет включить (он входит в стандартную установку)?
V_G
Нет, пакет анализа не входит в стандартную установку. В 2003 экселе Сервис->Надстройки->Установить галочку на пункте "Пакет анализа"
В OpenOffice по-моему, тоже есть, при открытии xls-файла с функцией "ДЕС.В.ШЕСТН" он какую-то аналогичную ставит на английском языке, названия не помню, типа DEC2HEX, наверное (по смыслу).
В микрософтовском офисе эта функция есть в хэлпе, почитайте. Там и про ее установку написано было
zmgor
Цитата(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
Fenolftalein
Все-таки он понимает десятичные числа, нужно только округлить и добавить 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-разрядной ячейки памяти автоматически.
Спасибо за скрипт.
qxov
Понимаю, что вопрос уже исчерпан, но (matlab)...

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

и сохранить
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.