Как создать собственный код свертки в Matlab без использования встроенной функции

Я пытаюсь создать программу на Matlab, чтобы показать свертку двух сигналов, но без использования функции 'conv'.

Входные данные: ????(????)=????xp(-4t+4)*????(????−1)+0,5????(????−5)+2????(????−10)

Я выяснил, что h(t) = 4*exp(-4t)*u(t). Я пытаюсь сделать программу на MATLAB для вычисления и отображения свертки двух массивов, представляющих два сигнала, но без использования встроенной функции 'conv'. У меня есть рабочий код, но он включает 'conv', поэтому я пытаюсь сделать это, не используя это.

t=linspace(0,11,1101);  

%create more than 500 time-series values

vs=exp(-4*(t-1)).*heaviside(t-1)+0.5*heaviside(t-5)+2*dirac(t-10);

%Input signal array

h=4*exp(-4*t).*heaviside(t);

%Input signal array

vc=conv(vs,h);

t1=linspace(0,22,2201);

%Convolution of two arrays

subplot(3,1,1)

plot(t,vs)

xlabel('t')

ylabel('v_s(t)')

title('Input signal')

subplot(3,1,2)

plot(t,h)

xlabel('t')

ylabel('h(t)')

title('System impulse response')

subplot(3,1,3)

plot(t1,vc)

xlabel('t')


ylabel('v_c(t)')

title('Output signal')

person Jared    schedule 03.09.2019    source источник
comment
Пожалуйста, найдите свой вопрос, прежде чем публиковать его здесь. Здесь буквально сотни вопросов от людей, публикующих свой код свертки и спрашивающих, что с ним не так. Вы можете взять любой из них, исправить их в соответствии с опубликованными ответами, и все готово.   -  person Cris Luengo    schedule 03.09.2019


Ответы (1)


Попробуйте заменить строку conv на это:

N = length(vs);
M = length(h);   
lout=N+M-1;
vc=zeros(1,lout); 
for i = 1:N
    for k = 1:M
      vc(i+k-1) = vc(i+k-1) + h(k)*vs(i);
    end
end

Это базовая реализация Matlab формулы свертки

person Jeremy Dorner    schedule 04.09.2019