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