Сигнал задержки, использующий многозадачную дробную задержку

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

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

Откройте модель.

model = 'MultitapFractionalDelay';
open_system(model)

Запустите модель.

input = randn(10,1) %#ok
input =

    0.5377
    1.8339
   -2.2588
    0.8622
    0.3188
   -1.3077
   -0.4336
    0.3426
    3.5784
    2.7694

delayVec = [4.8 8.2]; %#ok
sim(model)
display(output)
output =

         0         0
         0         0
         0         0
         0         0
    0.1075         0
    0.7969         0
    1.0153         0
   -1.6346         0
    0.7535    0.4301
   -0.0065    1.5746

Каждый канал в выходе задерживается на 4,8 и 8,2 выборки, соответственно. Блок использует метод интерполяции 'Linear', чтобы вычислить задержанное значение. Для получения дополнительной информации смотрите 'Алгоритмы' на странице блока Переменная дробная задержка.

Для того же вектора задержки, если вход имеет 2 канала, каждый элемент вектора задержки применяется к соответствующему каналу во входе.

input = randn(10,2);
sim(model);
display(output);
output =

         0         0
         0         0
         0         0
         0         0
   -0.2700         0
   -0.4729         0
    2.5730         0
    0.5677         0
    0.0925    0.5372
    0.5308   -0.8317

Чтобы вычислить несколько задержанные версии двумерного входного сигнала, передайте вектор задержки как трехмерный массив. Третья размерность содержит отводы или задержки для применения к сигналу. Если Вы передаете размерность трети неединичного предмета (1 на 1 на P), где P представляет количество сигналов, тот же сигнал применен через все каналы. Передайте задержки [4.8 8.2] в третьей размерности.

clear delayVec;
delayVec(1,1,1) = 4.8;
delayVec(1,1,2) = 8.2; %#ok
whos delayVec
  Name          Size             Bytes  Class     Attributes

  delayVec      1x1x2               16  double              

delayVec массив 1 на 1 на 2. Передайте двумерный вход в Variable Fractional Delay блок с этим вектором задержки.

sim(model)
display(output)
output(:,:,1) =

         0         0
         0         0
         0         0
         0         0
   -0.2700    0.1343
   -0.4729    0.2957
    2.5730   -0.8225
    0.5677    0.8998
    0.0925    1.4020
    0.5308    0.5981


output(:,:,2) =

         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
   -1.0799    0.5372
    2.1580   -0.8317

whos output
  Name         Size             Bytes  Class     Attributes

  output      10x2x2              320  double              

output(:,:,1) представляет входной сигнал, задержанный на 4,8 выборки. output(:,:,2) представляет входной сигнал, задержанный на 8,2 выборки. Та же задержка применяется по всем каналам.

В сложение, если вы передаете не синглтонное второе измерение (1 на L-на-P), где L - количество входа каналов, ответвления варьируются между каналами. Примените векторы задержки [2.3 3,5] и [4.4 5.6], чтобы вычислить две задержанные версии входного сигнала.

clear delayVec;
delayVec(1,1,1) = 2.3;
delayVec(1,2,1) = 3.5;
delayVec(1,1,2) = 4.4;
delayVec(1,2,2) = 5.6; %#ok
whos delayVec
  Name          Size             Bytes  Class     Attributes

  delayVec      1x2x2               32  double              

sim(model)
display(output)
output(:,:,1) =

         0         0
         0         0
   -0.9449         0
    1.7195    0.3357
    1.4183   -0.2680
    0.1735   -0.2451
    0.4814    1.1737
    0.0709    1.0596
   -0.1484    0.7618
    1.0055    0.8808


output(:,:,2) =

         0         0
         0         0
         0         0
         0         0
   -0.8099         0
    1.2810    0.2686
    1.6492   -0.0801
    0.2523   -0.4376
    0.4036    1.0824
    0.1629    1.1737

whos output
  Name         Size             Bytes  Class     Attributes

  output      10x2x2              320  double              

выход (:,:, 1) содержит входной сигнал, задержанный вектором [2.3 3.5]. выход (:,:, 2) содержит входной сигнал, задержанный вектором [4.4 5.6].

Чтобы изменить задержку в систему координат от выборки к выборке, первая размерность вектора задержки (N-by-1-by-P или N-на-L-на-P) должен равняться формат кадра входа (N-на-L). Передайте вектор задержки размера 10 на 1 на 2.

clear delayVec;
delayVec(:,1,1) = 3.1:0.1:4;
delayVec(:,1,2) = 0.1:0.1:1;
whos delayVec
  Name           Size             Bytes  Class     Attributes

  delayVec      10x1x2              160  double              

sim(model)
display(output)
output(:,:,1) =

         0         0
         0         0
         0         0
   -0.8099    0.4029
    0.8425   -0.2680
    2.1111   -0.4376
    0.4889    0.9911
    0.0925    1.4020
    0.6228    0.5435
   -0.2050    1.0347


output(:,:,2) =

   -1.2149    0.6043
    2.1580   -0.8317
    1.4183    0.1398
    0.2523    1.2650
    0.3258    1.0596
    0.3469    0.7072
   -0.1807    0.9424
    0.1986    0.5208
    1.4816   -0.2437
    1.4090    0.2939

Задержка изменяется для каждого элемента в канале. Один и тот же набор значений задержки применяется ко всем каналам. delayVec(:,1,1) применяется к первому задержанному сигналу и delayVec(:,1,2) применяется ко второму задержанному сигналу.

См. также

Блоки