Signals Question difference equation: Write a function y=diffeqn(a,x,yn1) which computes the output y[n] determined by the first-order system y[n]=ay[n-1]+x[n]

I need to Write a function y=diffeqn(a,x,yn1) which computes the output y[n] of the causal system determined by the first-order autoregression system y[n]=ay[n-1]+x[n] The input vector x, contains x[n] for 0 ≤ n ≤ N − 1 and yn1 supplies the value of y[-1]. The output vector y contains y[n] for 0 ≤ n ≤ N − 1.
Note that y[−1] is necessary for computing y[0], which is the first step of autoregression. Use a for loop in your M-file to compute

5 commentaires

Note that MATLAB uses parentheses, not square brackets, to denote subscripts.
Have not been able to come up with anything. I need to make a function inside a function and I dont know the syntax of that in matlab
I don't think you need a function within a function. Instead, you need a function that computes y as required and then a script that calls your function once or perhaps several times to test out your function.

Connectez-vous pour commenter.

 Réponse acceptée

Hint, in test.m have both of these functions.
function test()
a = 10; % For example.
x = randi(9, 1, 7); % 1 by 7 array of integers
yn1 = 5; % For example.
yOut = diffeqn(a, x, yn1);
function [y, yn] =diffeqn(a,x,yn1)
for k = 1 : length(x)
y(k) = .....
end
% Not sure exactly what is meant by y[n], so return the full the y and y(n), i.e. the last element by itself.
yn = y(end);
Good luck.

3 commentaires

The second function should pre-allocate the output variable y before the for loop:
y = zeros(size(x));
This step is important for several reasons, not least of which is that it is faster than allowing an array to grow inside a loop, and it is considered a good programming practice in MATLAB.
Since y(k) depends on y(k-1), the lower limit on the for loop should be 2 instead of 1. Otherwise, the code will trigger an error or you will need an if...else... block inside the loop (to handle the first element as a special case), which is not ideal.

Connectez-vous pour commenter.

Plus de réponses (1)

Here's a start. Create a file called diffeqn.m and insert the following code:
function y = diffeqn(a,x,yn1)
% Number of rows:
N = size(x,1);
% Pre-allocate:
y = zeros(N,1);
y(1) = ...
for k = 2:N
...
...
...
end
end

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by