# How can I implement a simple difference equation and plot the resulting output, all using MATLAB

20 views (last 30 days)
upinderjeet on 4 Dec 2013
Answered: Mohazam Awan on 10 Oct 2017
I have a simple case of all initial conditions to be zero. We can consider a general form as:
a0y(n) = b0x(n) + b1x(n-1) + b2x(n-2) + ...+ bM x(n-M)
-a1y(n-1) - a2y(n-2) - ...- aN y(n-N)
I have to plot the output y(n) with n varying from 0 to 500.
Both y(n) and x(n) are zero for n<0.
Ahmed ElTahan on 25 Mar 2016
Here is a function I have built to calculate it with added example. https://www.mathworks.com/matlabcentral/fileexchange/56142-output-estimation-difference-equation

Wayne King on 4 Dec 2013
You have not said what x(n) is, is it a white noise input. Is it the Kronecker delta sequence.
If we don't know that x(n) is we certainly can't tell you what y(n) is.
If you know x(n), you can implement using filter
B = [b0 b1 b2 b3 .... bM];
A = [1 a1/a0 a2/a0 ... ];
x(n) = zeros(100,1);
x(1) = 1; % Kronecker delta input
y = filter(B,A,x);
upinderjeet on 5 Dec 2013
Actually x(n) is uniformly distributed random signal between -1 and 1. Now please tell me how to modify the above code according to this input and also how to define this x(n) in matlab.

Wayne King on 5 Dec 2013
Edited: Wayne King on 5 Dec 2013
Please look at the help for rand
x = -1+ 2*rand(100,1);
B = [b0 b1 b2 b3 .... bM];
A = [1 a1/a0 a2/a0 ... ];
y = filter(B,A,x);
upinderjeet on 5 Dec 2013
dont you think it shud be -1+ 2*rand(1,500) since I want to plot for k=0 to k=500 and also it shud be a row vector of 500 elements instead of column vector.

sixwwwwww on 5 Dec 2013
may be you can try something like this:
N = 500;
for n = 1:N
xValues = sum(randi(10, 1, n) .* (rand(1, n) - 1));
yValues = sum(randi(10, 1, n - 1) .* (rand(1, n - 1) - 1));
y(n) = xValues - yValues;
end
plot(1:N, y)
upinderjeet on 5 Dec 2013
actually I think, x = -1+ 2*rand(1,500); should just work fine for my case as it gives me a array of 500 elements(all in one row), except the fact that when I plot this x, the points are connected in the plot. I want them to be discrete points so that I can simulate my discrete system. But the plot I am getting is have all these points connected by straight linesinstead of discrete representation where the previous value is held until the next random number. Please tell me if I can achieve that.
sixwwwwww on 5 Dec 2013
you can discrete the plot the following way:
plot(x, y, '*')

Mohazam Awan on 10 Oct 2017
y1=zeros(1,length(n)); % Pre-allocating
for i=1:length(n)
if(n(i)<0)
y1(i)=0; % \$ y[n]=0 for n<0
end
if (n(i)>=0)
y1(i)=y1(i-1)+x(i);
end
end