exponenta event banner

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

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

Рассмотрим вход как случайный сигнал с одним каналом и размером кадра 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) применяется ко второму задержанному сигналу.

См. также

Блоки