Пытаюсь дискретизировать непрерывный сигнал, но я пытаюсь построить правильный сигнал с заданными корнями - PullRequest
0 голосов
/ 20 января 2019

Мне нужно построить функцию, основанную на корнях, для которой я могу использовать poly (), чтобы получить многочлен. Однако всякий раз, когда я запускаю функцию, она выдает ошибку. Я хочу быть в состоянии исправить ошибку, чтобы я мог продолжить свои дальнейшие цели.

Мне нужно построить график функции относительно области времени, которую я предоставляю, построить график функции относительно индекса дискретизации nVec, умноженного на deltaT частоты дискретизации, а затем построить дискретный сигнал. Я сейчас нахожусь на остановке, потому что я не могу построить непрерывный сигнал (первый график). Это постоянно дает мне ошибку. Я попытался изменить корни (rootsVec) с отрицательного включения на чисто положительное, чтобы я мог получить уравнение из poly (), а также поставить частоту дискретизации для приращения во времени, но безрезультатно.

    function [tVec,nVec,xVec] = 
    fxNthOrderPolyDTSignal(domainVec,noOfSamples,rootsVec)
    DSIntervals = noOfSamples - 1;
    deltaT = (max(domainVec) - min(domainVec))/DSIntervals;
    %time = input("Please input a specific time within the domain: ");
    nVec = min(domainVec)/deltaT;
    tVec = min(domainVec) + (nVec * deltaT);
    Eqtn = poly(rootsVec);
    x = linspace(domainVec(1),0.5,max(domainVec));
    figure(1)
    plot(Eqtn(x),x)
    figure(2)
    plot(Eqtn,(nVec*deltaT))
    end

Ожидаемый результат - это просто график сигнала со следующими входными аргументами: domainVec = [-10, 10] (это время, когда существует сигнал);

noOfSamples = 30;

rootsVec = [-3, 8] (он же многочлен второго порядка);

Фактическим результатом является следующая ошибка: индексы массива должны быть положительными целыми числами или логическими значениями.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Я понял это. Это был правильный ответ на мою проблему. Спасибо за вашу помощь!

function [tVec,nVec,xVec] = 
fxNthOrderPolyDTSignal(domainVec,noOfSamples,rootsVec)
deltaT = (max(domainVec) - domainVec(1))/noOfSamples;
nVec = [0 : noOfSamples];
tVec = [];
for i = nVec
    tVec(end + 1) = min(domainVec) + (i*deltaT);
end
nomial = poly(rootsVec);
xVec = polyval(nomial,tVec);
subplot(3,1,1)
plot(tVec,xVec)
title('x(t)')
subplot(3,1,2)
stem(tVec,xVec)
title('x[n]')
subplot(3,1,3)
stem(tVec,tVec*0)
title('x(nDeltaT)')
end
0 голосов
/ 21 января 2019

Проверьте этот код, с правильным именованием переменных, более стиль обработки сигналов ...

При n = 10 вы начнете видеть дискретизацию.

function [t,x,dt] = f(tlim,n,p)
%% Function (Press 'Run Section' from here)

% Parameters (Delete these for function to work)
tlim=[-10 10];
n=30;
p=[-3 8];

% Polinomial Coefficients from Roots
a=poly(p);

% Sampling Time
dt=(tlim(2)-tlim(1))/n;

% Evaluate
t=linspace(tlim(1),tlim(2),n)';
x=a(1)*t.^0+a(2)*t.^1+a(3)*t.^2;

% Plot
plot(t,x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...