|
Простой вопрос по фильтрам в MATLAB, извлечение квантованных коэффициентов |
|
|
|
May 11 2006, 14:11
|
Знающий
   
Группа: Свой
Сообщений: 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)
|
|
|
|
|
 |
Ответов
(1 - 8)
|
May 12 2006, 05:39
|
Знающий
   
Группа: Свой
Сообщений: 646
Регистрация: 21-06-04
Пользователь №: 71

|
Цитата(urasinov @ May 11 2006, 20:19)  По-моему это проще делать в Filter Design он входит в MATLAB (6 точно). в результате синтеза фильтра получается массив коэффициентов, причем их можно оптимизировать для различной разрядности процессора. Увы, импорт фильтра в fdatool не помогает, он отказывается для такой структуры фильтра выдать заголовок С и коэффициенты для Xilinx.
|
|
|
|
|
May 12 2006, 12:02
|
Знающий
   
Группа: Свой
Сообщений: 646
Регистрация: 21-06-04
Пользователь №: 71

|
Цитата(jorikdima @ May 12 2006, 14:26)  А почему ИМПОРТ в fdatool? ЭКСПОРТ коэффициентов из fdatool предлагался. Запускаете утилиту, вводите параметры фильтра. Делаете design, а затем на вкладку Quantizers. Там выставляете разрядность и делаете File->Export->Workspace А можно ли в fdatool создать фильтр с компенсацией входного CIC фильтра как у меня в примере ? Экспорт в Workspace сам по себе не решит задачу - мне нужно получить квантованные коэффициенты для дальнейшего использования. Похоже задачу решает функция set2int.
|
|
|
|
|
May 13 2006, 09:03
|
Знающий
   
Группа: Свой
Сообщений: 646
Регистрация: 21-06-04
Пользователь №: 71

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

тут может быть ваша реклама
    
Группа: Свой
Сообщений: 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. По моему это не изменит параметров квантования
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|