Transformada gráfica de Fourier de MATLAB (los principiantes también pueden entenderla)

1. Información general

Creo que muchas personas pueden encontrar la transformada de Fourier compleja y un poco difícil de entender, de hecho, no es difícil, es simplemente una transformación integral .
La transformada de Fourier significa que una función que satisface ciertas condiciones se puede expresar como una combinación lineal de funciones trigonométricas (funciones seno y/o coseno) o sus integrales. Es decir, "cualquier" función puede expresarse como una combinación lineal de funciones sinusoidales mediante cierta descomposición. La función seno es una clase de función relativamente simple y bien estudiada en física. Debido a que es tan fácil de usar, la transformada de Fourier se usa ampliamente en física, teoría de números, matemáticas combinatorias, procesamiento de señales, probabilidad, estadística, criptografía, acústica, óptica y otros campos.
¿Por qué utilizar una curva sinusoidal para descomponer la función original?
Por la fidelidad de la sinusoide. Después de que se introduce una señal sinusoidal, la salida sigue siendo una señal sinusoidal. Sólo la amplitud y la fase pueden cambiar, pero la frecuencia y la forma de onda siguen siendo las mismas. Y solo las curvas sinusoidales tienen tales propiedades, por lo que descompondremos la función original en una función sinusoidal para su procesamiento.

2. Transformada Continua de Fourier, CFT

Si la transformada de Fourier que vemos habitualmente no tiene prefijo, suele referirse a la transformada de Fourier continua. Veamos primero una imagen:

De la imagen podemos entender que la transformada de Fourier es la conversión mutua del dominio del tiempo y el dominio de la frecuencia y, como es continua, utiliza una integral.
La música que escuchamos habitualmente es una mezcla de diferentes sonidos, instrumentos musicales y voces humanas que cambian con el tiempo. Si quiero extraer solo la voz humana, podemos usar Fourier en este momento. La transformación se usa para descomponer estos diferentes sonidos en formas representadas. por sus respectivas frecuencias. De esta manera, convertimos la señal en el dominio del tiempo originalmente difícil de procesar en una señal en el dominio de la frecuencia fácil de procesar (espectro de la señal), y luego usamos algunas herramientas para procesar y procesar estas señales en el dominio de la frecuencia. Finalmente, se puede utilizar la transformada inversa de Fourier para convertir estas señales en el dominio de la frecuencia en señales en el dominio del tiempo.

3. Transformada discreta de Fourier, DFT

De hecho, nuestra computadora solo puede procesar señales numéricas discretas, lo cual es diferente de los cálculos matemáticos. Estos sonidos continuos deben procesarse discretamente, porque las computadoras esencialmente solo pueden procesar 0 y 1, por lo que aquí no se puede usar Integral. Sabemos que la integral es En realidad, la suma continua del límite, ¿verdad? Entonces aquí sólo podemos usar la suma discreta y no puede manejar el infinito. La computadora solo puede manejar la finitud. Este es un requisito previo. Veamos una imagen:


Puede ver que nuestro Fourier discreto usa el símbolo de suma en lugar del símbolo integral de arriba. En la computadora, usamos este DFT para procesar señales.
La complejidad computacional de usar directamente la definición de DFT es O (N²), mientras que la Transformada Rápida de Fourier (FFT) puede mejorar la complejidad a O (nlogn). La reducción de la complejidad computacional y el desarrollo de capacidades informáticas de circuitos digitales han hecho de la DFT un método muy práctico e importante en el campo del procesamiento de señales.

Del análisis anterior, sabemos que el análisis en el dominio del tiempo y el análisis en el dominio de la frecuencia son dos superficies de observación de señales. El análisis en el dominio del tiempo utiliza el eje del tiempo como coordenada para expresar la relación de señales dinámicas; el análisis en el dominio de la frecuencia cambia la señal al eje de frecuencia como coordenada para expresarla.
En términos generales, la representación en el dominio del tiempo es más vívida e intuitiva, mientras que el análisis en el dominio de la frecuencia es más conciso, lo que hace que el análisis del problema sea más profundo y conveniente. La tendencia del análisis de señales se está desarrollando desde el dominio del tiempo al dominio de la frecuencia. Sin embargo, están interconectadas, son indispensables y complementarias entre sí y su conversión es lo que llamamos transformada de Fourier.

4. Aplicación MATLAB

Echemos un vistazo a la aplicación específica: cómo se verá usando Fast Fourier Transform FFT en MATLAB.

Primero veamos la definición de la función fft:

Y = fft(X) calcula la transformada discreta de Fourier (DFT) de X utilizando el algoritmo de transformada rápida de Fourier (fft). 
Si X es un vector, fft(X) devuelve la transformada de Fourier de ese vector.
Si X es una matriz, fft(X) trata las columnas de X como vectores y devuelve la transformada de Fourier de cada columna. 
Si X es una matriz multidimensional, fft(X) trata los valores a lo largo de la primera dimensión de la matriz cuyo tamaño no es igual a 1 como vectores y devuelve la transformada de Fourier de cada vector.

Y = fft(X,n) devuelve una DFT de n puntos. Si no se especifica ningún valor, Y tiene el mismo tamaño que X.
Si X es un vector y la longitud de X es menor que n, entonces X se rellena con ceros finales para alcanzar la longitud n.
Si X es un vector y la longitud de X es mayor que n, entonces X se trunca a una longitud n.
Si X es una matriz, cada columna se trata igual que en el caso del vector.
Si X es una matriz multidimensional, la primera dimensión de la matriz cuyo tamaño no es igual a 1 se trata de la misma manera que en el caso del vector.

Y = fft(X,n,dim) devuelve la transformada de Fourier a lo largo de la dimensión tenue. X es una matriz, por ejemplo:
fft(X,n,1) opera a lo largo de cada columna de X y devuelve la transformada de Fourier de cada columna;
fft(X,n,2) opera a lo largo de cada fila de X y devuelve la transformada de Fourier de cada fila transformada de Fourier.

4.1 Señal de ruido

Veamos un ejemplo concreto del uso de la transformada de Fourier para encontrar los componentes de frecuencia de una señal oculta en el ruido (análisis espectral).

Fs = 1000; %采样频率
T = 1/Fs; %采样周期
L = 1500; %信号长度(1.5秒)
t = (0:L-1)*T; %时间

%创建一个信号,其中包含幅值为0.7,频率为50Hz和幅值为1,频率为120Hz的正弦波
S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
%添加一个标准差为2的噪声
X = S + 2*randn(size(t));
%绘制噪声时域信号。
plot(1000*t(1:50),X(1:50))
title('加了噪声的信号')
xlabel('t (毫秒)')
ylabel('X(t)')

Al  observar esta señal en el dominio del tiempo

%计算双侧频谱P2,然后基于P2和偶数信号长度L计算单侧频谱P1,单侧频谱表示信号频率的幅度分布只从0到正频率一侧,正负频率是对称的
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);

Los abs aquí devuelven valores absolutos, pero aquí están en forma de números complejos , por lo que lo que se devuelve es su longitud de módulo (amplitud) , que representa el tamaño de los números complejos. Hay otro atributo importante para los números complejos, que es la fase, que representa direcciones plurales.
Hagamos un dibujo para ver la amplitud correspondiente del espectro:

f = Fs*(0:(L/2))/L;
plot(f,P1) 
title('单侧幅值频谱')
xlabel('f (Hz)')
ylabel('|P1(f)|')

Puedes ver que a 50 Hz y 120 Hz , las amplitudes son básicamente cercanas a 0,7 y 1. Debido a la adición de ruido , si no hay ruido, debe corresponder a 0,7 y 1. Puedes probar esto. Aquí podemos ver que en las coordenadas del dominio del tiempo, es difícil ver el componente de frecuencia de la señal. Cuando usamos la transformada de Fourier, resulta sencillo ver la señal en el dominio de la frecuencia.

4.2 Pulsos gaussianos

El llamado pulso consiste en enviar una señal, encenderla y apagarla, esto es un pulso. Los motores paso a paso y los servomotores actuales funcionan mediante pulsos.
Un pulso gaussiano es un pulso con una curva tiempo-intensidad de forma gaussiana, donde la función gaussiana es la siguiente:

f(x) = a*e^{\frac{-(x - b)^2}{2c^2}}

Entre ellos, a, b y c son constantes: a determina la altura de la curva (valor máximo), b determina la posición central de la curva (abscisa) y c determina el ancho de la curva (desviación estándar).
Debido a que la curva de intensidad temporal del pulso gaussiano exhibe las características de la distribución gaussiana, puede lograr un mejor rendimiento tanto en tiempo como en frecuencia, y ha sido ampliamente utilizada en muchos campos.
Echemos un vistazo a cómo los pulsos gaussianos se transfieren del dominio del tiempo al dominio de la frecuencia: 

Fs = 100; %采样频率
t = -0.5:1/Fs:0.5; %时间
L = length(t); %信号长度
%高斯脉冲对应上面公式中的a、b、c了解
X = 1/(4*sqrt(2*pi*0.01))*(exp(-t.^2/(2*0.01)));

%画图
plot(t,X)
title('时域中的高斯脉冲')
xlabel('Time (t)')
ylabel('X(t)')

En el gráfico podemos ver que es una distribución gaussiana con un punto central de 0 y un valor máximo de aproximadamente 0,9974. Además, la fórmula muestra que el ancho es 0,1. Esta función es una función característica típica de la transformada de Fourier.
Antes de convertir al dominio de la frecuencia, primero se determina la nueva longitud de entrada, que es la siguiente potencia de 2, a partir de la longitud de la señal original. Cuando la longitud de la señal no es igual a una potencia de 2, el uso de la función nextpow2 puede mejorar el rendimiento de fft, utilizando ceros finales para completar la señal. 

n = 2^nextpow2(L);
%将高斯脉冲转换为频域。
Y = fft(X,n);%length(X):101,n:128,所以length(Y)是128
%画图
f = Fs*(0:(n/2))/n;
P = abs(Y/n);

plot(f,P(1:n/2+1)) 
title('频域中的高斯脉冲')
xlabel('Frequency (f)')
ylabel('|P(f)|')

La función nextpow2 en el código devuelve el exponente de la siguiente potencia de 2 mayor o igual a estos valores (valor absoluto), por ejemplo:

a = [1 -2 3 -4 5 9 519];
p = nextpow2(a)
p =
     0     1     2     2     3     4    10

2.^p 或者 pow2(p)
ans =
     1      2      4      4      8     16    1024


4.3, onda coseno

Echemos un vistazo a una de las formas de onda más comunes y comparemos sus diferentes frecuencias:

Fs = 1000; %采样频率
T = 1/Fs; %采样周期
L = 1000; % 信号长度
t = (0:L-1)*T; % 时间

%三个余弦波,区别就是频率不一样
x1 = cos(2*pi*50*t); %50Hz
x2 = cos(2*pi*150*t); %150Hz
x3 = cos(2*pi*300*t); %300Hz
% 组合成一个矩阵
X = [x1; x2; x3];

%画出每个余弦波前100个条目
for i = 1:3
    subplot(3,1,i)
    plot(t(1:100),X(i,1:100))
    title(['余弦波 ',num2str(i),' 的时域图形'])
end

Aquí encontramos tres ondas coseno. Solo podemos decir que la frecuencia de la onda coseno descendente es mayor que la de la superior, pero aún no puede mostrar claramente su esencia. Convirtámosla al espacio en el dominio de la frecuencia para ver cuál es el efecto. es:

%同样的性能考虑,使用nextpow2函数定义新长度
n = 2^nextpow2(L);
%接下来就计算傅里叶变换
dim = 2;
Y = fft(X,n,dim);

%计算每个信号的双侧频谱和单侧频谱
P2 = abs(Y/L);
P1 = P2(:,1:n/2+1);
P1(:,2:end-1) = 2*P1(:,2:end-1);

%在频域图形里面,画出每一个余弦波的单侧幅值频谱
for i=1:3
    subplot(3,1,i)
    plot(0:(Fs/n):(Fs/2-Fs/n),P1(i,1:n/2))
    title(['余弦波 ',num2str(i),'在频域中的图形'])
end

Podemos ver que después de convertir el dominio del tiempo al dominio de la frecuencia, el problema se vuelve simple y claro. Por supuesto, podemos usar el primer método de ruido para las últimas tres ondas coseno, sumar las tres y luego convertir el dominio del tiempo al dominio de la frecuencia. En comparación, se ha descubierto que las señales en el dominio del tiempo son más difíciles de procesar, pero la transformación al dominio de la frecuencia se vuelve más sencilla. 

Transformada de Fourier de una onda coseno

Supongo que te gusta

Origin blog.csdn.net/weixin_41896770/article/details/135012922
Recomendado
Clasificación