exponenta event banner

upfirdn

Выполнить повторную выборку, применить фильтр FIR и выполнить повторную выборку

Описание

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.

Создайте сглаживающий фильтр нижних частот с помощью окна 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

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

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

свернуть все

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

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

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

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

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

свернуть все

Выходной сигнал, возвращаемый в виде вектора или матрицы. Каждый столбец 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 использует структуру полифазной интерполяции. Число операций умножения-сложения в полифазной структуре составляет приблизительно (LhLx - pLx )/q, где Lh и Lx - длины h (n) и x (n) соответственно. Для длинных сигналов эта формула часто точна.

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

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

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

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

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

Примечание

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

Ссылки

[1] Крохьер, Р. Э. «Общая программа выполнения преобразования частоты дискретизации данных по рациональным соотношениям». Программы цифровой обработки сигналов (Комитет по цифровой обработке сигналов Общества акустики, речи и обработки сигналов IEEE, ред.). Нью-Йорк: IEEE Press, 1979, Программы 8.2-1-8.2-7.

[2] Crochiere, R. E. и Лоуренс Р. Рэбинер. Многоскоростная цифровая обработка сигналов. Энглвуд Клиффс, Нью-Джерси: Прентис-Холл, 1983.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

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