graph shifting and for loops problem
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Charles Moody
el 25 de Feb. de 2018
Editada: Walter Roberson
el 22 de Mzo. de 2018
I have 2 questions:
1) In this code I use a for loop to populate a linespace that U must graph. But because logicals must be non zero, non negative I always have to start at element 1. But I have to plot it when element 1 in the linespace has to be at the o position on the graph.
2) I have nested loops that indicate the phase angle of a function. This is based off of the sign of the real and imaginary parts of the function. For some reason the phase as shown on the graph is wrong.
%constants
A =1;
B = .5;
j = sqrt(-1);
f1 = 1000; %Hz
f2 = 3000; %Hz
fs = 8000; %Hz
phi = .75*pi;
N1 = 8;
%time linespace
t = 0:1/fs:((N1-1)/fs);
g1 = sin(2*f1*pi*t)+B*sin(2*f2*pi*t + phi);
%for an 8-point DFT we need 12 input samples
xn1 = zeros(1,8);
for i = 1:8
xn1(i) = g1(i);
end
MN1_Matrix = zeros(8,8);
for i = 1:8
for k = 1:8
MN1_Matrix(i,k) = xn1(k)*(cos((((k-1)*2*pi*(i-1))/N1))-(j*sin(((k-1)*2*pi*(i-1))/N1)));
end
end
disp(MN1_Matrix)
for i = 1:8
X1_0(i) = cumsum(MN1_Matrix(1,i));
X1_1(i) = cumsum(MN1_Matrix(2,i));
X1_2(i) = cumsum(MN1_Matrix(3,i));
X1_3(i) = cumsum(MN1_Matrix(4,i));
X1_4(i) = cumsum(MN1_Matrix(5,i));
X1_5(i) = cumsum(MN1_Matrix(6,i));
X1_6(i) = cumsum(MN1_Matrix(7,i));
X1_7(i) = cumsum(MN1_Matrix(8,i));
end
X1_R = [sum(real(X1_0)) sum(real(X1_1)) sum(real(X1_2)) sum(real(X1_3)) sum(real(X1_4)) sum(real(X1_5)) sum(real(X1_6)) sum(real(X1_7))];
X1_I = [sum(imag(X1_0)) sum(imag(X1_1)) sum(imag(X1_2)) sum(imag(X1_3)) sum(imag(X1_4)) sum(imag(X1_5)) sum(imag(X1_6)) sum(imag(X1_7))];
for i = 1:8
X1_MAG(i) = sqrt((X1_R(i)^2) + (X1_I(i)^2));
end
for i = 1:8
if X1_I(i) == 0
X1_ANGLE = 0;
elseif X1_R(i) == 0 && X1_I(i) > 0
X1_ANGLE = -90;
elseif X1_R(i) == 0 && X1_I(i) < 0
X1_ANGLE = 90;
else
X1_ANGLE(i) = atand(X1_I(i)/X1_R(i));
end
end
subplot(2,2,1)
stem(X1_MAG)
xlabel('bin (m*1 kHz)')
ylabel('magnitude')
title('Magnitude of X(m)')
axis([0 9 0 4])
subplot(2,2,2)
stem(X1_ANGLE)
xlabel('bin (m*1 kHz)')
ylabel('phase')
title('Degree Phase of X(m)')
axis([0 9 -100 100])
subplot(2,2,3)
stem(X1_R)
xlabel('bin (m*1 kHz)')
ylabel('magnitude')
title('Real Part of X(m)')
axis([0 9 -.5 1.5])
subplot(2,2,4)
stem(X1_I)
xlabel('bin (m*1 kHz)')
ylabel('magnitude')
title('Imag Part of X(m)')
axis([0 9 -4 4])
0 comentarios
Respuesta aceptada
Walter Roberson
el 25 de Feb. de 2018
https://www.mathworks.com/help/matlab/ref/stem.html
You can pass x values to stem() to get it to plot with the coordinates you want.
If you use atan2d then you do not need all those if statements to get the proper angle.
0 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Graph and Network Algorithms en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!