В этом примере показано, как разработать lowpass Конечная Импульсная Характеристика Nyquist. Он также сравнивает эти фильтры с приподнятыми косинусом и квадратным корнем фильтров приподнятого косинуса. Эти фильтры широко используются в формировании импульсов для цифровых систем передачи. Они также находят применение в интерполяции/децимации и банках фильтров.
Этот график показывает величине реакцию фильтра Найквиста с равновесием и фильтром приподнятого косинуса. Оба фильтра имеют порядок 60 и коэффициент сгиба 0,5. Поскольку фильтр equiripple имеет оптимальную полосу стопора equiripple, он имеет большее затухание в полосе задерживания для того же порядка фильтра и ширины перехода. Фильтр приподнятого косинуса получается путем усечения аналитической импульсной характеристики, и он не оптимален ни в коем смысле.
NBand = 4; N = 60; % Filter order R = 0.5; % Rolloff factor TW = R/(NBand/2); % Transition Bandwidth f1 = fdesign.nyquist(NBand,'N,TW',N,TW); eq = design(f1,'equiripple','Zerophase',true,'SystemObject',true); coeffs = rcosdesign(R,N/NBand,NBand,'normal'); coeffs = coeffs/max(abs(coeffs))/NBand; rc = dsp.FIRFilter('Numerator',coeffs); fvt = fvtool(eq,rc,'Color','white'); legend(fvt,'Equiripple NYQUIST design','Raised Cosine design');
Фактически, в этом примере необходимо увеличить порядок проекта приподнятого косинуса примерно до 1400 для достижения аналогичного ослабления.
Здесь мы сравниваем импульсные характеристики. Заметьте, что импульсная характеристика в обоих случаях равна нулю каждую 4-ю выборку (кроме средней выборки). Фильтры Nyquist также известны как фильтры L-ой полосы, потому что частота среза является Pi/L, и импульсная характеристика равна нулю каждой L-й выборке. В этом случае у нас есть фильтры 4-ой полосы.
f1.FilterOrder = 38; eq1 = design(f1,'equiripple','Zerophase',true,'SystemObject',true); coeffs = rcosdesign(R,f1.FilterOrder/NBand,NBand,'normal'); coeffs = coeffs/max(abs(coeffs))/NBand; rc1 = dsp.FIRFilter('Numerator',coeffs); fvt = fvtool(eq1,rc1,'Color','white','Analysis','Impulse'); legend(fvt,'Equiripple NYQUIST','Raised Cosine'); title('Impulse response, Order=38, Rolloff = 0.5');
Проекты Equiripple позволяют контролировать наклон полосы стопора фильтра. Например, следующие проекты имеют уклоны 0, 20 и 40 дБ/( рад/образец) затухания:
f1.FilterOrder = 52; f1.Band = 8; f1.TransitionWidth = .05; eq1 = design(f1,'equiripple','SystemObject',true); eq2 = design(f1,'equiripple','StopbandShape','linear',... 'StopbandDecay',20,'SystemObject',true); eq3 = design(f1,'equiripple','StopbandShape','linear',... 'StopbandDecay',40,'SystemObject',true); fvt = fvtool(eq1,eq2,eq3,'Color','white'); legend(fvt,'Slope=0','Slope=20','Slope=40')
Мы можем спроектировать минимально-фазовый спектральный коэффициент общего фильтра Найквиста (квадратный корень в частотный диапазон). Этот спектральный фактор может использоваться подобным образом с квадратным корнем фильтр приподнятого косинуса в согласованную фильтрацию приложениях. Квадратный корень фильтра помещается на конец передатчика, а другой квадратный корень помещается на конец приемника.
f1.FilterOrder = 30; f1.Band = NBand; f1.TransitionWidth = TW; eq1 = design(f1,'equiripple','Minphase',true,'SystemObject',true); coeffs = rcosdesign(R,N/NBand,NBand); coeffs = coeffs / max(coeffs) * (-1/(pi*NBand) * (pi*(R-1) - 4*R)); srrc = dsp.FIRFilter('Numerator',coeffs); fvt = fvtool(eq1,srrc,'Color','white'); legend(fvt,'Minimum-phase equiripple design',... 'Square-root raised-cosine design');
Реакция фильтр приподнятого косинуса улучшается, когда коэффициент сгиба уменьшается (показан здесь для сгиба = 0,2). Это связано с узким основным лепестком частотной характеристики прямоугольного окна, которое используется в усечении импульсной характеристики.
f1.FilterOrder = N; f1.TransitionWidth = .1; eq1 = design(f1,'equiripple','Zerophase',true,'SystemObject',true); R = 0.2; coeffs = rcosdesign(R,N/NBand,NBand,'normal'); coeffs = coeffs/max(abs(coeffs))/NBand; rc1 = dsp.FIRFilter('Numerator',coeffs); fvt = fvtool(eq1,rc1,'Color','white'); legend(fvt,'NYQUIST equiripple design','Raised Cosine design');
Фильтры Nyquist также могут быть разработаны с использованием метода усеченной и оконной импульсной характеристики. Это может быть другой альтернативой проекта приподнятого косинуса. Для примера мы можем использовать метод окна Кайзера для разработки фильтра, который соответствует начальным спецификациям:
f1.TransitionWidth = TW; kaiserFilt = design(f1,'kaiserwin','SystemObject',true);
Проект окна Кайзера требует того же порядка (60), что и проект equiripple, чтобы соответствовать спецификациям. (Помните, что, напротив, нам потребовался экстраординарный фильтр 1400-го порядка с приподнятой косинусоидой, чтобы соответствовать спецификации полосы остановки.)
fvt = fvtool(eq,rc,kaiserFilt,'Color','white'); legend(fvt,'Equiripple design',... 'Raised Cosine design','Kaiser window design');
Помимо цифровой передачи данных, фильтры Nyquist привлекательны для интерполяции. Причина в том, что у каждого L-образца у вас нуль выборка (кроме средней выборки), как упоминалось ранее. В этом есть два преимущества, оба очевидны при рассмотрении представления полифазы.
fm = fdesign.interpolator(4,'nyquist'); kaiserFilt = design(fm,'kaiserwin','SystemObject',true); fvt = fvtool(kaiserFilt,'Color','white'); fvt.PolyphaseView = 'on';
Полифазный подфильтр # 4 является фильтром allpass, фактически это чистая задержка (выберите импульсную характеристику в FVTool или посмотрите на коэффициенты фильтра в FVTool), так что: 1. Все его умножители равны нулю, кроме единицы, что приводит к эффективной реализации этой полифазной ветви. 2. Входные выборки передаются через интерполяционный фильтр без изменений, хотя фильтр не идеален.