В этом примере показано, как выполнить повторную выборку равномерно дискретизированного сигнала на новую равномерную скорость. В нем показано, как уменьшить влияние больших переходных процессов, а также как удалить нежелательное высокочастотное содержимое.
resample функция выполняет преобразование скорости из одной частоты дискретизации в другую. resample позволяет увеличить число на интегральный коэффициент, pи затем прореживаются другим интегральным фактором, q. Таким образом можно выполнить повторную выборку к рациональному кратному (p / q) исходной частоты выборки.
Для использования resample функция на однородных образцах, вы должны предоставить и числитель и знаменатель этого рационального фактора. Чтобы определить необходимые целые числа, вы можете использовать rat функция.
Вот пример того, как звонить rat при преобразовании из 48 кГц в 44,1 кГц:
originalFs = 48000; desiredFs = 44100; [p,q] = rat(desiredFs / originalFs)
p = 147
q = 160
rat указывает, что вы можете увеличить выборку на 147 и прорежьте на 160. Чтобы убедиться, что это дает требуемую скорость, умножьте p / q по исходной частоте выборки:
originalFs * p / q
ans = 44100
Как только у вас будет соотношение между новой и исходной частотой выборки, вы можете позвонить resample.
Например, создайте синусоиду длиной 10 миллисекунд 500 Гц с использованием исходной частоты дискретизации 48 кГц и преобразуйте ее в 44,1 кГц:
tEnd = 0.01; Tx = 0:1/originalFs:tEnd; f = 500; x = sin(2*pi*f*Tx); y = resample(x,p,q); Ty = (0:numel(y)-1)/desiredFs; plot(Tx,x,'. ') hold on plot(Ty,y,'o ') hold off legend('Original','Resampled')

Для хорошо ведущих себя сигналов, таких как синусоида выше, просто используя resample с тщательно выбранным p и q должно быть достаточно, чтобы восстановить его должным образом.
Для сигналов с переходными процессами или значительным шумом вы можете иметь больший контроль над полифазным сглаживающим фильтром в resample.
resample функция использует фильтр, когда выполняет преобразование скорости. Эта фильтрация чувствительна к большим переходным процессам в сигнале.
Чтобы проиллюстрировать это, выполните повторную выборку прямоугольного импульса:
x = [zeros(1,120) ones(1,241) zeros(1,120)]; y = resample(x,p,q); plot(Tx,x,'-', Ty,y,'-') legend('Original','Resampled')

Функция хорошо справляется с восстановлением плоских областей импульса. Однако на краях импульса имеются шипы.
Увеличьте изображение края первого импульса:
xlim([2e-3 3e-3])

В переходной области происходит демпфированное колебание. Можно уменьшить это колебание, настроив настройки внутреннего фильтра.
resample позволяет управлять окном Kaiser, применяемым к фильтру сглаживания, что может уменьшить некоторые краевые эффекты.
Два параметра, n и beta, управляют относительной длиной фильтра и степенью сглаживания, которое он пытается выполнить. Большее значение n будет иметь большую длину фильтра. A beta 0 не будет иметь дополнительного сглаживания. Больше beta значения будут иметь большее сглаживание. По умолчанию n равно 10 и beta равно 5.
Практический способ начать с значений по умолчанию и скорректировать по мере необходимости. Здесь, набор n до 5 и beta до 20.
n = 5; beta = 20; y = resample(x,p,q,n,beta); plot(Tx,x,'.-') hold on plot(Ty,y,'o-') hold off legend('Original','Resampled') xlim([2e-3 3e-3])

Колебание значительно уменьшается.
resample функция предназначена для преобразования скоростей выборки в более высокие или более низкие скорости. Как следствие, отсечка частоты фильтра сглаживания устанавливается на частоту Найквиста входной или выходной частоты дискретизации (в зависимости от того, какая частота ниже). Этот параметр по умолчанию позволяет resample функция охватывает широкий спектр областей применения.
Бывают случаи, когда прямое управление фильтром может быть полезным.
Чтобы проиллюстрировать это, создайте и просмотрите спектрограмму сигнала чирпа, дискретизированного при 96 кГц. Чирп-сигнал состоит из синусоиды, частота которой изменяется квадратично по всему диапазону Найквиста от 0 Гц до 48 кГц в течение восьми секунд:
fs1 = 96000; t1 = 0:1/fs1:8; x = chirp(t1, 0, 8, fs1/2, 'quadratic'); spectrogram(x,kaiser(256,15),220,412,fs1,'yaxis')

Затем преобразуйте чирп в 44,1 кГц с помощью настроек по умолчанию resample и просмотрите спектрограмму:
fs2 = 44100;
[p,q] = rat(fs2/fs1);
y = resample(x,p,q);
spectrogram(y,kaiser(256,15),220,412,fs2,'yaxis')
Здесь можно увидеть исходный сигнал, а также нежелательное частотное содержимое. В идеале синусоида должна начинаться с 0 Гц и продолжаться до тех пор, пока не достигнет частоты Найквиста 22,05 кГц на 5,422 с. Вместо этого, существуют артефакты, введенные из-за небольших разрывов, введенных на краях фильтра по умолчанию, используемого для повторной выборки. Чтобы предотвратить эти артефакты, можно предоставить более длинный фильтр с несколько меньшей частотой отсечения и большим отклонением полосы останова, чем фильтр по умолчанию.
Для правильного временного выравнивания фильтр должен иметь нечетную длину. Длина должна быть в несколько раз больше, чем p или q (в зависимости от того, что больше). Аналогично, делите требуемую нормированную частоту отсечки на большую из p или q. В любом случае умножьте результирующие коэффициенты на p.
Вот пример фильтра с отсечкой на 98% (0,98) выходной частоты Найквиста с порядком 256-кратного коэффициента прореживания, с окном Кайзера с beta из 12.
normFc = .98 / max(p,q); order = 256 * max(p,q); beta = 12; lpFilt = firls(order, [0 normFc normFc 1],[1 1 0 0]); lpFilt = lpFilt .* kaiser(order+1,beta)'; lpFilt = lpFilt / sum(lpFilt); % multiply by p lpFilt = p * lpFilt; % resample and plot the response y = resample(x,p,q,lpFilt); spectrogram(y,kaiser(256,15),220,412,fs2,'yaxis')

Обратите внимание, что псевдонимы удалены.
Для получения дополнительной информации о повторной выборке см. Панель инструментов обработки сигналов.
Справка: fredric j harris, «Многоскоростная обработка сигналов для систем связи», Прентис Холл, 2004.