designFracDelayFIR

Спроектируйте ограниченный полосой дробный КИХ-фильтр задержки

Описание

h = designFracDelayFIR(fd) проектирует дробный КИХ-фильтр задержки задержки fd, длина по умолчанию 50, аппроксимированная полоса пропускания 0,9.

пример

h = designFracDelayFIR(fd,N) проектирует дробный КИХ-фильтр задержки задержки fd и длина N > 1. Функция проектирует фильтр, чтобы достигнуть заданной КИХ-длины.

пример

h = designFracDelayFIR(fd,TBW) проектирует дробный КИХ-фильтр задержки задержки fd и объединенная полоса пропускания, по крайней мере, TBW, где TBW< 0.999 и задан в нормированных единицах частоты. Функция автоматически определяет соответствующую КИХ-длину N, для которого объединенной полосой пропускания является, по крайней мере, TBW.

[h,i0] = designFracDelayFIR(___) возвращает целочисленную задержку КИХ-фильтра. Этим значением является приблизительно N/2. Задержкой именной группы фильтра является i0+fd.

пример

[h,i0,MBW] = designFracDelayFIR(___) возвращает измеренную объединенную полосу пропускания фильтра h.

Примеры

свернуть все

Спроектируйте дробный КИХ-фильтр задержки с помощью designFracDelayFIR функция. Передайте задержку и длину фильтра как входные параметры к функции. Варьируйтесь длина фильтра и наблюдайте эффект на измеренной объединенной полосе пропускания и задержке именной группы.

Варьируйтесь длина фильтра

Отфильтруйте набор длины к 8

Задайте задержку, чтобы быть 0.25 и длина фильтра, чтобы быть 8 и спроектировать дробный КИХ-фильтр задержки.

fd = 0.25;
len = [8 32 64];
[h1,i10,bw1] = designFracDelayFIR(fd,len(1))
h1 = 1×8

   -0.0086    0.0417   -0.1355    0.8793    0.2931   -0.0968    0.0341   -0.0074

i10 = 3
bw1 = 0.5810

Задержка именной группы фильтра i10+fd равняется 3,25 выборкам. Измеренная объединенная полоса пропускания фильтра 0.5810 в нормированных единицах частоты.

Отфильтруйте набор длины к 32

Повторите процесс с длиной фильтра 32 касаний.

[h2,i20,bw2] = designFracDelayFIR(fd,len(2))
h2 = 1×32

   -0.0001    0.0004   -0.0009    0.0017   -0.0029    0.0046   -0.0071    0.0104   -0.0148    0.0208   -0.0291    0.0410   -0.0594    0.0926   -0.1752    0.8983    0.2994   -0.1252    0.0758   -0.0515    0.0367   -0.0266    0.0193   -0.0139    0.0098   -0.0067    0.0044   -0.0028    0.0016   -0.0009    0.0004   -0.0001

i20 = 15
bw2 = 0.8571

Задержка именной группы фильтра теперь равняется 15,25 выборкам. Путем увеличения длины фильтра, целочисленная задержка i0 также увеличения, приводящие к увеличению задержки именной группы. Объединенная полоса пропускания фильтра увеличилась до 0,8571 в нормированных единицах частоты.

Отфильтруйте набор длины к 64

Увеличьте длину фильтра до 64 касаний. Групповая задержка увеличивается до 31,25 выборок, и целочисленная задержка является 31 выборкой. Измеренная объединенная полоса пропускания фильтра дальнейшие увеличения к 0,9219. Это - покрытие полосы пропускания 92,19% полной полосы пропускания. В то время как длина фильтра продолжает увеличиваться, объединенная полоса пропускания стремится ближе к 1.

[h3,i30,bw3] = designFracDelayFIR(fd,len(3))
h3 = 1×64

   -0.0000    0.0001   -0.0001    0.0002   -0.0003    0.0004   -0.0006    0.0008   -0.0010    0.0013   -0.0017    0.0022   -0.0027    0.0034   -0.0042    0.0051   -0.0061    0.0074   -0.0088    0.0105   -0.0125    0.0149   -0.0177    0.0212   -0.0255    0.0311   -0.0386    0.0494   -0.0664    0.0979   -0.1787    0.8997    0.2999   -0.1277    0.0801   -0.0575    0.0442   -0.0352    0.0288   -0.0239    0.0200   -0.0168    0.0142   -0.0120    0.0101   -0.0085    0.0071   -0.0059    0.0049   -0.0040

i30 = 31
bw3 = 0.9219

Постройте ответ величины

Постройте получившийся ответ величины трех фильтров с помощью fvtool. Отметьте измеренную объединенную полосу пропускания трех фильтров. Путем увеличения длины фильтра вы видите, что измеренная объединенная полоса пропускания увеличивается.

hfv = fvtool(h1,1,h2,1,h3);
ax = findall(hfv,"type","axes");
hline = findobj(ax(2),'Type','line');
xline(bw1, "LineStyle",'--', "LineWidth",2,'Color',hline(3).Color)
xline(bw2, "LineStyle",'--', "LineWidth",2,'Color',hline(2).Color)
xline(bw3, "LineStyle",'--', "LineWidth",2,'Color',hline(1).Color)
title('Magnitude Responses in dB','FontSize',12)

legend('Gain Response (N = 8)','Gain Response (N = 32)','Gain Response (N = 64)',...
        'Measured Combined Bandwidth (N = 8)',...
       'Measured Combined Bandwidth (N = 32)',...
      'Measured Combined Bandwidth (N = 64)','Location','Southwest','FontSize',12);

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Responses in dB contains 6 objects of type line, constantline. These objects represent Gain Response (N = 8), Gain Response (N = 32), Gain Response (N = 64), Measured Combined Bandwidth (N = 8), Measured Combined Bandwidth (N = 32), Measured Combined Bandwidth (N = 64).

Постройте ответ групповой задержки

Постройте ответ групповой задержки трех фильтров с помощью fvtool. Отметьте задержку именной группы i0 + fd трех фильтров. Путем увеличения длины фильтра вы видите, что именная группа задерживает увеличения.

hfv = fvtool(h1,1,h2,1,h3,1,"Analysis","grpdelay");
ax = findall(hfv,"type","axes");
hline = findobj(ax(2),'Type','line');
    
yline(i10+fd, "LineStyle",'--', "LineWidth",2,'Color',hline(3).Color)
yline(i20+fd, "LineStyle",'--', "LineWidth",2,'Color',hline(2).Color)
yline(i30+fd, "LineStyle",'--', "LineWidth",2,'Color',hline(1).Color)

title('Group Delay Responses','FontSize',12)

legend('Group Delay Response (N = 8)','Group Delay Response (N = 32)','Group Delay Response (N = 64)',...
        'Nominal Group Delay (N = 8)',...
       'Nominal Group Delay (N = 32)',...
      'Nominal Group Delay (N = 64)','Location','west','FontSize',12);
ax(1).YLim = [-10,40];

Figure Filter Visualization Tool - Group delay contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Group Delay Responses contains 6 objects of type line, constantline. These objects represent Group Delay Response (N = 8), Group Delay Response (N = 32), Group Delay Response (N = 64), Nominal Group Delay (N = 8), Nominal Group Delay (N = 32), Nominal Group Delay (N = 64).

Спроектируйте дробный КИХ-фильтр задержки с помощью designFracDelayFIR функция. Передайте задержку и объединенную полосу пропускания как входные параметры к функции.

Задайте задержку, чтобы быть 0.786, и цель объединила полосу пропускания, чтобы быть 0.8. Функция проектирует фильтр, который имеет длину 22 касаний, целочисленная задержка i0 10 выборок и объединенной полосы пропускания mbw 0,8044 в нормированных единицах частоты. Это mbw значение делает объединенное покрытие полосы пропускания, чтобы быть 80,44% частотного диапазона и превышает объединенную полосу пропускания заданной цели. Задержка именной группы фильтра i0+fd равняется 10.786.

fd  = 0.786;
tbw = 0.8;
[h,i0,mbw] = designFracDelayFIR(fd, tbw)
h = 1×22

    0.0003   -0.0011    0.0026   -0.0052    0.0094   -0.0156    0.0248   -0.0386    0.0611   -0.1052    0.2512    0.9225   -0.1548    0.0769   -0.0455    0.0281   -0.0173    0.0102   -0.0057    0.0028   -0.0012    0.0003

i0 = 10
mbw = 0.8044

Постройте импульсную характеристику КИХ.

stem((0:length(h)-1),h); 
xlabel('h'); ylabel('h[n]');
title('Impulse Response of the Fractional Delay FIR')

Figure contains an axes object. The axes object with title Impulse Response of the Fractional Delay FIR contains an object of type stem.

Постройте получившийся ответ величины и ответ групповой задержки с помощью fvtool. Отметьте задержку именной группы и объединенную полосу пропускания фильтра.

hfv = fvtool(h,'Analysis','magnitude','OverlayedAnalysis','grpdelay');
ax  = findall(hfv,'type','axes');
xline(mbw, 'LineStyle',':',  'Color','b', 'LineWidth',2)
xline(tbw, 'LineStyle','--', 'Color','m', 'LineWidth',2)

yline(ax(1),i0+fd, 'LineStyle',':','Color','r','LineWidth',1)

yticks(ax(1),[i0, i0+fd,i0+1:i0+9]); yticklabels(ax(1),'auto')
legend('Gain Response','Measured Combined Bandwidth',...
        'Target Combined Bandwidth','Group Delay Response','Nominal Group Delay', ...
        'Location','west','FontSize',12)
grid off

Figure Filter Visualization Tool - Magnitude Response (dB) and Group delay contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) and Group delay contains 3 objects of type line, constantline. These objects represent Gain Response, Measured Combined Bandwidth, Target Combined Bandwidth.

Спроектируйте дробный КИХ-фильтр задержки с помощью designFracDelayFIR функция. Определите групповую задержку спроектированного фильтра. Создайте dsp.FIRFilter возразите, что использует эти спроектированные коэффициенты и следовательно имеет ту же групповую задержку. Альтернативно, создайте произведенную последовательность известной функции. Передайте произведенную последовательность КИХ-фильтру. Сравните выход КИХ-фильтра к переключенным выборкам известной функции. Задайте этот сдвиг, чтобы быть равными групповой задержке КИХ-фильтра. Проверьте, что эти две последовательности соответствуют.

Задайте задержку дробного КИХ-фильтра задержки, чтобы быть 1/3 и длиной, чтобы быть 6 касаниями.

fd = 1/3;
len = 6;

Спроектируйте фильтр с помощью designFracDelayFIR функционируйте и определите центральный индекс i0 и объединенную полосу пропускания bw из фильтра. Групповой задержкой фильтра, который вы спроектировали, является i0 + fd или приблизительно 2,33 для полосы пропускания bw.

[h,i0,bw] = designFracDelayFIR(fd,len)
h = 1×6

    0.0293   -0.1360    0.7932    0.3966   -0.1088    0.0257

i0 = 2
bw = 0.5158

Создайте dsp.FIRFilter объект и набор его числитель к коэффициентам фильтра h. Этот фильтр является теперь эффективно дробным КИХ-фильтром задержки. Проверьте, что ответ групповой задержки этого фильтра - приблизительно 2,33 на время полосы пропускания bw.

fdf = dsp.FIRFilter(h);
grpdelay(fdf)

Figure Filter Visualization Tool - Group delay contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Group delay contains an object of type line.

Сравните с переключенной функцией

Задайте последовательность x как выборки известной функции.

f = @(t) (0.1*t.^2+cos(0.9*t)).*exp(-0.1*(t-5).^2);
n = (0:19)'; t = linspace(0,19,512);
x = f(n); % Samples

Постройте произведенные значения x против исходной известной функции f (t).

scatter(n,x,20,'k','filled');
hold on;
plot(t,f(t),'color',[0.5 0.5 0.5],'LineWidth',0.5)
hold off;
xlabel('Time')
legend(["Input Samples","f(t)"])
title('Input Sequence with Known Underlying Analog Signal')
ax = gca; ax.XGrid='on';

Figure contains an axes object. The axes object with title Input Sequence with Known Underlying Analog Signal contains 2 objects of type scatter, line. These objects represent Input Samples, f(t).

Передайте произведенную последовательность x через КИХ-фильтр. Постройте входную последовательность и выведите последовательность.

y = fdf(x);

subplot(2,1,1);
stem(x);
title('Input Sequence');
xlabel('n')
subplot(2,1,2)
stem(y);
title('FIR Output Sequence');
xlabel('n')

Figure contains 2 axes objects. Axes object 1 with title Input Sequence contains an object of type stem. Axes object 2 with title FIR Output Sequence contains an object of type stem.

Переключите вход sequnce горизонтально i0 + fd, который равен групповой задержке КИХ-фильтра. Постройте функцию f (t-i0-FD). Проверьте, что последовательности ввода и вывода падают примерно на переключенную функцию.

figure
scatter(n,y,20,'red','filled')
hold on;
scatter(n+i0+fd,x,20,'black','filled')
plot(t,f(t-i0-fd),'Color',[1,0.5,0.5],'LineWidth',0.1)
xlabel('Time')
legend(["Filter output","Shifted Input Samples","Shifted f(t-i0-fd)"])
hold off
grid on
title('Input and Output Sequences Aligned and Overlaid')

Figure contains an axes object. The axes object with title Input and Output Sequences Aligned and Overlaid contains 3 objects of type scatter, line. These objects represent Filter output, Shifted Input Samples, Shifted f(t-i0-fd).

Входные параметры

свернуть все

Дробная задержка фильтра в виде положительной скалярной величины в области значений [0,1]. Дробное значение задержки, которое вы задаете, определяет измеренную объединенную полосу пропускания MBW из фильтра. Когда fd установлен в 0 или 1, спроектированный фильтр имеет полную полосу пропускания.

Типы данных: single | double

Длина дробного КИХ задержки фильтрует в виде целого числа, больше, чем 1. Для того, чтобы задать длину фильтра, необходимо задать второй входной параметр функции, чтобы быть целым числом, которое больше 1. Функция обрабатывает это значение как желаемую длину фильтра и возвращает фильтр, который является касаниями N долго.

Типы данных: single | double

Цель объединила полосу пропускания в виде положительной скалярной величины меньше чем 0,999. Это - значение объединенной полосы пропускания, которой должна удовлетворить функция. Объединенная полоса пропускания задана как минимум полосы пропускания усиления и полосы пропускания групповой задержки.

Для того, чтобы указать, что цель объединила полосу пропускания, необходимо задать второй входной параметр функции, чтобы быть действительным скаляром, который меньше 0.999. Функция затем обрабатывает это значение, когда цель объединила полосу пропускания, определяет соответствующую длину фильтра и проектирует фильтр соответственно.

Укажите, что более высокая цель объединила полосу пропускания для более длинного фильтра. Например, TBW установите к 0,9 выражениям фильтр длины 52. Для TBW это установлено в 0,99, длина 724. Это значение больше чем в 10 раз более долго. Как TBW стремится к 1, длина фильтра теоретически стремится к бесконечности.

Типы данных: single | double

Выходные аргументы

свернуть все

Коэффициенты дробного КИХ-фильтра задержки, возвращенного как N с действительным знаком- вектор-строка длины. Когда дробная задержка является единственным входом к функции, функция проектирует фильтр длины 50. Полоса пропускания для этого фильтра по умолчанию - приблизительно 0,9. Когда второй входной параметр задан, функция проектирует фильтр согласно следующему:

  • Когда второй входной параметр к функции задан, чтобы быть значением, больше, чем 1, функция обрабатывает это значение как желаемую длину фильтра и возвращает фильтр, который является N касания долго.

  • Когда второй входной параметр к функции задан, чтобы быть значением меньше, чем 0.999, функция обрабатывает это значение как желаемую объединенную полосу пропускания TBW, определяет соответствующую длину фильтра и проектирует фильтр соответственно.

Типы данных: single | double

Целочисленная задержка спроектированного КИХ-фильтра, возвращенного как целочисленное значение. Целочисленная задержка является самым маленьким целочисленным сдвигом, требуемым сделать симметричное окно Кайзера причинным. Это значение приблизительно равно половине длины фильтра, N/2. Для получения дополнительной информации смотрите Целочисленную задержку, i0.

Задержка именной группы фильтра дана i0+fd.

Типы данных: single | double

Измеренная объединенная полоса пропускания, возвращенная как действительная положительная скалярная величина, которая меньше 0.999. Это - значение объединенной полосы пропускания спроектированного фильтра. Объединенная полоса пропускания задана как минимум полосы пропускания усиления и полосы пропускания групповой задержки.

Когда вы задаете второй входной параметр, и значение меньше 0.999, функция обрабатывает это значение, когда цель объединила полосу пропускания TBW. Функция проектирует фильтр, таким образом что измеренная объединенная полоса пропускания MBW соответствует или превышает объединенную полосу пропускания цели TBW. Длина фильтра определяется таким образом, что этому ограничению полосы пропускания соответствуют.

Когда вы задаете второй входной параметр, и значение является целым числом, больше, чем 1, функция обрабатывает это значение как желаемую длину N из фильтра. Измеренная объединенная полоса пропускания в этом случае меняется в зависимости от длины, которую вы задаете. Больше значение N, выше измеренная объединенная полоса пропускания MBW. Смотрите, что график ниже этого показывает это изменение. Когда длина фильтра растет, объединенная полоса пропускания фильтра придвигается поближе к 1. Красная пунктирная вертикальная линия отмечает объединенную полосу пропускания для каждой длины. Дробное значение задержки для каждого из этих фильтров установлено к 0,3

Three lengths: N = 8, N= 32, and N=64. First row of subplots show the impulse response of the filters. Second row of subplots show the magnitude response of the filters. Third row of subplots show the group delay response of the filters.

Типы данных: single | double

Больше о

свернуть все

Дробный КИХ-фильтр задержки

Дробный КИХ-фильтр задержки является КИХ-приближением идеала sinc фильтр сдвига с заданным дробным (нецелое число) значение задержки fd в [0,1].

Идеальный фильтр сдвига моделирует ограниченный полосой интерполятор D/A, сопровождаемый переключенной универсальной выборкой A/D. Принимая универсальную частоту дискретизации и интерполяцию инварианта сдвига, получившаяся полная система может быть описана как фильтр свертки, аппроксимированный КИХ-фильтром. Другими словами, y[n]=hfd[n]x[n], который инкапсулирует интерполяцию D/A, сдвиг и A/D выборка цепи, как изображено на рисунке.

Block diagram of fractional delay FIR filter. Contains Interpolation block followed by Delay block and Sampling block.

где,

hfd[n]=sinc(nfd),x^(t)=kx[k]sinc(tk)x^(t+fd)=kx[k]sinc(t+fdk)

Частотная характеристика идеального фильтра сдвига дана следующим уравнением:

Hfd(ω)=ejωfd

Идеальный фильтр сдвига имеет плоский ответ усиления единицы и постоянную групповую задержку fd, где fd дробное значение задержки, которое вы задаете.

КИХ-приближение получено путем усечения идеального фильтра и взвешивания усеченного фильтра по окну Кайзера.

x^(n+fd)y[n]=(hx)[n],whereh[m]=sinc(m+fd)·KN,β[m]

где, KN,β[m] окно Кайзера длины N и имеет параметр формы β. Окно Кайзера спроектировано, чтобы оптимизировать КИХ-частотную характеристику, максимизировав объединенные полосы пропускания и ответа усиления и ответа групповой задержки.

Сделать КИХ-приближение причинным, дополнительный сдвиг i0 введен, делая задержку именной группы фильтра равной i0+fd. Частотной характеристикой усеченного фильтра дают, H(ω)=ejω(fd+i0).

Для получения дополнительной информации смотрите Целочисленную задержку, i0.

Целочисленная задержка, i0

Целочисленная задержка, i0, самый маленький целочисленный сдвиг, который требуется, чтобы делать симметричное окно Кайзера причинным.

Идеал sinc фильтр сдвига является фильтром allpass, который имеет бесконечную и непричинную импульсную характеристику. Чтобы аппроксимировать этот фильтр, функция использует конечное окно Кайзера индекса длины N это симметрично вокруг источника и получает основной лепесток sinc функция.

Overlay of ideal filter, truncated FIR filter, with non-causal symmetric window.

Из-за симметричной природы окна, половина окна (приблизительно равный N/2) находится на отрицательной стороне источника, делающего усеченный антипричинный фильтр. Чтобы сделать усеченный фильтр причинным, переключите антипричинное (отрицательные индексы) часть окна FIR целочисленной задержкой, i0, это приблизительно равно N/2.

Overlay of ideal filter, truncated FIR filter, with shifted causal window.

Полной задержкой причинного КИХ-фильтра является i0+fd, где fd дробное значение задержки, которое вы задаете.

Для получения дополнительной информации о КИХ-приближении смотрите Причинные КИХ-Приближения Идеала sinc раздел Shift Filter в Проекте Дробных КИХ-Фильтров Задержки.

Получите полосу пропускания

Учитывая КИХ-частотную характеристику H(ω), полоса пропускания усиления является самым большим интервалом [0 Ba], по которому ответ усиления |H(ω) | близко к 1 до данного значения допуска, tol.

Ba=maxω{||H(ν)|1|<tol0νω}

Полоса пропускания групповой задержки

Учитывая допуск tol и ответ групповой задержки G, полоса пропускания групповой задержки является самым большим интервалом [0 Bg] таким образом, что групповая задержка близко к номинальной стоимости, fd.

Bg=maxω{|G(ν)fdi0|<tol0νω}

Объединенная полоса пропускания

Объединенная полоса пропускания задана как минимум между полосой пропускания усиления и полосой пропускания групповой задержки.

Bc=min(Ba,Bg)

Объединенная полоса пропускания зависит от дробной задержки fd и длина КИХ фильтрует N.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2021a