Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Простой вопрос по фильтрам в MATLAB
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Вопросы системного уровня проектирования
Кнкн
Расскажите, пожалуйста, как извлечь из MATLAB'a
квантованные коэффициенты фильтра:

N = 319; % Filter order
Npow = 4; % Sinc power
w = 0.5; % Sinc frequency factor pi*M*f= 0.5*W
Apass = 0.008634;
Astop = 0.0001;
Aslope = 60; % 60 dB slope
Fpass = 8/100; % Passband-edge (norm Nyquist frequency)
cfir = firceqrip(N,Fpass,[Apass, Astop],'passedge','slope',Aslope,'invsinc',[w,Npow]);
h(2) = mfilt.firdecim(10,cfir);
set(h(2), 'Arithmetic', 'fixed', ...
'coeffWordLength', 16, ...
'coeffAutoScale', true, ...
'Signed', true, ...
'inputWordLength', 16, ...
'inputFracLength', 15, ...
'FilterInternals', 'FullPrecision');



fcfwrite(h(2),'filtcoeff')
polyphase(h(2))
выводят double
синтез hdl дает таблицу целых, но
наверняка это делается проще...
(MATLAB 2006)
uriy
По-моему это проще делать в Filter Design он входит в MATLAB (6 точно). в результате синтеза фильтра получается массив коэффициентов, причем их можно оптимизировать для различной разрядности процессора.
Кнкн
Цитата(urasinov @ May 11 2006, 20:19) *
По-моему это проще делать в Filter Design он входит в MATLAB (6 точно). в результате синтеза фильтра получается массив коэффициентов, причем их можно оптимизировать для различной разрядности процессора.


Увы, импорт фильтра в fdatool не помогает,
он отказывается для такой структуры фильтра
выдать заголовок С и коэффициенты для Xilinx.
jorikdima
А почему ИМПОРТ в fdatool? ЭКСПОРТ коэффициентов из fdatool предлагался. Запускаете утилиту, вводите параметры фильтра. Делаете design, а затем на вкладку Quantizers. Там выставляете разрядность и делаете File->Export->Workspace
Кнкн
Цитата(jorikdima @ May 12 2006, 14:26) *
А почему ИМПОРТ в fdatool? ЭКСПОРТ коэффициентов из fdatool предлагался. Запускаете утилиту, вводите параметры фильтра. Делаете design, а затем на вкладку Quantizers. Там выставляете разрядность и делаете File->Export->Workspace


А можно ли в fdatool создать фильтр с компенсацией входного CIC фильтра
как у меня в примере ?
Экспорт в Workspace сам по себе не решит задачу - мне нужно получить
квантованные коэффициенты для дальнейшего использования.

Похоже задачу решает функция set2int.
jorikdima
Так для дальнейшего использования ГДЕ? К тому же что мешает из переменной в которую экспортируются коэффициенты через буфер обмена перетащить их куда угодно. Если в ПЛИС надо то можно сразу экспортировать в *.coe кажется файл, под VHDL вобщем.
По поводу компенсации не могу сказать, че такое CIC хоть?
Кнкн
Цитата(jorikdima @ May 12 2006, 16:38) *
Так для дальнейшего использования ГДЕ? К тому же что мешает из переменной в которую экспортируются коэффициенты через буфер обмена перетащить их куда угодно. Если в ПЛИС надо то можно сразу экспортировать в *.coe кажется файл, под VHDL вобщем.
По поводу компенсации не могу сказать, че такое CIC хоть?


CIC - это тип фильтра для децимации/аппроксимации.
Экспорт коэффициентов не проблема. Вопрос о получении их
в квантованном виде. fdatool не поддерживает экспорт *.coe
для multirate фильтров.
jorikdima
Посмотрел я твой код. Если я правильно понял твой изначальный вопрос, то ты думал, что те коэффициенты которые ты получал - типа double.
На самом деле это не так. Они квантованы 16 разрядами, как ты и указал в set. Но эти 16 разрядов квантуют коэффициенты не в диапазоне [-1;1], как ты думал (мне кажется ты так думал), а в диапазоне [-0.125; +0.125].

Второй коэффициент у тебя 7.6294e-006. Если 0.125/(2^(16-1)) , то получим 3.8147e-006. Это ровно в 2 раза меньше, чем 7.6294e-006. То есть твой второй коэффициент 10'b . Попробуй в set задать 8 бит и увидишь разницу.

А вот как сделать, так чтоб коэффициенты были [-1;1], пока не знаю, но думаю чтото в настройках fixedpoint надо сделать. Или просто умножить все коэффициенты на 8. По моему это не изменит параметров квантования glare.gif
kst
Честно говоря, не очень ясна проблема.
Я правда не могу понять что делается в исходном тексте программы - мой Матлаб 6 матерится на некоторые функции.
Но насколько я могу судить, проблема состоит в том, как из массива чисел в формате double получить целые числа?
Ведь сам файл *.coe для фильтров довольно прост. Это перечень целых чисел, хоть в двоичном, хоть в шестнадцатеричном, хоть в десятичном виде. Записать самому такой файл средствами языка Matlab не составляет труда.
Получается, что основная проблема - это перевод дробных чисел в целые? Точнее из дробного представления числа с фиксированной точкой (fixed point) в целочисленное.
Ну а это же элементарная арифметика: при разрядности дробной части f целое представление числа = a*2^f, где a - дробное представление.
Может я чего не понял?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.