Serie de Fourier de onda de diente de sierra - Derivación general y emisión de Matlab

0

Estoy trabajando en uno de mis primeros proyectos de Matlab. Estoy tratando de graficar una onda de diente de sierra con 10-V Pk-Pk, valor promedio de 0-V. Ciclo de trabajo del 50%, 2,5 khz.

Primero intenté encontrar una ecuación general para semejante onda de diente de sierra.

$$ \ frac {-V_ {pp}} {2} + \ frac {jV_ {pp}} {2 \ pi} \ sum_ {n = - \ infty} ^ {\ infty} \ frac {1} {n} e ^ {jnw_0t} $$

A partir de esto, para la función particular que estoy tratando de trazar tengo la ecuación

-5 + j * 5 / pi Suma (de n = -inf a inf) (1 / n) e (j * 5000 * pi n t) $$ \ -5 + \ frac {j5} {\ pi} \ sum_ {n = - \ infty} ^ {\ infty} \ frac {1} {n} e ^ {j5000 \ pi nt} $$

Y mi código:

%% SAWTOOTH WAVE

t = linspace(-2,10,1e4); % time vector [s]

%% constructing approximation x_N(t), N = 100

n = -100:100;                            % indices included in the summation, n is a 101 element vector
X = (5*1i)./(pi*n);                          % this constructs the coefficients of e^(*) terms
X(n==0) = 5;                             % C_0

% X is a horizontal vector with the coefficients of the exponential term
% corresponding each n-value from -100 to 100.

XM = repmat(X.',[1, length(t)]);         % This is a matrix that replicates the transpose of the
                                         % vector X as many times as t is long
                                         % now, XM is a matrix with identical values in each row. 
% Each column has a coefficient of an exponential term corresponding to an
% n-value, repeated throughout
basis = exp(1i*pi*5000*n.'*t);              % basis is a matrix containing the exponential part,
                                         % each column corresponding with each n-value
                                         % and each row corresponding time

x100 = -5 + sum(XM.*basis);                   % x100 is matrix resulting from summing down the rows of element-wise
                                         % multiplacation of XM and basis

if max(imag(x100))<1e-15  % this checks to see if the imaginary part of x
x100 = real(x100);      % is below Matlab's noise floor (approx 10^-15).
end                     % If so, we get rid of the imaginary part.


%% plots

% we will use these variables to keep the limits on our plots uniform
tmin = min(t); tmax = max(t); xmin = -6; xmax = 6;

figure(1);
%subplot(3,1,1);     % this command allows you to plot several graphs
%                    % on one page
plot(t,x100);
axis([tmin tmax xmin xmax]);    % sets the plot's axis limits
title('N=100 approximation of Triangle Wave');
xlabel('time [s]'); ylabel('amplitude [a.u.]');

Sin embargo, el período aquí es de 2 segundos, lo que me parece totalmente incorrecto. Estoy teniendo problemas para averiguar dónde me equivoqué.

También, me disculpo, también tengo problemas para que MathJax obtenga una vista previa de mis matemáticas en mi navegador, no sé qué está mal ahí. Lo siento por la representación de mis matemáticas con aspecto desordenado.

    
pregunta wsamples

1 respuesta

1

El linspace probablemente no es lo que quieres que sea. Una señal de 2.5kHz tiene un período de 0.4ms

tmin = 1/2500; t = linspace (0, tmin * 5,2000); % tiempo vector [s]

o

tmin = 1/2500; t = linspace (-tmin, tmin * 4,2000); % tiempo vector [s]

No sé por qué la amplitud está desactivada, pero al menos el período es correcto.

    
respondido por el laptop2d

Lea otras preguntas en las etiquetas