Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Передискретизация
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Ivan55
Есть комлексный сигнал, ширина полосы сигнала 20 кГц, т.е. от -10 кГц до +10 кГц. Частота дискретизации сигнала 41.25 кГц, необходимо передискретизовать его в 48 кГц. Для этого необходимо проинтерполировать исходный сигнал с коэффициентом 64 и продицимировать с коэффициентом 55. Для простоты реализации это можно разбить на два каскада т.е. 8 вверх 5 вниз 8 вверх и 11 вниз. Вопрос следующий, какие должны быть параметры интерполирующего ФНЧ фильтра для каждого каскада (т.е. ширина полосы пропускания, задержания, порядок фильтра)?
STAR_IK
Вообще требования к интерполирующим и децимирующим фильтрам хорошо описаны в любой книге по цифровой обработке сигналов, например Лайонс. Основное требование к децимирующему фильтру - это подавление зеркальных составляющих, которые при смене частоты дискретизации накладываются на основной спектр. При интерполяции необходимо уже подавлять спектральные копии полезного сигнала, которые вылезли на других частотах. В вашем случае, не обязательно применять передискретизацию используя каскадное соединение интерполирующего и децимирующего фильтров, а использовать фильтры с дробной задержкой, например Ферроу. Для ознакомления с Фэрроу можно глянуть сюда http://www.dsplib.ru/content/farrow/farrow.html
Ivan55
Цитата(STAR_IK @ Feb 1 2013, 08:17) *
Вообще требования к интерполирующим и децимирующим фильтрам хорошо описаны в любой книге по цифровой обработке сигналов, например Лайонс. Основное требование к децимирующему фильтру - это подавление зеркальных составляющих, которые при смене частоты дискретизации накладываются на основной спектр. При интерполяции необходимо уже подавлять спектральные копии полезного сигнала, которые вылезли на других частотах.


Да спасибо!) Про это я знаю, но вопрос был в параметрах фильтра, потому что я реализовал фильтр с полосой 10 кГц затухание на 13 кГц, порядок ФНЧ фильтра 128, фильтр видимо че то не отфильтровывает и шумы зеркал пролазят в полосу, причем существенно... ОСШ упало на 10 дБ

Цитата(STAR_IK @ Feb 1 2013, 08:17) *
В вашем случае, не обязательно применять передискретизацию используя каскадное соединение интерполирующего и децимирующего фильтров, а использовать фильтры с дробной задержкой, например Ферроу. Для ознакомления с Фэрроу можно глянуть сюда http://www.dsplib.ru/content/farrow/farrow.html


Спасибо почитаю)
STAR_IK
Цитата(Ivan55 @ Feb 1 2013, 20:22) *
Да спасибо!) Про это я знаю, но вопрос был в параметрах фильтра, потому что я реализовал фильтр с полосой 10 кГц затухание на 13 кГц, порядок ФНЧ фильтра 128, фильтр видимо че то не отфильтровывает и шумы зеркал пролазят в полосу, причем существенно... ОСШ упало на 10 дБ


А какие параметры вас интересуют??? Фильтр как реализован?? В железе, в матлабе?? Если в матлабе, то скиньте сюда. Ну или хотя бы АЧХ покажите, если в другой программе рассчитывали. Хотя 128 порядок многовато будет. Могут быть проблемы с реализацией на фиксированной точке. И как я уже ранее говорил, такую интерполяцию лучше делать по другому. Хотя и не стоит оставлять эту проблему не решенной, потом все равно пригодится.
Ivan55
Цитата(STAR_IK @ Feb 4 2013, 06:30) *
А какие параметры вас интересуют??? Фильтр как реализован?? В железе, в матлабе?? Если в матлабе, то скиньте сюда. Ну или хотя бы АЧХ покажите, если в другой программе рассчитывали. Хотя 128 порядок многовато будет. Могут быть проблемы с реализацией на фиксированной точке. И как я уже ранее говорил, такую интерполяцию лучше делать по другому. Хотя и не стоит оставлять эту проблему не решенной, потом все равно пригодится.


Фильтр реализован в матлабе. Проблемы возникают при децимации, когда плохо подавленные зеркала пролазят в полосу, а т.к. я делал два каскада(8 вверх, 5 вниз, 8 вверх, 11 вниз) то там и пролезло видимо их столько что на 10 дБ ОСШ упало. Если все правильно сделать то такого ведь быть не должно, ведь функция resampling в матлабе не ухудшает ОСШ и не искажает его. Значит видимо проблема с фильтрацией

Вот код фильтра сгенереный в fdatool:
CODE
Fs_resampl = 41.25e3;
N = 128; % Order
Fpass = 10e3; % Passband Frequency
Fstop = 13e3; % Stopband Frequency
Wpass = 10; % Passband Weight
Wstop = 60; % Stopband Weight
dens = 20; % Density Factor

%Calculate the coefficients using the FIRPM function.
Numerator = 8.*firpm(N-1, [0 Fpass Fstop Fs_resampl/2]/(Fs_resampl/2), [1 1 0 0], [Wpass Wstop], {dens});

Obj.ResamplingFilter_1 = dfilt.dffir(Numerator);
reset(Obj.ResamplingFilter_1);
STAR_IK
У вашего фильтра слишком широкая полоса пропускания. Им разве что в 2 раза можно продецимировать или проинтерполировать, причем сигнал с полосой не больше +/-0,37 от частоты Найквиста (Fn). Фильтр должен иметь полосу пропускания такую, чтоб пролазил спектр сигнала, и обеспечивал нужное подавление на той частоте, где будет находиться копия сигнала (интерполяция) ну или то, что завернется на спектр сигнала (децимация). Т.е. в вашем случае для интерполяции в 8 раз полоса пропускания должна быть 10 кГц, а подавление начиная с частоты 41,25-10 = 31,25 кГц и выше. Замечу что частота дискретизации при расчете фильтра уже 330 кГц, а не 41.25. К тому же т. к. частота начала заграждения 31,25 кГц меньше частоты 8/5 Fn т.е. 33 кГц, то для децецимации в 5 раз дополнительная фильтрация не нужна. Во втором каскаде можно тоже обойтись одним фильтром, но подавление должно начинаться уже с частоты не выше 48 кГц-10 кГц=38 кГц, при частоте дискретизации (8/5 fs1)*8 = 528 кГц. И зачем такое большое подавление в 153 дБ??? По моему это перебор, хватит и 70 - 90 дБ. Кстати, использование fdatool в матлабе гораздо упрощает процедуру расчета фильтров. И не забывайте про полифазную реализацию фильтров, которая уменьшит вычислительные затраты
Ivan55
Цитата(STAR_IK @ Feb 7 2013, 06:23) *
У вашего фильтра слишком широкая полоса пропускания. Им разве что в 2 раза можно продецимировать или проинтерполировать, причем сигнал с полосой не больше +/-0,37 от частоты Найквиста (Fn). Фильтр должен иметь полосу пропускания такую, чтоб пролазил спектр сигнала, и обеспечивал нужное подавление на той частоте, где будет находиться копия сигнала (интерполяция) ну или то, что завернется на спектр сигнала (децимация). Т.е. в вашем случае для интерполяции в 8 раз полоса пропускания должна быть 10 кГц, а подавление начиная с частоты 41,25-10 = 31,25 кГц и выше. Замечу что частота дискретизации при расчете фильтра уже 330 кГц, а не 41.25. К тому же т. к. частота начала заграждения 31,25 кГц меньше частоты 8/5 Fn т.е. 33 кГц, то для децецимации в 5 раз дополнительная фильтрация не нужна. Во втором каскаде можно тоже обойтись одним фильтром, но подавление должно начинаться уже с частоты не выше 48 кГц-10 кГц=38 кГц, при частоте дискретизации (8/5 fs1)*8 = 528 кГц. И зачем такое большое подавление в 153 дБ??? По моему это перебор, хватит и 70 - 90 дБ. Кстати, использование fdatool в матлабе гораздо упрощает процедуру расчета фильтров. И не забывайте про полифазную реализацию фильтров, которая уменьшит вычислительные затраты


Спасибо!) Да про полифазную помню, так и планируется) если возникнут вопросы то еще спрошу
Ivan55
Цитата(STAR_IK @ Feb 7 2013, 06:23) *
У вашего фильтра слишком широкая полоса пропускания. Им разве что в 2 раза можно продецимировать или проинтерполировать, причем сигнал с полосой не больше +/-0,37 от частоты Найквиста (Fn). Фильтр должен иметь полосу пропускания такую, чтоб пролазил спектр сигнала, и обеспечивал нужное подавление на той частоте, где будет находиться копия сигнала (интерполяция) ну или то, что завернется на спектр сигнала (децимация). Т.е. в вашем случае для интерполяции в 8 раз полоса пропускания должна быть 10 кГц, а подавление начиная с частоты 41,25-10 = 31,25 кГц и выше. Замечу что частота дискретизации при расчете фильтра уже 330 кГц, а не 41.25. К тому же т. к. частота начала заграждения 31,25 кГц меньше частоты 8/5 Fn т.е. 33 кГц, то для децецимации в 5 раз дополнительная фильтрация не нужна. Во втором каскаде можно тоже обойтись одним фильтром, но подавление должно начинаться уже с частоты не выше 48 кГц-10 кГц=38 кГц, при частоте дискретизации (8/5 fs1)*8 = 528 кГц. И зачем такое большое подавление в 153 дБ??? По моему это перебор, хватит и 70 - 90 дБ. Кстати, использование fdatool в матлабе гораздо упрощает процедуру расчета фильтров. И не забывайте про полифазную реализацию фильтров, которая уменьшит вычислительные затраты


Сделал так как вы сказали, но результата особого не дало, на 8 дБ сигнал ухудшается, когда делаю встроенной функцией матлаб resampling все работает идеально, странно как то... Но не падает даже на 1 дБ
Make_Pic
Цитата(Ivan55 @ Feb 13 2013, 17:39) *
Сделал так как вы сказали, но результата особого не дало, на 8 дБ сигнал ухудшается, когда делаю встроенной функцией матлаб resampling все работает идеально, странно как то... Но не падает даже на 1 дБ

Уже наступали на эти грабли - в матлаб точность расчетов выше, а вы не учитываете переполнение в своем железе/программе.
Ivan55
Цитата(Make_Pic @ Feb 18 2013, 12:10) *
Уже наступали на эти грабли - в матлаб точность расчетов выше, а вы не учитываете переполнение в своем железе/программе.


Я делаю в матлабе без железа
STAR_IK
Может проблема в ослаблении сигнала при интерполяции? Если можете, выложите весь код передискретизации сигнала
Ivan55
Цитата(STAR_IK @ Feb 20 2013, 11:52) *
Может проблема в ослаблении сигнала при интерполяции? Если можете, выложите весь код передискретизации сигнала


Весь код выложу чуть позже

Но ослабления быть не должно, я ведь фильтр делаю с усилением
Numerator = 8.*firpm(N-1, [0 Fpass Fstop Fs_resampl/2]/(Fs_resampl/2), [1 1 0 0], [Wpass Wstop], {dens});

т.е. интерполируя на 8 энергия растекается и сигнал ослабляется в то кол-во раз на которое интерполируешь, поэтому там у меня стоит 8.*
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.