/ / Matlab no grafica la señal de fourier exacta - matlab, plot, fft, fourier continuo

Matlab no traza la señal de Fourier exacta: matlab, plot, fft, continuous-fourier

Estoy tratando de trazar una señal simple en el dominio de Fourier utilizando Matlab. No está trazando la señal correcta. Aquí está mi código:

clc;
clear all;
close all;
x=1:0.001:10;
f1=sin(2*pi*10*x);
f2=sin(2*pi*15*x);
f3=sin(2*pi*30*x);
f=f1+f2+f3;
plot(2*pi*x,fft(f1));
figure
plot(x,fft(f1));

He esperado un pico en 10 ya que la frecuencia es 10. Pero está dando un pico en algún otro punto

Aquí están las dos imágenes de la trama:

Esta es la imagen para plot(x,fft(f1))

Esta es la imagen para la trama (x, fft (f1))

Esta es la imagen para plot(2*pi*x,fft(f1))

Esta es la imagen para el gráfico (2 * pi * x, fft (f1))

No está mostrando el pico en 10. Incluso intenté usar abs (fft (f1)). Sin suerte :/

¿No es la forma correcta de trazar la señal en el dominio de Fourier?

Respuestas

4 para la respuesta № 1

los fft La función asume la unidad de tiempo paso Para corregir el paso de tiempo no unitario, debe definir el componente de frecuencia en función de la tasa de nyquist. El siguiente código traza la magnitud de la fft Con el eje de frecuencia correcto.

clc;
clear all;
close all;
x=1:0.001:10;
%     ^ this is your sampling time step
f1=sin(2*pi*10*x);
f2=sin(2*pi*15*x);
f3=sin(2*pi*30*x);

% bounds of fourier transform based on sampling rate
Fs = 1/0.001;
ff = linspace(-Fs/2,Fs/2,numel(x));

F1 = fftshift(fft(f1)/numel(x));
F2 = fftshift(fft(f2)/numel(x));
F3 = fftshift(fft(f3)/numel(x));

figure();
plot(ff,abs(F1),"-r"); hold on;
plot(ff,abs(F2),"-b");
plot(ff,abs(F3),"-k");

enter image description here

Editar: Para responder a la pregunta OPs en el comentario.

Hablando en unidades de frecuencia normalizadas (asumiendo una tasa de muestreo de 1). los fft función devuelve la respuesta de frecuencia de 0 a 2*pi radianes, pero debido a algunas propiedades de procesamiento de la señal y la forma en que las señales discretas se interpretan cuando se realiza una FFT, la señal es realmente periódica, por lo que pi a 2*pi sección es idéntica a la -pi a 0 sección. Para mostrar el gráfico con el componente DC (0 frecuencia) en el centro usamos fftshift que hace un desplazamiento circular igual a 1/2 de la longitud de la señal en los datos devueltos por fft. Antes de tomar el ifft asegúrate de usar ifftshift para ponerlo de nuevo en el lugar correcto.

Edit2: El término de normalización (/numel(x)) es necesario para estimar la transformada de Fourier de tiempo continuo utilizando la transformada de Fourier discreta. No recuerdo la razón matemática precisa de la parte superior de mi cabeza, pero los ejemplos en el Documentación de MATLAB También implica la necesidad de esta normalización.

Edit 3: El enlace original que tenía está abajo. Puedo volver para agregar una respuesta más detallada, pero mientras tanto, definitivamente recomiendo que cualquier persona interesada en entender la relación entre los fundamentos de FS, FT, DTFT y DFT vea al profesor Oppenheim "hilarantemente viejo, pero sorprendentemente informativo y sencillo conferencias sobre MIT OpenCourseWare.