Этот пример показывает, как переопределить равномерно дискретизированный сигнал к новой однородной скорости. Это показывает, как уменьшить влияние больших переходных процессов, а также как удалить нежелательные высокие частоты содержимого.
The 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
.
The 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
будет иметь большую длину фильтра. 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])
Колебание значительно уменьшается.
The 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, «Multirate Signal Processing for Коммуникационные Системы», Prentice Hall, 2004.