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 and other objects of type uitoolbar, uimenu. The axes 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 and other objects of type uitoolbar, uimenu. The axes 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. The axes 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 and other objects of type uitoolbar, uimenu. The axes 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 and other objects of type uitoolbar, uimenu. The axes 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. The axes 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. Axes 1 with title Input Sequence contains an object of type stem. Axes 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. The axes 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