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

 
 
> Простой вопрос по фильтрам в MATLAB, извлечение квантованных коэффициентов
Кнкн
сообщение May 11 2006, 14:11
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 646
Регистрация: 21-06-04
Пользователь №: 71



Расскажите, пожалуйста, как извлечь из 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)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
uriy
сообщение May 11 2006, 16:19
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



По-моему это проще делать в Filter Design он входит в MATLAB (6 точно). в результате синтеза фильтра получается массив коэффициентов, причем их можно оптимизировать для различной разрядности процессора.
Go to the top of the page
 
+Quote Post
Кнкн
сообщение May 12 2006, 05:39
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 646
Регистрация: 21-06-04
Пользователь №: 71



Цитата(urasinov @ May 11 2006, 20:19) *
По-моему это проще делать в Filter Design он входит в MATLAB (6 точно). в результате синтеза фильтра получается массив коэффициентов, причем их можно оптимизировать для различной разрядности процессора.


Увы, импорт фильтра в fdatool не помогает,
он отказывается для такой структуры фильтра
выдать заголовок С и коэффициенты для Xilinx.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение May 12 2006, 10:26
Сообщение #4


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



А почему ИМПОРТ в fdatool? ЭКСПОРТ коэффициентов из fdatool предлагался. Запускаете утилиту, вводите параметры фильтра. Делаете design, а затем на вкладку Quantizers. Там выставляете разрядность и делаете File->Export->Workspace
Go to the top of the page
 
+Quote Post
Кнкн
сообщение May 12 2006, 12:02
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 646
Регистрация: 21-06-04
Пользователь №: 71



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


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

Похоже задачу решает функция set2int.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение May 12 2006, 12:38
Сообщение #6


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Так для дальнейшего использования ГДЕ? К тому же что мешает из переменной в которую экспортируются коэффициенты через буфер обмена перетащить их куда угодно. Если в ПЛИС надо то можно сразу экспортировать в *.coe кажется файл, под VHDL вобщем.
По поводу компенсации не могу сказать, че такое CIC хоть?
Go to the top of the page
 
+Quote Post
Кнкн
сообщение May 13 2006, 09:03
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 646
Регистрация: 21-06-04
Пользователь №: 71



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


CIC - это тип фильтра для децимации/аппроксимации.
Экспорт коэффициентов не проблема. Вопрос о получении их
в квантованном виде. fdatool не поддерживает экспорт *.coe
для multirate фильтров.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение May 13 2006, 09:49
Сообщение #8


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Посмотрел я твой код. Если я правильно понял твой изначальный вопрос, то ты думал, что те коэффициенты которые ты получал - типа 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
Go to the top of the page
 
+Quote Post
kst
сообщение May 13 2006, 21:52
Сообщение #9


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

Группа: Свой
Сообщений: 141
Регистрация: 16-06-05
Из: Нижний Новгород
Пользователь №: 6 065



Честно говоря, не очень ясна проблема.
Я правда не могу понять что делается в исходном тексте программы - мой Матлаб 6 матерится на некоторые функции.
Но насколько я могу судить, проблема состоит в том, как из массива чисел в формате double получить целые числа?
Ведь сам файл *.coe для фильтров довольно прост. Это перечень целых чисел, хоть в двоичном, хоть в шестнадцатеричном, хоть в десятичном виде. Записать самому такой файл средствами языка Matlab не составляет труда.
Получается, что основная проблема - это перевод дробных чисел в целые? Точнее из дробного представления числа с фиксированной точкой (fixed point) в целочисленное.
Ну а это же элементарная арифметика: при разрядности дробной части f целое представление числа = a*2^f, где a - дробное представление.
Может я чего не понял?
Go to the top of the page
 
+Quote Post

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

 


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


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