Задержите сигнал Используя мультикасание дробная задержка

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

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

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

model = fullfile(matlabroot,'examples','dsp','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 выборками, соответственно. Блок использует 'Линейный' метод интерполяции вычислить задержанное значение. Для получения дополнительной информации см. 'Алгоритмы' на странице блока Variable Fractional Delay.

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

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

   -1.3499    0.6715
    3.0349   -1.2075
    0.7254    0.7172
   -0.0631    1.6302
    0.7147    0.4889
   -0.2050    1.0347
   -0.1241    0.7269
    1.4897   -0.3034
    1.4090    0.2939
    1.4172   -0.7873

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

Чтобы вычислить несколько задержанных версий двумерного входного сигнала, передайте вектор задержки как 3D массив. Третья размерность содержит касания или задержки, чтобы применяться на сигнал. Если вы передаете неодноэлементную размерность трети (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 1 P или N L P) должна равняться формату кадра входа (N-by-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) применяется к второму задержанному сигналу.

Смотрите также

Блоки

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