Перейти к содержанию
    

Farrow fractional delay filter в симулинке. Кто-нибудь делал?

Это не так. АЧХ интерполятора не превышает 1 при 0 <= |optimal_mu| <= 1, а это abs(signal_out) > abs(singal_in) может легко выполняться. ;)

а разве АЧХ это не отношение амплитуды выходного сигнала ко входному ? :) при аппаратной реализации амплитуды могут быть любые (никто не запрещает усиливать сигнал), но в матлабе на float я ни разу не видел что бы выходной сигнал интерполятора был больше входного (при работе в оптимальном диапазоне ест-но). Если бы у нас был апроксиматор, тогда все возможно, но у нас же интерполятор ;) Если у вас другие сведения, то приведите модельку, позырить %)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а разве АЧХ это не отношение амплитуды выходного сигнала ко входному ? :) при аппаратной реализации амплитуды могут быть любые (никто не запрещает усиливать сигнал), но в матлабе на float я ни разу не видел что бы выходной сигнал интерполятора был больше входного (при работе в оптимальном диапазоне ест-но). Если бы у нас был апроксиматор, тогда все возможно, но у нас же интерполятор ;) Если у вас другие сведения, то приведите модельку, позырить %)

 

Так интерполированное значение может превышать значения из которых оно вычислялось, амплитуда сигнала при этом не меняется, просто получаем другие отсчёты сигнала, не всегда же исходные отсчёты на максимум приходятся, а если они впритык разрядной сетки были, будет переполнение, может это и редкая ситуация но всё равно нужно о ней помнить и гарантировать что она не возникнет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так интерполированное значение может превышать значения из которых оно вычислялось, амплитуда сигнала при этом не меняется, просто получаем другие отсчёты сигнала, не всегда же исходные отсчёты на максимум приходятся, а если они впритык разрядной сетки были, будет переполнение, может это и редкая ситуация но всё равно нужно о ней помнить и гарантировать что она не возникнет.

а вон вы про что, теперь понятно откуда такое замечание %) в своем посте я имел в виду соотношение максимальных амплитуд, а не конкретных сигналов. Если мне память не изменяет даже если подать максимальную константу на интерполятор и прогнать все возможные задержки больше единицы не будет (разве что за счет округления). Но в реальных условиях так почти никогда не будет %) (в модемах это 100%)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а вон вы про что, теперь понятно откуда такое замечание %) в своем посте я имел в виду соотношение максимальных амплитуд, а не конкретных сигналов. Если мне память не изменяет даже если подать максимальную константу на интерполятор и прогнать все возможные задержки больше единицы не будет (разве что за счет округления). Но в реальных условиях так почти никогда не будет %) (в модемах это 100%)

 

А если импульс подать с максимальной полосой и амлитудой, но чтобы не было отсчёта на максимуме, никогда - слишком сильное утверждение. Как пример в литературе по OFDM часто рассматривается вопрос интерполяции после iFFT, как раз тут будут значения впритык к разрядной сетке и на выходе интерполятора возможно превышение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если импульс подать с максимальной полосой и амлитудой, но чтобы не было отсчёта на максимуме,

вот таких реальных сигналов я не видел

 

никогда - слишком сильное утверждение.

запас в 6-12 дБ на вабросы на АРУ перед фарроу никуда не девается %)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще интересно оказалось: сделал фильтр фарроу шестого порядка, SingleRateFIR из Advanced Blockset заработали после того, как все коэффициенты уменьшил в сто раз, т.е. так, чтобы после запятой первые две цифры нулями были, после этого стал нормально умножать - не понял юмора честно говоря :laughing: А с округлением вообще все просто оказалось: просто тупо после каждой операции блок convert надо было ставить, он округляет число до нужной разрядности, сохраняя физическое значение. Принципиально, что после каждой операции, которая ведет к увеличению разрядности, надо ставить. А так шикарно работает!

 

З.Ы. Всем еще раз огромное спасибо за советы!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще интересно оказалось: сделал фильтр фарроу шестого порядка, SingleRateFIR из Advanced Blockset заработали после того, как все коэффициенты уменьшил в сто раз, т.е. так, чтобы после запятой первые две цифры нулями были, после этого стал нормально умножать - не понял юмора честно говоря :laughing: А с округлением вообще все просто оказалось: просто тупо после каждой операции блок convert надо было ставить, он округляет число до нужной разрядности, сохраняя физическое значение. Принципиально, что после каждой операции, которая ведет к увеличению разрядности, надо ставить. А так шикарно работает!

 

З.Ы. Всем еще раз огромное спасибо за советы!

А для каких целей понадобился фильтр такого порядка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А для каких целей понадобился фильтр такого порядка?

Понижение частоты спектра сигнала делать, только не синус-косинусным умножением, а сдвигом на четверть периода частоты дискретизации одного из сигналов. После подобной оцифровки надо обратно этот сигнал сдвигать на четверть периода частоты дискретизации, но уже цифровыми методами. Тут фарроу фильтр и пригодился. Я думал четвертым порядком обойтись, но при дальнейшем увеличении порядка результат только улучшается, поэтому решил побольше взять.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я думал четвертым порядком обойтись, но при дальнейшем увеличении порядка результат только улучшается, поэтому решил побольше взять.

полином 6 го порядка, на плис, да еще и нормальных частотах? лучше сделать апсамплинг и 3 го порядка.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

полином 6 го порядка, на плис, да еще и нормальных частотах? лучше сделать апсамплинг и 3 го порядка.

 

Тут и Farrow то не нужен на четверть периода сдвинуть, только одна фаза полифазника в 4 раза увеличивающего частоту дискретизации требуется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

полином 6 го порядка, на плис, да еще и нормальных частотах? лучше сделать апсамплинг и 3 го порядка.
а такой наивный вопрос, отчего не сделать табличным способом. Пусть окно интерполяции разбито на 256 частей, для каждой храним набор коэфф-тов Лагранжа. с т.з. практической реализации насколько это затратно по сравнению с Farrow ?

 

p.s. Мы таблично делаем, Фарроу не применяем, частоты достижимы высокие - т.к. за одно обращение к таблице получаем все коэфф-ты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а такой наивный вопрос, отчего не сделать табличным способом. Пусть окно интерполяции разбито на 256 частей, для каждой храним набор коэфф-тов Лагранжа. с т.з. практической реализации насколько это затратно по сравнению с Farrow ?

 

p.s. Мы таблично делаем, Фарроу не применяем, частоты достижимы высокие - т.к. за одно обращение к таблице получаем все коэфф-ты

ИМХО ресурс. Фарроу 3 го порядка на сыклоне 3, весит 400 плиток + 3 умножителя (mu = 14, данные 16 бит). работает до частот ~200 МГц (на 8 ке и именно символьных частот) без каких либо танцев с бубном. Лагранжа тоже можно сделать, но по моим прикидкам получится менее удобно, нужна память и больше ресурс %)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

полином 6 го порядка, на плис, да еще и нормальных частотах? лучше сделать апсамплинг и 3 го порядка

Да мне выше 64МГц не нужно.. А вообще, раз уж вы обмолвились, не объясните, что там на больших частотах с увеличением порядка фильтра может произойти? Мне казалось, что просто латентность возрастет, т.к. конвееризировать надо будет сильнее, а так все путем будет. И по второй части: как мне кажется (поправьте, если не прав) для апсамплинга нечто подобное фарроу фильтру и придется городить, где тут выигрыш то?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вообще, раз уж вы обмолвились, не объясните, что там на больших частотах с увеличением порядка фильтра может произойти?

Большое порядок полиномиальных интерполяторов, для реализации на ПЛИС, страшен следующим :

1. Чем выше порядок фильтра, тем толще FIR фильтры и выше разрядность сигнала на выходе (обрезать ее в этом месте крайне не желательно)

2. При рассчете полинома, по структуре Farrow, идет последовательное умножение на mu, т.к. вы не можете тянуть разрядность со входа, то каждая ступень увеличивает ошибку (правда ее можно уменьшить, но это другой вопрос).

3. Высокая тактовая требует хорошей конвейризации, много ресурсов уходит на задержки (ну это уже платформозависимо).

 

Теперь если учесть что на большинстве ПЛИС умножители 18х18, то при работе с 16 ти битными данными на 6 ом порядке интерполятора выльется в ~12 умножителей + логики где то плиток под 4000 (сыклон 3). Сравните это с 3 им порядком ;) (а если еще сигнал комплексный) Ну а интерпляцию можно делать не только интерполятором, есть куча методов, это вам учебник по ЦОС надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Чем выше порядок фильтра, тем толще FIR фильтры и выше разрядность сигнала на выходе (обрезать ее в этом месте крайне не желательно)

2. При рассчете полинома, по структуре Farrow, идет последовательное умножение на mu, т.к. вы не можете тянуть разрядность со входа, то каждая ступень увеличивает ошибку (правда ее можно уменьшить, но это другой вопрос).

 

Предполагал, что в разрядности дело.. Хоть все заработало, все равно не пойму, как у меня результаты нормальные получились: я ж разрядность по сути обрезал после каждого умножения! Правда при помощи блока convert, но он тоже не волшебник - разрядность то уменьшится по-любому и точность вместе с ней.. Причем на матлабовском фарроу, где стоит Full Precisition результаты хуже, чем на хардварном, где разрядность, как я уже говорил, за счет блоков convert не поднимается выше 24 (как на входе)! В общем, больше по наитию сделал нежели со знанием дела :laughing:

 

З.Ы. Спасибо за разъяснения!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...