Свертка с использованием `` действительного '' в функции MATLAB conv ()

Здесь - это пример приведенной свертки:

Свертка с использованием `` действительного '' в функции MATLAB conv ()

У меня есть два вопроса:

  1. Почему вектор ? дополнен двумя нулями с каждой стороны? As, длина ядра равна 3. Если ? дополняется одним 0 с каждой стороны, средний элемент вывода свертки будет в пределах диапазона длины ?, почему бы не по одному 0 с каждой стороны?

  2. Объясните мне следующий вывод:

     >> x = [1, 2, 1, 3];  
     >> h = [2, 0, 1];  
     >> y = conv(x, h, 'valid')      
      y =    
          3     8  
     >>   
    

    Что здесь делает valid в контексте ранее показанной математики для векторов ? и ?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
696
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Я не могу сказать, какое количество нулевых отступов является правильным ... При этом любое нулевое заполнение составляет данные, которых нет. Это не обязательно неправильно, но вы должны знать, что значения, вычисляющие эту информацию, могут быть предвзятыми. Иногда это вас волнует, иногда нет. Введение 1 нуля (в данном случае) оставило бы среднее значение ядра всегда в данных, но почему это должно быть критерием остановки? Важно отметить, что добавление двух нулей по-прежнему оставляет одно умножение значений, которые фактически присутствуют в данных и ядре (x [0] * h [0] и x [3] * h [2] - с использованием индексации на основе 0). Добавление третьего нуля (или более) просто даст нули на выходе, поскольку 3 - это длина ядра. Другими словами, заполнение нулями всегда будет давать результат, который частично основан на фактических данных (но не полностью) для любого заполнения нулями от n = 1 до n = length (h) -1 (в данном случае либо 1, либо 2).

  2. Несмотря на то, что нулевое заполнение длиной 2 или 1 все еще имеет умножение на основе реальных данных, некоторые значения суммируются с «фальшивыми» данными (те, которые умножаются на заполненный ноль). В этом случае Matlab предоставляет вам 3 варианта возврата данных. Во-первых, вы можете получить свертку full, которая включает значения, которые смещены, потому что они включают добавление 0 значений, которых на самом деле нет в данных. В качестве альтернативы вы можете получить same, что означает, что длина вывода равна длине данных y = [4 3 8 1]. Это соответствует 1 нулю, но обратите внимание, что для более длинных ядер вы можете технически получить другую длину между full и same, Matlab просто не возвращает их для вас.

Наконец, что, вероятно, наиболее важно понять из всего этого, у вас есть опция valid. В вашем примере только 2 выборки выходных данных вычисляются из суммирования, которое происходит только из умножения над реальными данными (то есть из умножения выборок ядра на выборки из x, а не из нулей). Более конкретно:

y[2] = h[2]*x[0] + h[1]*x[1] + h[2]*x[2] = 3 //0 based indexing like example
y[3] = h[2]*x[1] + h[1]*x[2] + h[2]*x[3] = 8

Обратите внимание, что ни одно из других значений y не вычисляется только с h и x, все они включают дополненный ноль, который не обязательно указывает на реальные данные. Например:

y[4] = h[2]*x[2] + h[1]*x[3] + h[2]*0 <= padded zero   

Другие вопросы по теме