2017-02-08 5 views
0

Я реализую Z-Domain TF на MATLAB. При построении графика полюса-нуля, я считаю, что это правильно, и у меня нет проблем в этом. Проблема заключается в том, когда я строю импульсный отклик; i 0e h(n); Я считаю, что первая дельта всегда сдвигается на единицу, поэтому все остальные дельта также смещаются. Почему происходит смена? Кто-нибудь знает об этой проблеме?Импульсный отклик в Z - домен передаточной функции в MATLAB

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

close all;clear;clc; 

Ts = 0.1; 

num = 1; % b 
den = 1; % a 

hz = tf(num, den, Ts, 'variable', 'z^-1') 

%% Plotting 
figure(1) 
subplot(2,1,1) 
pzplot(hz) 
axis equal 

subplot(2,1,2) 
stem(impulse(hz*Ts)) 
axis([0 10 0 1.1]) 
grid minor 

impulse response

+0

Возможно, это может быть проблема с 'stem'. Если вы просто выполняете 'stem (1:10),« ось x »будет начинаться с« 1 », а не« 0 ». У меня нет некоторых наборов инструментов, поэтому я не могу проверить и проверить. – mpaskov

+0

@mpaskov На самом деле я разрешаю MATLAB строить свою фиктивную ось. Я сделал это во многих других реализациях, но когда я попробую это в этом примере, дельта сдвигается вправо на один. !!! – Tes3awy

+0

Точно, макетная ось матлаба начинается с '1', что является первым значением импульса, разве это не то, что вы ожидаете? – mpaskov

ответ

1

Проблема заключается с черчения, а не результатов. Если вы не укажете значение для «оси x», matlab создаст фиктивную переменную, начинающуюся с 1 и заканчивающуюся длиной вектора, по существу 1:length(y). Вы должны создать свой собственный x-вектор (и масштабировать его, как это было предложено @Florian):

response = impulse(hz*Ts); 
timevector = (0:length(response)-1)*Ts; 
stem(timevector,reponse); 
grid minor;