dsp.SampleRateConverter

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

Описание

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

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

  1. Создайте dsp.SampleRateConverter Объекту и установите его свойства.

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

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

Создание

Описание

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

пример

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

Свойства

расширить все

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

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

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

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

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

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

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

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

Синтаксис

Описание

пример

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

Входные параметры

расширить все

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

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

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

расширить все

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

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

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

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

release(obj)

расширить все

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

Примеры

свернуть все

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

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

Примечание: The 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