MATLAB.Exponenta
MATLAB и Simulink на русском
Технологии разработки и отладки
		сложных технических систем

Обработка сигналов и изображений\Signal Processing Toolbox

Список функций Signal Processing Toolbox: Весовые функции (окна)

  В оглавление\ К следующему разделу \ К предыдущему разделу

DECIMATE

Понижение частоты дискретизации сигнала (прореживание)

Синтаксис:

y = decimate(x,r)
y = decimate(x,r,n)
y = decimate(x,r,'fir')
y = decimate(x,r,n,'fir')

Описание:

Процедура прореживания, в противоположность интерполяции, понижает частоту дискретизации сигнала. Процесс прореживания сводится к пропусканию исходного сигнала через фильтр нижних частот (ФНЧ) и последующему отбрасыванию лишних отсчетов.

y = decimate(x,r)

Понижает частоту дискретизации сигнала x в r раз. Длина прореженного вектора y в r раз меньше, чем длина исходного вектора x. По умолчанию функция decimate использует ФНЧ Чебышева первого рода восьмого порядка. Для устранения фазовых искажений производится двунаправленная фильтрация сигнала (см. описание функции filtfilt), так что результирующий порядок фильтра удваивается.

y = decimate(x,r,n)

То же, что первый вариант синтаксиса, но используется фильтр Чебышева порядка n. Использовать фильтры более чем 13-го порядка не рекомендуется из-за численной нестабильности. При задании слишком высокого порядка MATLAB выводит соответствующее предупреждение.

y = decimate(x,r,'fir')

То же, что первый вариант синтаксиса, но вместо рекурсивного фильтра Чебышева используется нерекурсивный фильтр 30-го порядка, рассчитываемый с помощью функции fir1. В данном случае фильтрация производится только в одном направлении, поскольку такой нерекурсивный фильтр не вносит фазовых искажений. Данный вариант синтаксиса обеспечивает меньший расход памяти и полезен при обработке длинных сигналов.

y = decimate(x,r,n,'fir')

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

Примеры

Произведем четырехкратное прореживание сигнала:

t = 0:.00025:1;                      % Вектор значений времени
x = sin(2*pi*30*t) + sin(2*pi*60*t);
y = decimate(x,4);

Выведем графики исходного и прореженного сигналов:

stem(x(1:120)), axis([0 120 -2 2])   % Исходный сигнал 
title('Original Signal')
figure
stem(y(1:30))                        % Прореженный сигнал 
title('Decimated Signal')


Алгоритм

Функция decimate использует алгоритмы прореживания 8.2 и 8.3 из [1]:

  1. Производится расчет фильтра нижних частот. По умолчанию функция decimate использует фильтр Чебышева первого рода (функция cheby1) с нормированной частотой среза 0.8/r и пульсациями АЧХ в полосе пропускания, равными 0,05 дБ. При выборе варианта 'fir' функция decimate рассчитывает нерекурсивный фильтр нижних частот с нормированной частотой среза 1/r с помощью функции fir1.
  2. В случае нерекурсивного фильтра производится фильтрация входного сигнала в одном направлении. В случае рекурсивного фильтра производится двунаправленная фильтрация сигнала с помощью функции filtfilt.
  3. Производится собственно прореживание фильтрованного сигнала путем выборки каждого r-го отсчета.

Диагностические сообщения

Если значение r не является целым числом, функция decimate выдает следующее сообщение об ошибке:

Resampling rate R must be an integer.

Если заданный порядок рекурсивного фильтра n превышает 13, функция decimate выдает следующее предупреждение:

Warning: IIR filters above order 13 may be unreliable.

Сопутствующие функции: downsample, interp, resample, spline, upfirdn, upsample

Литература

  1. IEEE. Programs for Digital Signal Processing. IEEE Press. New York: John Wiley & Sons, 1979. Chapter 8.

  В оглавление\ К следующему разделу \ К предыдущему разделу


Поиск по сайту:

Система Orphus

Яндекс.Метрика