В этом примере показано, как передискретизировать неоднородно выбранные сигналы к новому универсальному уровню. Это показывает, как применить пользовательский фильтр на нерегулярно выборочные данные, чтобы уменьшать искажение. Это также показывает, как использовать удаление тренда, чтобы удалить переходные процессы в запуске и в конце сигнала.
resample
функция позволяет вам преобразовывать неоднородно выбранный сигнал в новый универсальный уровень.
Создайте синусоиду на 500 Гц, произведенную нерегулярно на уровне приблизительно 48 кГц. Мы симулируем неисправность путем добавления случайных значений в универсальный вектор.
rng default nominalFs = 48000; f = 500; Tx = 0:1/nominalFs:0.01; irregTx = sort(Tx + 1e-4*rand(size(Tx))); x = sin(2*pi*f*irregTx); plot(irregTx,x,'.')
Чтобы передискретизировать неоднородно выбранный сигнал, можно вызвать resample
с входом временного вектора.
Следующий пример преобразует наш исходный сигнал в универсальный уровень на 44,1 кГц.
desiredFs = 44100; [y, Ty] = resample(x,irregTx,desiredFs); plot(irregTx,x,'.-',Ty,y,'o-') legend('Original','Resampled') ylim([-1.2 1.2])
Вы видите, что наш передискретизируемый сигнал имеет ту же форму и размер как исходный сигнал.
Алгоритм преобразования в resample
работает лучше всего, когда входные выборки максимально близко к расположенному с равными интервалами, таким образом, это поучительно, чтобы наблюдать то, что может произойти, когда раздел входных выборок отсутствует в выборочных данных.
Следующий пример отмечает второй гребень входной синусоиды, и примените передискретизацию.
irregTx(105:130) = []; x = sin(2*pi*f*irregTx); [y, Ty] = resample(x,irregTx,desiredFs); plot(irregTx,x,'. ') hold on plot(Ty,y,'.-') hold off legend('Original','Resampled') ylim([-1.2 1.2])
Недостающий сегмент соединяется линейной интерполяцией. Линейная интерполяция является методом по умолчанию, используемым resample
функция, чтобы передискретизировать неоднородно выборочные данные.
В некоторых случаях, где у вас есть недостающие данные или большие разрывы в вашем входе, можно восстановить некоторые недостающие данные путем выбора различного метода интерполяции.
Для малошумящего, сигналов низкой пропускной способности, сплайны могут быть очень эффективными, когда используется восстановить исходный сигнал. Чтобы использовать кубический сплайн во время передискретизации, предоставьте метод интерполяции 'сплайна':
[y, Ty] = resample(x,irregTx,desiredFs,'spline'); plot(irregTx,x,'. ') hold on plot(Ty,y,'.-') hold off legend('Original','Resampled using ''spline''') ylim([-1.2 1.2])
По умолчанию, resample
создает промежуточную сетку, которая является близким рациональным приближением отношения между желаемой частотой дискретизации и средней частотой дискретизации сигнала.
Если раздел ваших входных выборок содержит высокочастотные компоненты, можно управлять интервалом промежуточной сетки путем выбора целочисленных коэффициентов, p
и q
, выбрать это рациональное отношение.
Исследуйте переходной процесс underdampened фильтра второго порядка, который колеблется на уровне приблизительно 3 Гц:
w = 2*pi*3;
d = .1002;
z = sin(d);
a = cos(d);
t = [0:0.05:2 3:8];
x = 1 - exp(-z*w*t).*cos(w*a*t-d)/a;
plot(t,x,'.-')
Переходной процесс производится на высоком показателе, где он колеблется и под низкий процент, где это не.
Теперь передискретизируйте сигнал на уровне 100 Гц только с помощью настроек по умолчанию:
Fs = 100; [y, Ty] = resample(x,t,Fs); plot(t,x,'. ') hold on plot(Ty,y) hold off legend('Original','Resampled (default settings)')
Конверт колебания в начале формы волны ослабляется и колеблется более медленно, чем исходный сигнал.
resample
, по умолчанию, интерполирует к сетке расположенных с равными интервалами интервалов, которые соответствуют средней частоте дискретизации входного сигнала.
avgFs = (numel(t)-1) /(t(end)-t(1))
avgFs = 5.7500
Частота дискретизации сетки должна быть выше, чем дважды самая большая частота, которую вы хотите измерить. Частота дискретизации сетки, 5,75 выборок в секунду, ниже частоты дискретизации Найквиста, 6 Гц, звонящей частоты.
Чтобы заставить сетку иметь более высокую частоту дискретизации, можно предоставить целочисленные параметры, p
и q
передискретизация
настраивает частоту дискретизации сетки к Q*Fs/P, интерполирует сигнал, и затем применяет его внутренний конвертер частоты дискретизации (сверхдискретизировавший P и прореживающий Q), чтобы восстановить желаемую частоту дискретизации, Использование Фс rat
выбрать p
и q
.
Поскольку вызов колебания составляет 3 Гц, задайте сетку с частотой дискретизации 7 Гц, которая немного выше, чем уровень Найквиста. Высота счетов на 1 Гц на дополнительное содержимое частоты из-за затухающего экспоненциального конверта.
Fgrid = 7; [p,q] = rat(Fs/Fgrid)
p = 100
q = 7
[y, Ty] = resample(x,t,Fs,p,q); plot(t,x,'.') hold on plot(Ty,y) hold off legend('Original','Resampled (custom P and Q)')
В следующем примере можно просмотреть вывод цифрового преобразователя, который измеряет установку дросселя на механизме самолета. Установка дросселя неоднородно производится о номинальном уровне 100 Гц. Мы попытаемся передискретизировать этот сигнал на универсальном уровне на 10 Гц.
Вот выборки нашего исходного сигнала.
load engineRPM plot(t,x,'.') xlabel('Time (s)') ylabel('RPM')
Наш сигнал квантуется. Теперь масштабируйте в возрастающую область во временном интервале от 20 секунд до 23 секунд:
plot(t,x,'.')
xlim([20 23])
Сигнал медленно варьируется в этой области. Это позволяет вам удалять часть шума квантования при помощи фильтра сглаживания в resampler.
desiredFs = 10; [y,ty] = resample(x,t,desiredFs); plot(t,x,'.') hold on plot(ty,y,'.-') hold off xlabel('Time') ylabel('RPM') legend('Original','Resampled') xlim([20 23])
Это работает обоснованно хорошо. Однако передискретизируемый сигнал может сглаживаться далее путем обеспечения resample
фильтр с низкой частотой среза.
Во-первых, установите интервал сетки быть о нашей номинальной частоте дискретизации на 100 Гц.
nominalFs = 100;
Затем определите разумный p
и q
получить желаемый уровень. Поскольку номинальный уровень составляет 100 Гц, и наш желаемый уровень составляет 10 Гц, необходимо десятикратно уменьшить 10. Это эквивалентно установке p
к 1 и установка q
к 10.
p = 1; q = 10;
Можно предоставить resample
с вашим собственным фильтром. Чтобы иметь соответствующее временное выравнивание, фильтр должен иметь нечетную длину. Длина фильтра должна быть несколько раз больше, чем p
или q
(какой бы ни больше). Установите частоту среза быть 1 / q
желаемое сокращение и затем умножает получившиеся коэффициенты на p
.
% ensure an odd length filter n = 10*q+1; % use .25 of Nyquist range of desired sample rate cutoffRatio = .25; % construct lowpass filter lpFilt = p * fir1(n, cutoffRatio * 1/q); % resample and plot the response [y,ty] = resample(x,t,desiredFs,p,q,lpFilt); plot(t,x,'.') hold on plot(ty,y) hold off xlabel('time') ylabel('RPM') legend('Original','Resampled (custom filter)','Location','best') xlim([20 23])
Теперь уменьшите масштаб, чтобы просмотреть наш исходный сигнал. Обратите внимание на то, что существует значительное смещение в конечных точках.
plot(t,x,'.',ty,y) xlabel('time') ylabel('RPM') legend('original','resampled (custom filter)','Location','best')
Эти артефакты возникают потому что resample
принимает, что сигнал является нулем вне границ сигнала. Чтобы уменьшать эффект этих разрывов, вычтите от линии между конечными точками сигнала, выполните передискретизацию, и затем добавьте назад линию на исходную функцию. Можно сделать это путем вычисления наклона и смещения линии между первой и последней выборкой, и использования polyval
создать линию, чтобы вычесть.
% compute slope and offset (y = a1 x + a2) a(1) = (x(end)-x(1)) / (t(end)-t(1)); a(2) = x(1); % detrend the signal xdetrend = x - polyval(a,t); plot(t,xdetrend)
Детрендированный сигнал теперь имеет обе из своих конечных точек около нуля, который уменьшает введенные переходные процессы. Вызовите resample
и затем добавьте назад тренд.
[ydetrend,ty] = resample(xdetrend,t,desiredFs,p,q,lpFilt); y = ydetrend + polyval(a,ty); plot(t,x,'.',ty,y) xlabel('Time') ylabel('RPM') legend('Original','Resampled (detrended, custom filter)','Location','best')
В этом примере показано, как использовать resample
преобразовывать однородно и неоднородно выбранные сигналы к фиксированной процентной ставке.
Для получения дополнительной информации о восстановлении расположенных с неоднородными интервалами выборок с пользовательскими сплайнами можно консультироваться с документацией Curve Fitting Toolbox™.