exponenta event banner

dsp. SampleRateConverter

Многоступенчатый преобразователь частоты дискретизации

Описание

SampleRateConverter Система object™ преобразует частоту дискретизации входящего сигнала.

Для преобразования частоты дискретизации сигнала:

  1. Создать dsp.SampleRateConverter и задайте его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

src = dsp.SampleRateConverter создает объект System многоступенчатого преобразователя частоты дискретизации FIR, src, которая преобразует частоту дискретизации каждого канала входного сигнала.

пример

src = dsp.SampleRateConverter(Name,Value) возвращает объект System многоступенчатого преобразователя частоты дискретизации FIR, src, со свойствами и опциями, заданными одним или несколькими Name,Value аргументы пары.

Свойства

развернуть все

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

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

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

Укажите максимально допустимый допуск для частоты дискретизации выходного сигнала как положительный скаляр между 0 и 1.

Допуск выходной скорости во многих случаях позволяет упростить конструкцию. Фактическая частота выборки на выходе варьируется, но находится в пределах указанного диапазона. Например, если OutputRateTolerance указывается как 0.01, то фактическая выходная частота выборки находится в диапазоне, заданном OutputSampleRate  ± 1%.

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

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

Использование

Синтаксис

Описание

пример

y = src(x) конструирует один или несколько многоскоростных КИХ-фильтров, а затем использует фильтры для преобразования скорости каждого канала (столбца) реального или комплексного входного сигнала x к выходной частоте дискретизации.

Входные аргументы

развернуть все

Входной сигнал, заданный как вектор или матрица. Длина строки x должен быть кратен общему коэффициенту прореживания. Коэффициент прореживания определяется по getRateChangeFactors функция. Каждый столбец x рассматривается как отдельный канал.

Типы данных: single | double
Поддержка комплексного номера: Да

Выходные аргументы

развернуть все

Повторно дискретизированный сигнал, возвращаемый в виде вектора или матрицы.

Типы данных: single | double
Поддержка комплексного номера: Да

Функции объекта

Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:

release(obj)

развернуть все

getActualOutputRateПолучить фактическую выходную скорость
getFiltersПолучение одноступенчатых фильтров
getRateChangeFactorsПолучение общих коэффициентов интерполяции и прореживания
visualizeFilterStagesВизуализация этапов фильтра
costСтоимость внедрения преобразователя частоты дискретизации
freqzЧастотная характеристика многоступенчатого фильтра
infoОтображение информации о преобразователе частоты дискретизации
stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System

Примеры

свернуть все

Преобразование частоты дискретизации звукового сигнала с 44,1 кГц (качество CD) в 96 кГц (качество DVD).

Примечание.При использовании R2016a или более ранней версии замените каждый вызов объекта эквивалентным step синтаксис. Например, obj(x) становится step(obj,x).

Примечание: dsp.AudioFileWriter Системная object™ не поддерживается в MATLAB Online.

fs1 = 44.1e3;
fs2 = 96e3;

SRC = dsp.SampleRateConverter('Bandwidth',40e3,...
    'InputSampleRate',fs1,'OutputSampleRate',fs2);

[L,M] = getRateChangeFactors(SRC);
FrameSize = 10*M;

AR = dsp.AudioFileReader('guitar10min.ogg', ...
    'SamplesPerFrame',FrameSize);
AW = dsp.AudioFileWriter('guitar10min_96k.wav', ...
    'SampleRate',fs2);

Запустите систему для 15 с. Деблокируйте все объекты.

tic
while toc < 15
    x = AR();
    y = SRC(x);
    AW(y);
end

release(AR);
release(AW);
release(SRC);

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

t1 = 0:1/fs1:1/30-1/fs1;
t2 = 0:1/fs2:1/30-1/fs2;

delay = 114;

el1 = 1:length(t1)-delay;

el2 = 1:length(t2);
el2(1:delay) = [];

subplot(2,1,1)
plot(t1(1:length(el1)),x(el1,1))
hold on
plot(t1(1:length(el1)),x(el1,2))
title('Input')

subplot(2,1,2)
plot(t2(1:length(el2)),y(el2,1))
hold on
plot(t2(1:length(el2)),y(el2,2))
xlabel('Time (s)')
title('Output')

Figure contains 2 axes. Axes 1 with title Input contains 2 objects of type line. Axes 2 with title Output contains 2 objects of type line.

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

figure

subplot(2,1,1)
plot(t1(1:length(el1)),x(el1,1),'o-')
hold on
plot(t2(1:length(el2)),y(el2,1),'d--')
xlim([0.01 0.0103])
title('First channel')

subplot(2,1,2)
plot(t1(1:length(el1)),x(el1,2),'o-')
hold on
plot(t2(1:length(el2)),y(el2,2),'d--')
xlim([0.01 0.0103])
xlabel('Time (s)')
title('Second channel')

Figure contains 2 axes. Axes 1 with title First channel contains 2 objects of type line. Axes 2 with title Second channel contains 2 objects of type line.

Примечание.При использовании R2016a или более ранней версии замените каждый вызов объекта эквивалентным step синтаксис. Например, obj(x) становится step(obj,x).

Создайте многоступенчатый преобразователь частоты дискретизации со свойствами по умолчанию. Преобразователь преобразуется из 192 кГц в 44,1 кГц в три этапа.

src = dsp.SampleRateConverter;

Использовать src для преобразования частоты дискретизации шумной синусоиды. Синусоида имеет частоту 20 кГц и отбирается в течение 0,1 с.

f = 20e3;

FsIn = src.InputSampleRate;
FsOut = src.OutputSampleRate;

t1 = (0:1/FsIn:0.1-1/FsIn)';

sIn = sin(2*pi*f*t1) + randn(size(t1));

Оцените спектральную плотность мощности входа.

hsa = dsp.SpectrumAnalyzer('SampleRate',FsIn,'YLimits',[-40 40]);
hsa(sIn)

Преобразование частоты дискретизации сигнала. Оцените спектральную плотность мощности выходного сигнала.

sOut = src(sIn);

hsb = dsp.SpectrumAnalyzer('SampleRate',FsOut,'YLimits',[-40 40]);
hsb(sOut)

Выходной сигнал аналого-цифрового преобразователя дискретизируется на 98,304 МГц. Сигнал имеет ширину полосы 20 МГц. Уменьшите частоту дискретизации сигнала до 22 МГц, что соответствует полосе пропускания каналов 802.11. Выполните точное преобразование, а затем повторите его с допуском выходной скорости 1%.

SRC1 = dsp.SampleRateConverter('Bandwidth',20e6, ...
    'InputSampleRate',98.304e6,'OutputSampleRate',22e6, ...
    'OutputRateTolerance',0);
SRC2 = dsp.SampleRateConverter('Bandwidth',20e6, ...
    'InputSampleRate',98.304e6,'OutputSampleRate',22e6, ...
    'OutputRateTolerance',0.01);

Используйте cost способ определения стоимости каждого преобразования частоты выборки. Процесс нулевого допуска требует более чем в 500 раз больше коэффициентов, чем процесс 1%.

c1 = cost(SRC1)
c1 = struct with fields:
                  NumCoefficients: 84779
                        NumStates: 133
    MultiplicationsPerInputSample: 27.0422
          AdditionsPerInputSample: 26.0684

c2 = cost(SRC2)
c2 = struct with fields:
                  NumCoefficients: 150
                        NumStates: 127
    MultiplicationsPerInputSample: 22.6667
          AdditionsPerInputSample: 22.1111

Найдите целочисленные коэффициенты повышающей и понижающей дискретизации, используемые в каждом преобразовании.

[L1,M1] = getRateChangeFactors(SRC1)
L1 = 1375
M1 = 6144
[L2,M2] = getRateChangeFactors(SRC2)
L2 = 2
M2 = 9

Вычислите фактическую частоту дискретизации выходного сигнала, если преобразование частоты дискретизации имеет допуск 1%.

getActualOutputRate(SRC2)
ans = 2.1845e+07

Примечание.При использовании R2016a или более ранней версии замените каждый вызов объекта эквивалентным step синтаксис. Например, obj(x) становится step(obj,x).

Создайте многоступенчатый преобразователь частоты дискретизации со свойствами по умолчанию, соответствующими объединенным трем ступеням фильтра, используемым для преобразования от 192 кГц до 44,1 кГц. Определите его общие коэффициенты прореживания и интерполяции.

src = dsp.SampleRateConverter;

[L,M] = getRateChangeFactors(src);

Создайте двухканальный случайный сигнал. Укажите число выборок, равное коэффициенту прореживания. Вызовите объект дважды по сигналу.

x = randn(M,2);

y1 = src(x);
y2 = src(x);

no = all(y2==y1)
no = 1x2 logical array

   0   0

Выходные данные отличаются, поскольку внутренние состояния src изменились. Использовать reset для сброса преобразователя и повторного вызова преобразователя. Убедитесь, что выходные данные не изменились.

reset(src)

y3 = src(x);

yes = all(y3==y1)
yes = 1x2 logical array

   1   1

Создайте многоступенчатый преобразователь частоты дискретизации со свойствами по умолчанию, соответствующими объединенным трем ступеням фильтра, используемым для преобразования от 192 кГц до 44,1 кГц. Вычислите и отобразите частотную характеристику.

src = dsp.SampleRateConverter;
[H,f] = freqz(src);
plot(f,20*log10(abs(H)))

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

Вычислите и отобразите частотную характеристику в диапазоне от 20 Гц до 44,1 кГц.

f = 20:10:44.1e3;
[H,f] = freqz(src,f);
plot(f,20*log10(abs(H)))

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

Создать srcмногоступенчатый преобразователь частоты дискретизации со свойствами по умолчанию. src преобразует от 192 кГц до 44,1 кГц. Найдите отдельные фильтры, которые объединяются вместе для выполнения преобразования.

src = dsp.SampleRateConverter;
c = getFilters(src);

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

m = c.Stage1;

[h,w] = freqz(m);
plot(w/pi,20*log10(abs(h)))
xlabel('\omega / \pi')
ylabel('Magnitude (dB)')

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

Создайте многоступенчатый преобразователь частоты дискретизации со свойствами по умолчанию, соответствующими объединенным трем ступеням фильтра, используемым для преобразования от 192 кГц до 44,1 кГц.

src = dsp.SampleRateConverter
src = 
  dsp.SampleRateConverter with properties:

        InputSampleRate: 192000
       OutputSampleRate: 44100
    OutputRateTolerance: 0
              Bandwidth: 40000
    StopbandAttenuation: 80

Отображение информации о конструкции.

info(src)
ans = 
    'Overall Interpolation Factor    : 147
     Overall Decimation Factor       : 640
     Number of Filters               : 3
     Multiplications per Input Sample: 27.667188
     Number of Coefficients          : 8631
     Filters:                         
        Filter 1:
        dsp.FIRDecimator     - Decimation Factor   : 2 
        Filter 2:
        dsp.FIRDecimator     - Decimation Factor   : 2 
        Filter 3:
        dsp.FIRRateConverter - Interpolation Factor: 147
                             - Decimation Factor   : 160 
     '

Получить фактическую выходную частоту дискретизации для преобразования от 192 кГц до 44,1 кГц, если задан допуск 1%.

src = dsp.SampleRateConverter;
src.OutputRateTolerance = 0.01;
FsOut = getActualOutputRate(src)
FsOut = 4.4308e+04

Создать srcмногоступенчатый преобразователь частоты дискретизации со свойствами по умолчанию. src объединяет три ступени фильтра для преобразования от 192 кГц до 44,1 кГц. Определите его общие коэффициенты интерполяции и прореживания.

src = dsp.SampleRateConverter;
[L,M] = getRateChangeFactors(src)
L = 147
M = 640

Создайте многоступенчатый преобразователь частоты дискретизации со свойствами по умолчанию, соответствующими объединенным трем ступеням фильтра, используемым для преобразования от 192 кГц до 44,1 кГц. Визуализация этапов.

src = dsp.SampleRateConverter;
visualizeFilterStages(src)

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 3 objects of type line. These objects represent Filter #1, Filter #2, Filter #3.

Алгоритмы

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

  • Процедура автоматически определяет оптимальное количество этапов прореживания или интерполяции. В особых случаях прореживание или интерполяция может выполняться в один этап.

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

  • Каждый отдельный этап использует фильтры полусферы или Nyquist для минимизации числа ненулевых коэффициентов.

  • Допускается наложение псевдонимов в диапазоне переходов, поскольку это снижает стоимость реализации. Сигнал в пределах интересующей полосы частот остается свободным от псевдонимов до значения, заданного StopbandAttenuation собственность.

Расширенные возможности

.
Представлен в R2014b