_sda 0 25 августа, 2021 Опубликовано 25 августа, 2021 · Жалоба Matlab R2016b. Коллеги, чтобы не изобретать велосипед решил попробовать сгенерить HDL для fractional-rate фильтра. Фильтр мне сгенерили полифазный с шестью фазами, коэффициент преобразования частоты дискретизации я заказывал равный 7/5. В итоге при симуляции получилась вот такая ерунда. Похоже есть путаница с фазами или с отсчётами ИХ. Кто нибудь пользовался сгенерёнными в матлабе HDL-файлами? Как впечатление? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 25 августа, 2021 Опубликовано 25 августа, 2021 · Жалоба Может в первую очередь стоит взять Матлаб поновее? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 25 августа, 2021 Опубликовано 25 августа, 2021 · Жалоба А что, со старыми версиями действительно есть проблемы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syoma 1 25 августа, 2021 Опубликовано 25 августа, 2021 · Жалоба 14 minutes ago, _sda said: А что, со старыми версиями действительно есть проблемы? Ну HDL Coder у них достаточно шустро развивается, поэтому вполне возможно, что что-то пофиксили уже. Во вторых на более новые версии легче найти суппорт. В третьих - на крайняк - вот у меня 2016 уже года два, как не стоит, а есть только 2018b и новее, поэтому я тупо не могу смоделировать вашу проблему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 25 августа, 2021 Опубликовано 25 августа, 2021 · Жалоба Ok! Попробую поставить R2021а. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stealthisname 7 25 августа, 2021 Опубликовано 25 августа, 2021 · Жалоба 6 hours ago, _sda said: Кто нибудь пользовался сгенерёнными в матлабе HDL-файлами? Как впечатление? пользуюсь сгенеренными в симулинке HDL файлами, впечатления хорошие очень похоже, что для Вашего случая подойдет блок FIR Rate Conversion HDL Optimized для проверки блока с дискретизацией 7/5 я использовал такие параметры результаты моделирования с входной дискретизацией как в Вашем случае (входной отсчет раз в два такта) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stealthisname 7 25 августа, 2021 Опубликовано 25 августа, 2021 · Жалоба удалось сгенерировать похожий в матлабе в Filter Designer после экспорта в .m файл генерируется с такого скрипта % MATLAB Code % Generated by MATLAB(R) 9.2 and the DSP System Toolbox 9.4. % Generated on: 25-Aug-2021 23:28:00 % FIR least-squares Lowpass filter designed using the FIRLS function. % All frequency values are in Hz. Fs = 14; % Sampling Frequency N = 70; % Order Fpass = 0.9; % Passband Frequency Fstop = 1.1; % Stopband Frequency Wpass = 1; % Passband Weight Wstop = 1; % Stopband Weight % Calculate the coefficients using the FIRLS function. b = firls(N, [0 Fpass Fstop Fs/2]/(Fs/2), [1 1 0 0], [Wpass Wstop]); intf = 7; % Interpolation Factor decf = 5; % Decimation Factor Hd = dsp.FIRRateConverter( ... 'InterpolationFactor', intf, ... 'DecimationFactor', decf, ... 'Numerator', b, ... 'CoefficientsDataType', 'Custom', ... 'CustomCoefficientsDataType', numerictype([],16,17)); generatehdl(Hd, 'ResetType', 'Synchronous',... 'EDAScriptGeneration', 'off',... 'Name', 'Filter_fract_rate_fdatool',... 'TargetLanguage', 'Verilog',... 'InputDataType',numerictype(1,16,15)); результаты моделирования такого фильтра получились похожими в самом Filter Designer были выбраны такие настройки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 26 августа, 2021 Опубликовано 26 августа, 2021 · Жалоба Спасибо за желание помочь. Вот как выглядит мой скрипт, генерировал его здесь: function filter_generatehdl(filtobj) % FILTER_GENERATEHDL Function to generate HDL for filter object. % Generated by MATLAB(R) 9.1 and the Filter Design HDL Coder 3.1. % Generated on: 2021-08-26 09:12:56 % ------------------------------------------------------------- % HDL Code Generation Options: % TargetLanguage: VHDL % OptimizeForHDL: on % UseRisingEdge: on % TargetDirectory: D:\MyDesigns\2021\elecnronix\7_5 % TestBenchStimulus: step ramp chirp noise % GenerateHDLTestbench: on % % Filter Settings: % Discrete-Time FIR Multirate Filter (real) % ----------------------------------------- % Filter Structure : Direct-Form FIR Polyphase Sample-Rate Converter % Interpolation Factor : 7 % Decimation Factor : 5 % Polyphase Length : 6 % Filter Length : 41 % Stable : Yes % Linear Phase : Yes (Type 1) % % Arithmetic : fixed % Numerator : s16,15 -> [-1 1) % Input : s16,15 -> [-1 1) % Filter Internals : Specify Precision % Output : s16,15 -> [-1 1) % Product : s28,27 -> [-1 1) % Accumulator : s28,27 -> [-1 1) % Round Mode : convergent % Overflow Mode : wrap % ------------------------------------------------------------- % Generating HDL code generatehdl(filtobj, 'TargetLanguage', 'VHDL',... 'OptimizeForHDL', 'on',... 'UseRisingEdge', 'on',... 'TargetDirectory', 'D:\MyDesigns\2021\elecnronix\7_5',... 'TestBenchStimulus', {'step', 'ramp', 'chirp', 'noise'},... 'GenerateHDLTestbench', 'on'); % [EOF] Обратил внимание что у вас версия на единичку больше моей. Предлагаю тайм аут, установлю матлаб поновее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
warrior-2001 0 26 августа, 2021 Опубликовано 26 августа, 2021 · Жалоба 1 час назад, _sda сказал: Предлагаю тайм аут, установлю матлаб поновее. Очень советую собирать всё не в Матлабе а в Симулинке! С Вашими знаниями в части ПЛИС вы так намного быстрее получите результат. Мы по совету в том числе и сотрудников Экспоненты (правда неофициально, ибо не могут они так в лоб сравнивать продукты) пошли в этом направлении и пока видим только плюсы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 26 августа, 2021 Опубликовано 26 августа, 2021 · Жалоба 57 минут назад, warrior-2001 сказал: Очень советую собирать всё не в Матлабе а в Симулинке! С Вашими знаниями в части ПЛИС вы так намного быстрее получите результат. Мы по совету в том числе и сотрудников Экспоненты (правда неофициально, ибо не могут они так в лоб сравнивать продукты) пошли в этом направлении и пока видим только плюсы. Спасибо, обязательно попробую в симулинке. А как там насчёт быстродействия? Тот HDL который мне сгенерил Filter Designer имел максимальную тактовую 65 МГц. Часик пошаманил, увеличил до 180 МГц. Напрягает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
warrior-2001 0 26 августа, 2021 Опубликовано 26 августа, 2021 · Жалоба Тут так всегда будет. Сперва час потратил на сборку логики, и потом день - на оптимизацию по частоте! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 26 августа, 2021 Опубликовано 26 августа, 2021 · Жалоба 45 минут назад, warrior-2001 сказал: Тут так всегда будет. Сперва час потратил на сборку логики, и потом день - на оптимизацию по частоте! Ясно, значит губы закатаем. Я лет 10 назад попробовал генерацию HDL - не понравилось именно из-за быстродействия, думал может за это время как-то продвинулись. Кстати, попробовал сгенерить файл фильтра в R2019b - HDL отличается от созданного в R2016b только датой создания Коллеги, уж очень поджимает время, если я выложу файл filter.fda сможет ли кто сгенерить файл filter.vhd и скрипт для его генерации? Эта задача однократная, с симулинком я тоже лет 10 не работал, вангую что уйдёт времени немеряно на освоение кодера в симулинке и не факт что поможет. Ресемплинг у фильтра теперь будет 20/13. frac_filter_2019b.fda Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 26 августа, 2021 Опубликовано 26 августа, 2021 · Жалоба 15 часов назад, stealthisname сказал: Странная ситуация. Я сформировал примерно такой же скрипт как вы показали. Если я формирую нужную ИХ такой строчкой (как у вас) b = firls(N, [0 Fpass Fstop Fs/2]/(Fs/2), [1 1 0 0], [Wpass Wstop]); то фильтр работает адекватно. Если же я (ничего остального не меняя) формирую ИХ экспортом из Filter Designer то всё ломается. b = Num; Порядки фильтров сделал одинаковыми. В самом тексте фильтра изменяются только коэффициенты. Тихо шифером шурша.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 26 августа, 2021 Опубликовано 26 августа, 2021 · Жалоба 18 часов назад, stealthisname сказал: А попробуйте сгенерировать HDL для коэффициента не 7/5 а 13/5. У меня получилось вот так: Работает только при малых коэффициентах? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stealthisname 7 26 августа, 2021 Опубликовано 26 августа, 2021 · Жалоба 2 hours ago, _sda said: А попробуйте сгенерировать HDL для коэффициента не 7/5 а 13/5. У меня получилось вот так: для проверки преобразования частоты с коэффициентом 7/5 я использовал импульсную характеристику по такому образцу b = firls(N, [0, 0.9*(1/7), 1.1*(1/7), 1], [1 1 0 0], [Wpass Wstop]); специально, чтобы фильтр оставлял примерно 1/7 полосы после интерполирования в 7 раз для преобразования частоты с коэффициентом 13/5 такая ИХ не подойдет, так как необходимо , чтобы фильтр оставлял примерно 1/13, с ИХ по такому образцу b = firls(N, [0, 0.9*(1/13), 1.1*(1/13), 1], [1 1 0 0], [Wpass Wstop]); при этом для достижения заданных характеристик фильтра потребуется больший порядок (N) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться