Задержите входной сигнал с помощью блока Variable Fractional Delay. Каждое значение задержки уникально и может варьироваться от выборки до выборки в системе координат и может варьироваться через каналы. Можно вычислить несколько задержанных версий того же входного сигнала одновременно путем передачи задержки входа с соответствующей размерностью.
Полагайте, что вход случайный сигнал с одним каналом и форматом кадра 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 выборками, соответственно. Блок использует 'Линейный' метод интерполяции вычислить задержанное значение. Для получения дополнительной информации см. 'Алгоритмы' на странице блока Variable Fractional Delay.
Для того же вектора задержки, если вход имеет 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
Чтобы вычислить несколько задержанных версий двумерного входного сигнала, передайте вектор задержки как 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)
применяется к второму задержанному сигналу.