Matlab - Problema calculando DFT

 
Vista:

Problema calculando DFT

Publicado por Adrián (1 intervención) el 29/04/2015 12:00:16
Hola,
tengo un problema al calcular la transformada discreta de Fourier para una señal cuadrada, al ver la magnitud de las frecuencias obtenidas obtengo un pequeño ruido para frecuencias en las que la amplitud debería de ser 0, para calcular la DFT utilizo una función propia, aquí está el código:

1
2
3
4
5
6
7
8
9
function [y] = Discrete_Fourier_Transform(x)
    N=length(x);
    y=zeros(1,N);
    for k = 1:N
        for n = 1:N
            y(k) = y(k) + x(n)*exp( -1j*2*pi*(n-1)*(k-1)/N );
        end;
    end;
end

Sé que seguramente la implementación no será la más eficiente sin duda y sería mejor utilizar las funciones proporcionadas por matlab, pero es para una práctica de una asignatura y nos piden implementarla.

El código que utilizo para generar la señal cuadrada es:
1
2
3
4
x = [ones(1,8), -ones(1,8)];
for i=1:63
    x = [x, ones(1,8), -ones(1,8)];
end

La versión de matlab que uso es la R2013a(8.1.0.604) 64 bits

Llevo una semana usando matlab así que todavía estoy bastante verde siento si la pregunta es estúpida pero he estado buscando y no he encontrado nada que lo resuelva espero que alguien por aquí me pueda ayudar.

Un saludo y gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jesús David Royeth
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Problema calculando DFT

Publicado por Jesús David Royeth (1818 intervenciones) el 30/04/2015 00:47:25
Hola no sé si esto te sea de ayuda :
1
2
3
4
5
6
7
8
9
function y = Discrete_Fourier_Transform(x)
N=length(x);
y=zeros(1,N);
for p=0:N-1
        for j=0:N-1
            w=exp(-2*pi*1i/N);
 y(p+1) = y(p+1)+w^(j*p)*(j+1);
        end
end


para la señal discreta cuadrada puedes hacer :

1
2
3
4
5
A = 1; %Amplitud
w = 2* pi; % frecuencia
fm = 1000;   frecuencia de muestreo
t    =  0:1/fm:1;
x= A*square(w*t)

también le puedes agregar un ciclo útil :
x= A*square(w*t,70) %ciclo útil de 70%

saludos https://www.facebook.com/royethmatlab
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar