dsp.SampleRateConverter

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

Описание

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

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

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

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

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

Создание

Описание

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

пример

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

Свойства

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

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

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

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

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