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

55 visualizzazioni (ultimi 30 giorni)
upinderjeet il 4 Dic 2013
Risposto: Mohazam Awan il 10 Ott 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.
##### 1 CommentoMostra NessunoNascondi Nessuno
Ahmed ElTahan il 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

Accedi per commentare.

### Risposte (4)

Wayne King il 4 Dic 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);
##### 1 CommentoMostra NessunoNascondi Nessuno
upinderjeet il 5 Dic 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.

Accedi per commentare.

Wayne King il 5 Dic 2013
Modificato: Wayne King il 5 Dic 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);
##### 1 CommentoMostra NessunoNascondi Nessuno
upinderjeet il 5 Dic 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.

Accedi per commentare.

sixwwwwww il 5 Dic 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)
##### 2 CommentiMostra 1 commento meno recenteNascondi 1 commento meno recente
sixwwwwww il 5 Dic 2013
you can discrete the plot the following way:
plot(x, y, '*')

Accedi per commentare.

Mohazam Awan il 10 Ott 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
##### 0 CommentiMostra -1 commenti meno recentiNascondi -1 commenti meno recenti

Accedi per commentare.

### Categorie

Scopri di più su Formatting and Annotation in Help Center e File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by