Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Halfband фильтр...
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Leshii
Что-то клинит, подскажите плиз:

Есть ИХ h=[18 0 -116 0 429 0 -1277 0 5042 8192 5042 0 -1277 0 429 0 -116 0 18];

Тогда исходная АЧХ
figure,plot((1:1024)*2000000/1024,20*log10(abs(fft(h,1024))/1024)) (сэмплирование 2МГц)

После децимациии в 2 раза получаем
sp=20*log10(abs(fft(h,1024))); sp1=sp(1:length(sp)/2); sp2=sp(length(sp)/2+1:end);
plot((1:512)*1000000/512,sp1), hold on, plot((1:512)*100000000/512,sp2,'g')

Тогда сумарная (после фильтрации и децимации в 2 раза) АЧХ будет
figure,plot((1:512)*1000000/512,sp1+sp2); %?????????????????

т.е. с одной стороны полезная полоса получается всего около 250кГц, а в полосе 250-500кГц будет паразитное усиление?, которое надо дополнительно отфильтровывать?
Самурай
Цитата(Leshii @ Jan 25 2009, 13:02) *
Что-то клинит, подскажите плиз:

Есть ИХ h=[18 0 -116 0 429 0 -1277 0 5042 8192 5042 0 -1277 0 429 0 -116 0 18];

Тогда исходная АЧХ
figure,plot((1:1024)*2000000/1024,20*log10(abs(fft(h,1024))/1024)) (сэмплирование 2МГц)

После децимациии в 2 раза получаем
sp=20*log10(abs(fft(h,1024))); sp1=sp(1:length(sp)/2); sp2=sp(length(sp)/2+1:end);
plot((1:512)*1000000/512,sp1), hold on, plot((1:512)*100000000/512,sp2,'g')

Тогда сумарная (после фильтрации и децимации в 2 раза) АЧХ будет
figure,plot((1:512)*1000000/512,sp1+sp2); %?????????????????

т.е. с одной стороны полезная полоса получается всего около 250кГц, а в полосе 250-500кГц будет паразитное усиление?, которое надо дополнительно отфильтровывать?


Ну, для начала советую отказаться от складывания логарифмов, ибо log( a )+log( B ) = log( a*B ) и совершенно != log( a+B ) smile.gif)).

А что касается полезной полосы после децимации, то формально ее нетsmile.gif. А фактически она будет определяться допустимым уровнем искажения сигнала из-за наложения спектров. А уровень наложения спектров в свою очередь будет зависеть как от АЧХ фильтра в полосе 500кГц-1000кГц, так и от спектра входного сигнала в этой полосе. Если, к примеру, входной сигнал это сумма двух синусов с частотами 400кГц и 600кГц и амплитудами 1000 и 8000 единиц, то выходной сигнал после фильтра и децимации - синус 400кГц с амплитудой примерно 900+1000. И никаким дополнительным фильтром эти искажения уже не убрать.
vadkudr
Вам нужен не halfband filter, а anti-aliasing фильтр - филтр обеспечивающий требуемое подавление в полосе частот, которые будут зеркальными после применения децимации.
halfband filter этого не обеспечивает. Такие фильтры применяются в бэнк-фильтрах, к примеру, где зеркальные отражения/наложения (aliasing) взаимно-компенсируются при восстановлении/синтезе. Плюс, в большинстве случаев halfband filter имеет более простую реализацию с выч. точки зрения.
Самурай
Цитата(vadkudr @ Jan 25 2009, 16:30) *
Вам нужен не halfband filter, а anti-aliasing фильтр - филтр обеспечивающий требуемое подавление в полосе частот, которые будут зеркальными после применения децимации.
halfband filter этого не обеспечивает. Такие фильтры применяются в бэнк-фильтрах, к примеру, где зеркальные отражения/наложения (aliasing) взаимно-компенсируются при восстановлении/синтезе. Плюс, в большинстве случаев halfband filter имеет более простую реализацию с выч. точки зрения.


Halfband filter это как раз и есть в частном случае anti-aliasing фильтр. И кроме требования максимального подавления зеркальных частот, существует так же требование максимально полного сохранения рабочего частотного диапазона (от 0 до Fsd/2, где Fsd = Fs/n). И в этом случае именно Halfband фильтр (для 2-х кратной децимации) как правило и будет наиболее эффективным с точки зрения вычислительных затрат и при прочих равных условиях.
Leshii
Можно ли сказать, что для выше приведенной ИХ подавление алиса в от 0 до 200кГц будет около 80дБ?

Насчет суммирования логарифмов это я на на самом деле сказанул biggrin.gif , но итоговую АЧХ после фильтрации и децимации я правильно рассчитывал (не учитывая глюк с логарифмом)?
Самурай
Цитата(Leshii @ Jan 25 2009, 18:05) *
Можно ли сказать, что для выше приведенной ИХ подавление алиса в от 0 до 200кГц будет около 80дБ?


Да

Цитата(Leshii @ Jan 25 2009, 18:05) *
итоговую АЧХ после фильтрации и децимации я правильно рассчитывал (не учитывая глюк с логарифмом)?


К системам децимации/интерполяции понятие АЧХ в общем случае не применимоsmile.gif.
vadkudr
Цитата(Самурай @ Jan 25 2009, 23:18) *
Halfband filter это как раз и есть в частном случае anti-aliasing фильтр. И кроме требования максимального подавления зеркальных частот, существует так же требование максимально полного сохранения рабочего частотного диапазона (от 0 до Fsd/2, где Fsd = Fs/n). И в этом случае именно Halfband фильтр (для 2-х кратной децимации) как правило и будет наиболее эффективным с точки зрения вычислительных затрат и при прочих равных условиях.

Цитата
А уровень наложения спектров в свою очередь будет зависеть как от АЧХ фильтра в полосе 500кГц-1000кГц, так и от спектра входного сигнала в этой полосе. Если, к примеру, входной сигнал это сумма двух синусов с частотами 400кГц и 600кГц и амплитудами 1000 и 8000 единиц, то выходной сигнал после фильтра и децимации - синус 400кГц с амплитудой примерно 900+1000. И никаким дополнительным фильтром эти искажения уже не убрать.

Вторая цитата как раз иллюстрирует то, что Halfband фильтр не обеспечивает отсутствие отражений в полной полосе. Любой халфбанд фильтр имеет коэффициент 0.5 на половинной частоте найквиста. Так что кусочек из верхней половины частотного диапазона всегда отразится в нижнюю половину.
Поэтому использование полуполосного фильтра возможно в двух случаях
- разработчик гарантирует компенсацию этого отражения каким-либо методом в дальнейшем (бэнк-фильтр к примеру)
- разработчик гарантирует отсутствие частотных составляющих сигнала в полосе Fnyq+/-deltaf, где deltaf тот самый кусочек, который не подавился должным образом и отражается в нижнюю половину.
Leshii
Одним из методов расчета фильтров является метод частотной выборки. Как я понял, одним из нюансов расчета является то, что в частотной области задаются контрольные точки, которые в рассчитанном фильтре должны сохраняться один в один, а вот между ними в рассчитанном фильтре в принципе может твориться черте что.

Попытался воспользоваться матлабом
===========================================================
Fs=200000; % Sampling frequency

N=34; % Filter length

fd=[0 0.05 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1]; % Frequency sampling points

Hd=[1 1 0 0 0 0 0 0 0 0 0 0]; % Frequency samples

hn=fir2(N-1, fd, Hd); % Compute the impulse response coeffs.

[H, f] = freqz(hn, 1, 512, Fs); % Plot the magnitude frequency response

plot(f, abs(H)), grid on

xlabel('Frequency (Hz)')

ylabel('Magnitude ')
=======================================================

но почему то в результирующей характеристике опорные точки (...0.1, 0.2, ...) не соответствуют заданным, хотя бы даже внешне.

Где затык?
Самурай
Цитата(Leshii @ Feb 15 2009, 09:36) *
но почему то в результирующей характеристике опорные точки (...0.1, 0.2, ...) не соответствуют заданным, хотя бы даже внешне.

Где затык?


Затык в том, что Вы ждете чуда. А чудес в нашем весьма прагматичном мире крайне малоsmile.gif.
Увеличьте раза в 3-4 порядок Вашего фильтра и тогда Вы увидите то, что так жаждете увидеть. Такова суровая реальность.
Leshii
Цитата(Самурай @ Feb 16 2009, 02:18) *
Затык в том, что Вы ждете чуда. А чудес в нашем весьма прагматичном мире крайне малоsmile.gif.
Увеличьте раза в 3-4 порядок Вашего фильтра и тогда Вы увидите то, что так жаждете увидеть. Такова суровая реальность.


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