dsp. SampleRateConverter

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

Описание

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

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

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

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

src = dsp.SampleRateConverter
src = dsp.SampleRateConverter(Name,Value)

Описание

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

пример

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

Свойства

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

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

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

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

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

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

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

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

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

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

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

Для версий ранее, чем R2016b, используйте функцию step, чтобы запустить алгоритм Системного объекта. Аргументы к step являются объектом, который вы создали, сопровождаемый аргументами, показанными в этом разделе.

Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Синтаксис

y = src(x)

Описание

пример

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

Примечание: dsp.AudioFileReader и Системные объекты dsp.AudioFileWriter не поддержаны в 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

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

Примечание: Если вы используете 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)

Вывод сигнала от конвертера A/D выбирается на уровне 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)))

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

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

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

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

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

m = c.Stage1;

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

Создайте многоступенчатый конвертер частоты дискретизации со свойствами по умолчанию, соответствование объединенным трем этапам фильтра раньше преобразовывало от 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)

Алгоритмы

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

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

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

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

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

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

Введенный в R2014b

Для просмотра документации необходимо авторизоваться на сайте