Этот пример показывает, как передискретизировать однородно выбранный сигнал к новому универсальному уровню. Это показывает, как уменьшать влияние крупных переходных процессов, а также как удалить нежелательное высокочастотное содержимое.
Функция 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 Гц sinewave использование исходной частоты дискретизации 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
будет иметь большую длину фильтра. 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 раз фактора десятикратного уменьшения, оконного с окном Kaiser с 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')
Обратите внимание на то, что псевдонимы удалены.
Для получения дополнительной информации о передискретизации см. Signal Processing Toolbox.
Ссылка: fredric j harris, "Многоскоростная Обработка сигналов для Систем связи", Prentice Hall, 2004.