upfirdn

Сверхдискретизируйте, примените КИХ-фильтр и субдискретизируйте

Синтаксис

yout = upfirdn(xin,h)
yout = upfirdn(xin,h,p)
yout = upfirdn(xin,h,p,q)

Описание

yout = upfirdn(xin,h) фильтрует входной сигнал xin с КИХ-фильтром с импульсным ответом h. Никакая повышающая дискретизация или субдискретизация не реализованы с этим синтаксисом.

yout = upfirdn(xin,h,p) задает целое число, сверхдискретизировавшее факторный p.

пример

yout = upfirdn(xin,h,p,q) задает целое число, субдискретизирующее факторный q.

Примеры

свернуть все

Измените частоту дискретизации сигнала рациональным коэффициентом преобразования от уровня DAT 48 кГц к частоте дискретизации CD 44,1 кГц. Используйте функцию rat, чтобы найти числитель L и знаменателем M рационального фактора.

Fdat = 48e3;
Fcd = 44.1e3;
[L,M] = rat(Fcd/Fdat)
L = 147
M = 160

Сгенерируйте синусоиду на 1,5 кГц, выбранную в fDAT в течение 0,25 секунд. Постройте первую миллисекунду сигнала.

t = 0:1/Fdat:0.25-1/Fdat;
x = sin(2*pi*1.5e3*t);
stem(t,x)
xlim([0 0.001])
hold on

Разработайте сглаживание lowpass фильтр с помощью окна Kaiser. Установите ребра полосы фильтра как 90% и 110% частоты среза, (fDAT/2)×min(1/L,1/M). Задайте пульсацию полосы пропускания 5 дБ и затухание полосы задерживания 40 дБ. Установите усиление полосы пропускания на L.

f = (Fdat/2)*min(1/L,1/M);
d = designfilt('lowpassfir', ...
    'PassbandFrequency',0.9*f,'StopbandFrequency',1.1*f, ...
    'PassbandRipple',5,'StopbandAttenuation',40, ...
    'DesignMethod','kaiserwin','SampleRate',48e3);
h = L*tf(d);

Используйте upfirdn с фильтром h, чтобы передискретизировать синусоиду. Вычислите и компенсируйте задержку, введенную фильтром. Сгенерируйте соответствующий передискретизируемый временной вектор.

y = upfirdn(x,h,L,M);

delay = floor(((filtord(d)-1)/2-(L-1))/L);
y = y(delay+1:end);
t_res = (0:(length(y)-1))/Fcd;

Наложите передискретизируемый сигнал на графике.

stem(t_res,y,'*')
legend('Original','Resampled','Location','southeast')
hold off

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

свернуть все

Входной сигнал, заданный вектором или матрицей. Если xin является вектором, то он представляет один сигнал. Если xin является матрицей, то каждый столбец отфильтрован независимо.

Отфильтруйте импульсный ответ, заданный как вектор или матрица. Если h является вектором, то он представляет один КИХ-фильтр. Если h является матрицей, то каждый столбец является отдельной КИХ-импульсной последовательностью ответа.

Повышающая дискретизация фактора, заданного положительным целым числом.

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

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

свернуть все

Выходной сигнал, заданный как вектор или матрица. Если yout является вектором, то он представляет один сигнал. Если yout является матрицей, то каждым столбцом является отдельный вывод. Продолжительность вывода, yout является ceil(((length(xin)-1)*p+length(h))/q).

Примечание

Поскольку upfirdn выполняет свертку и изменение уровня, сигналы yout имеют различную длину, чем xin. Количество строк yout является приблизительно временами p/q количество строк xin.

Советы

Допустимые комбинации размеров xin и h:

  1. xin является вектором, и h является вектором.

    Входные параметры являются одним фильтром и одним сигналом, таким образом, функция применяет операцию свертки к xin с h. yout выходного сигнала является вектором - строкой, если xin является вектором - строкой; в противном случае yout является вектор-столбцом.

  2. xin является матрицей, и h является вектором.

    Входные параметры являются одним фильтром и многими сигналами, таким образом, функция применяет операцию свертки к h с каждым столбцом xin. Получившийся yout является матрицей с одинаковым числом столбцов как xin.

  3. xin является вектором, и h является матрицей.

    Входные параметры являются несколькими фильтрами и одним сигналом, таким образом, функция применяет операцию свертки к каждому столбцу h с xin. Получившийся yout является матрицей с одинаковым числом столбцов как h.

  4. xin является матрицей, и h является матрицей, обоими с одинаковым числом столбцов.

    Входные параметры являются несколькими фильтрами и несколькими сигналами, таким образом, функция применяет операцию свертки к соответствующим столбцам xin и h. Получившийся yout является матрицей с одинаковым числом столбцов как xin и h.

Алгоритмы

upfirdn использует многофазную структуру интерполяции. Количество умножается - добавляют, что операции в многофазной структуре приблизительно (Lh Lx – pLx)/q, где Lh и Lx являются длинами h (n) и x (n), соответственно.

Более точное количество флопс вычисляется в программе, но точное количество является все еще аппроксимированным. Для длинных сигналов x (n) формула часто точна.

upfirdn выполняет каскад трех операций:

  1. Сверхдискретизируйте входные данные в матричном xin фактором целочисленного p (вставка нулей)

  2. КИХ-фильтр сверхдискретизированные данные сигнала с импульсной последовательностью ответа, данной в векторном или матричном h

  3. Субдискретизируйте результат фактором целочисленного q (выбрасывающий выборки)

КИХ-фильтр обычно является фильтром lowpass, который необходимо разработать использование другой функции, такой как firpm или fir1.

Примечание

Функциональный resample выполняет КИХ-проект с помощью firls, сопровождаемого изменением уровня, реализованным с upfirdn.

Ссылки

[1] Crochiere, R. E. и Лоуренс Р. Рэбинер. Многоскоростная Цифровая обработка сигналов. Englewood Cliffs, NJ: Prentice Hall, 1983, стр 88–91.

[2] Crochiere, R. E. “Общая Программа, чтобы Выполнить Преобразование Уровня Выборки Данных Рациональными Отношениями”. Программы для Цифровой обработки сигналов (Комитет по цифровой обработке сигналов Акустики IEEE, Речи, и Общества Обработки сигналов, редакторов). Нью-Йорк: Нажатие IEEE, 1979, Программы 8.2-1-8.2-7.

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

Смотрите также

| | | | | | |

Представлено до R2006a