upfirdn

Upsample, применить конечную импульсную характеристику фильтр и downsample

Описание

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

Figure contains an axes. The axes contains an object of type stem.

Создайте антиалифицирующий lowpass с помощью окна Кайзера. Установите ребра фильтра как 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

Figure contains an axes. The axes contains 2 objects of type stem. These objects represent Original, Resampled.

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

свернуть все

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

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

Коэффициент увеличения дискретизации, заданный как положительное целое число.

Коэффициент понижающей дискретизации, заданный как положительное целое число.

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

свернуть все

Выходной сигнал, возвращенный в виде вектора или матрицы. Каждый столбец 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) соответственно. Для длинных сигналов эта формула часто точна.

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

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

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

  3. Понижайте значение результата на множитель целого числа q (выбрасывание выборок)

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

Примечание

Функция resample выполняет проект конечной импульсной характеристики, используя firls, далее следует изменение скорости, реализованное с upfirdn.

Ссылки

[1] Crochiere, R. E. «A General Program to Performing Частота Дискретизации Conversion of Data By Rational». Программы цифровой обработки сигналов (Digital Signal Processing Committee of the IEEE Acoustics, Speech, and Signal Processing Society, eds.). Нью-Йорк: IEEE Press, 1979, программы 8.2-1-8.2-7.

[2] Крокьер, Р. Э. и Лоуренс Р. Рабинер. Многоступенчатая обработка цифрового сигнала. Englewood Cliffs, Нью-Джерси: Prentice Hall, 1983.

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

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

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