Передискретизация однородно выбранных сигналов

Этот пример показывает, как передискретизировать однородно выбранный сигнал к новому универсальному уровню. Это показывает, как уменьшать влияние крупных переходных процессов, а также как удалить нежелательное высокочастотное содержимое.

Преобразование уровня рациональным фактором

Функция 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.