Этот пример показывает, как передискретизировать неоднородно выбранные сигналы к новому универсальному уровню. Это показывает, как применить пользовательский фильтр на нерегулярно выборочные данные, чтобы уменьшать искажение. Это также показывает, как использовать удаление тренда, чтобы удалить переходные процессы в запуске и в конце сигнала.
Функция 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
. resample
настраивает частоту дискретизации сетки к 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™.