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

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

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

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')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent 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')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original, Resampled.

Функция делает хорошее задание восстановления плоских областей импульса. Однако существуют скачки в ребрах импульса.

Увеличьте масштаб ребра первого импульса:

xlim([2e-3 3e-3])

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original, Resampled.

В области перехода существует ослабленное колебание. Можно уменьшить это колебание путем корректировки настроек внутреннего фильтра.

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])

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original, Resampled.

Колебание значительно уменьшается.

Фильтрация псевдонимов

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')

Figure contains an axes. The axes contains an object of type image.

Затем преобразуйте щебет в 44,1 кГц с помощью настроек по умолчанию resample и представление спектрограмма:

fs2 = 44100;

[p,q] = rat(fs2/fs1);
y = resample(x,p,q);

spectrogram(y,kaiser(256,15),220,412,fs2,'yaxis')

Figure contains an axes. The axes contains an object of type image.

Здесь вы видите исходное, а также нежелательное содержимое частоты сигнала. Идеально синусоида должна запуститься на уровне 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')

Figure contains an axes. The axes contains an object of type image.

Обратите внимание на то, что псевдонимы удалены.

Дополнительные материалы для чтения

Для получения дополнительной информации о передискретизации см. Signal Processing Toolbox.

Ссылка: fredric j harris, "Многоскоростная Обработка сигналов для Систем связи", Prentice Hall, 2004.

Смотрите также

| |