Pavel Proskura 1 27 сентября, 2019 Опубликовано 27 сентября, 2019 · Жалоба Добрый день. Вопрос к знатокам MATLAB. Как в MATLAB построить результирующую АЧХ дробного интерполятора, состоящего из нескольких каскадов? FVTool как я понимаю такую опцию не поддерживает. Может быть есть какие-то альтернативные варианты или инструменты применительно к MATLAB? Заранее спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 27 сентября, 2019 Опубликовано 27 сентября, 2019 · Жалоба Просто сверните между собой ИХ всех каскадов, а результат в freqz. Если каскады на разных тактовых это нужно учитывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pavel Proskura 1 27 сентября, 2019 Опубликовано 27 сентября, 2019 (изменено) · Жалоба 12 минут назад, _sda сказал: Просто сверните меду собой ИХ всех каскадов, а результат в freqz. Если каскады на разных тактовых это нужно учитывать. А как нужно учитывать разные тактовые при свертке ИХ-каскадов? В FVTool я делал так f = fvtool(hRRC, hFIR2, hFIR3, FC, 'Fs',[Fs_RRC, Fs, Fs2, Fs2]). Если бы Вы смогли привести пример или ссылку на пример, был бы Вам очень признателен. Изменено 27 сентября, 2019 пользователем Pavel Proskura Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 27 сентября, 2019 Опубликовано 27 сентября, 2019 · Жалоба Я скриптом считал дециматор. h_maf100_1100=upsample(h100,4);% суммарная ИХ всего фильтра для тактовой 1100 MHz w100maf = 20*log10(abs(freqz(h_maf100_1100,1,N,'whole'))); h100 - ИХ секции на частоте Fs/4 h_maf100_1100 - ИХ этого фильтра на частоте Fs. w100maf - АЧХ каскада для частоты Fs Все ИХ нужно пересчитать на максимальную частоту. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pavel Proskura 1 27 сентября, 2019 Опубликовано 27 сентября, 2019 (изменено) · Жалоба Попробовал использовать freqz. Все равно ругается: Error using mfilt.cascade/validateratechangefactors (line 64) Analysis of multistage-multirate filters in which interpolators follow fractional rate converters or decimators is not supported. 36 минут назад, _sda сказал: Все ИХ нужно пересчитать на максимальную частоту. Как это правильно сделать в MATLAB? Ведь если я правильно понял то, что Вы пытаетесь донести до меня, то алгоритм следующий. 1)Построить импульсные х-ки каждого каскада для своей частоты дискретизации. 2)Пересчитать ИХ для самой высокой частоты дискретизации (последний каскад интерполятора). 3)Свернуть полученные ИХ между собой (получить результирующую ИХ), для конечной частоты дискретизации. 4) воспользоваться функцией freqz. Мне не понятно как в MATLAB сделать пункт 2. Изменено 27 сентября, 2019 пользователем Pavel Proskura Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pavel Proskura 1 27 сентября, 2019 Опубликовано 27 сентября, 2019 (изменено) · Жалоба Что-то я совсем запутался. Допустим я воспользовался функцией resample для пересчета ИХ какого-либо из каскадов (не последнего). Строю АЧХ. Но АЧХ я получаю в масштабе нормированном на pi rad/sample. Т. о. я не смогу увидеть АЧХ каждого отдельно взятого каскада, и сравнить их между собой на одном графике. Мне же нужно чтобы они отображались, не как отдельно взятые фильтры нормированные на одну частоту дискретизации, а именно как фильтры нормированные каждый на свою частоту дискретизации, но при этом отрисованные в масштабе Fs/2, где Fs - частота дискретизации последнего каскада. Пример картинки как нужно приведен ниже. Не ужели в matlab нет готовой функции построения АЧХ дробного интерполятора/дециматора, в виде нескольких каскадов КИХ-фильтров? untitled.bmp Изменено 27 сентября, 2019 пользователем Pavel Proskura Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 6 27 сентября, 2019 Опубликовано 27 сентября, 2019 · Жалоба Pavel Proskura Не ужели в matlab нет готовой функции Не нужны никакие функции, это ж тривиально, то что происходит после апсемпла ИХ, просто нулевые коэффициенты добавляются между исходными. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pavel Proskura 1 27 сентября, 2019 Опубликовано 27 сентября, 2019 (изменено) · Жалоба 8 минут назад, petrov сказал: Pavel Proskura Не ужели в matlab нет готовой функции Не нужны никакие функции, это ж тривиально, то что происходит после апсемпла ИХ, просто нулевые коэффициенты добавляются между исходными. Дык, это то понятно. Вопрос в другом, как построить эти АЧХ по каскадно и результирующую, на одном графике. Но при этом, чтобы АЧХ отдельных фильтров были нормированы каждый на свою частоту дискретизации? См. картинку которую я привел. Там ресемплер трехкаскадный, но целочисленный. Не догоняю я, как тоже самое отрисовать для дробных значений. Может есть примеры скрипта именно для отрисовки? Изменено 27 сентября, 2019 пользователем Pavel Proskura Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 6 27 сентября, 2019 Опубликовано 27 сентября, 2019 · Жалоба Если понятно, то и проблем быть не должно с построеним АЧХ фильтров с нулями между коэффициентами, их свёрткой и АЧХ результирующего фильтра. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pavel Proskura 1 27 сентября, 2019 Опубликовано 27 сентября, 2019 (изменено) · Жалоба 8 часов назад, petrov сказал: Если понятно, то и проблем быть не должно с построеним АЧХ фильтров с нулями между коэффициентами, их свёрткой и АЧХ результирующего фильтра. Хорошо. Если это так тривиально, а скорее всего так оно и есть, и я действительно что то затупил, то у Вас на построение графика много времени уйти не должно мин.3-5. Постройте пожалуйста график АЧХ для двух каскадного интерполятора скажем со следующими коэфф. интерполяции первый 7/5 второй 4. На графике должны быть АЧХ каскадов и результирующая АЧХ. Полоса пропускания и неравномерность могут быть любыми - не суть. Буду очень признателен если поделитесь скриптом. Заранее спасибо. Изменено 28 сентября, 2019 пользователем Pavel Proskura Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lennox 0 27 сентября, 2019 Опубликовано 27 сентября, 2019 (изменено) · Жалоба %% Overall FREQ RESPONSE filtCasc = dsp.FilterCascade(HB_1,HB_2,HB_3,FIR); f = fvtool(HB_1, HB_2, HB_3, FIR, filtCasc, ... 'ShowReference','off', ... 'NumberofPoints', 8192*128, ... 'Fs', [1e9 0.5e9 0.25e9 0.125e9 1e9]); f.NormalizeMagnitudeto1 = 'on'; legend(f,'HB1','HB2','HB3','FIR', ... 'Overall Response'); filterspec = 'Transition width and stopband attenuation'; %% HB1 Fs = 4e9; TW = 400e6; HB_1 =dsp.FIRHalfbandDecimator('Specification',filterspec, ... 'StopbandAttenuation',80, ... 'TransitionWidth',TW, ... 'SampleRate',Fs); HB_1_Num = HB_1.coeffs.Numerator; интерполировать ИХ всех каскадов до исходной Fs. свернуть все и freqz Изменено 27 сентября, 2019 пользователем dcs Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pavel Proskura 1 27 сентября, 2019 Опубликовано 27 сентября, 2019 · Жалоба 15 минут назад, dcs сказал: %% Overall FREQ RESPONSE Спасибо за ответ. Но увы данная конструкция будет работать только с целочисленными коэфф. преобразования. 16 минут назад, dcs сказал: 'Fs', [1e9 0.5e9 0.25e9 0.125e9 1e9]); Т.е. 2 4 8. Я спрашивал про дробные значения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 28 сентября, 2019 Опубликовано 28 сентября, 2019 · Жалоба 9 часов назад, Pavel Proskura сказал: Я спрашивал про дробные значения. Что то я никак не могу вас понять. В чём ваша проблема? Какая разница целочисленные или дробные значения коэффициентов? Физика процессов от этого не меняется. Ну поставьте вместо моего upsample свой resample и получите своё семейство АЧХ приведенное на максимальную Fs. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pavel Proskura 1 28 сентября, 2019 Опубликовано 28 сентября, 2019 (изменено) · Жалоба Добрый вечер. Вот я вроде бы попросил постом выше построить в качестве примера тривиальную казалось бы вещь. Двух каскадный интерполятор. При этом отрисовать АЧХ мне требовалось как на картинке которую приводил я. Вместо этого мне второй день заявляют что проблемы никакой нет. Только вот АЧХ в том виде в котором я просил, так никто и не отрисовал. dcs привел скрипт аналогичный моему. Вот попробуйте поставить туда не кратные значения преобразования частоты дискретизации и запустить fvtools или freqz. А после скажите, есть проблема или ее нет. А также есть разница с точки зрения алгоритма matlab между целочисленными и дробными коэффициентами. Извините но график который Вы привели меня не устраивает. Даже ошибку привел которая вылетает Error using mfilt.cascade/validateratechangefactors (line 64)Analysis of multistage-multirate filters in which interpolators follow fractionalrate converters or decimators is not supported. А теперь внимание второй вопрос, если разницы между дробными и целыми коэфф. никакой нет, то какого хрена для дробных значений matlab АЧХ отрисовать не может? Вот и мне этот момент не понятен??? Изменено 29 сентября, 2019 пользователем Pavel Proskura Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 29 сентября, 2019 Опубликовано 29 сентября, 2019 · Жалоба Но вы же не слушаете советы мои и dcs. Функции freqz глубоко до лампочки как была получена подсовываемая ей ИХ (с целыми или дробными коэффициентами) поэтому она ругаться на дробный ресемплер просто не умеет. Ваша ошибка из другой оперы. Вам указали в каком направлении двигаться, а за вас писать скрипты никто не будет. Можно только кинуть что нибудь похожее готовое. У меня,например, дома и матлаба нет, а на работе три проекта в параллель ведутся, много ли свободного времени? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться