1. Procesamiento de señales - 3. Filtrado Wiener (incluido el código Matlab)

Este artículo es adecuado para comprender rápidamente el filtrado de Wiener y poder procesar datos reales.


1. Principio del filtrado Wiener

*Hay muchos vídeos que lo explican detalladamente, así que no entraré en detalles aquí. La referencia es la siguiente:

Mejora del habla-filtro Wiener 1_bilibili_bilibili

Mejora del habla-filtro Wiener 2_bilibili_bilibili

2. Cosas a tener en cuenta al aplicar el filtrado de Wiener

1. El filtrado de Wiener estima el valor actual de la señal en función de todas las observaciones pasadas y actuales ;                                         

2. El filtro Wiener sólo es adecuado para procesos aleatorios estacionarios ;

3. Diseñar un filtro Wiener requiere conocer la función de correlación entre señal y ruido.

                                      

3. Implementación del filtro Wiener

1. Construya una señal unidimensional y mezcle la señal de ruido:

(1) Señal unidimensional original: Signal_Original = sin(2 * pi * 10 * t) + sin(2 * pi * 20 * t) + sin(2 * pi * 30 * t)

Fs = 1000; # 采样率
N = 1000; # 采样点数
n = 0:N - 1;
t = 0:1 / Fs:1 - 1 / Fs; # 时间序列
##期望信号
Signal_Original = sin(2 * pi * 10 * t) + sin(2 * pi * 20 * t) + sin(2 * pi * 30 * t);
plot(Signal_Original)
title('期望信号');
axis([0 1000 -4 4]); # 设置坐标轴在指定的区间
xlabel('Time(n)');
ylabel('Amplitude');

(2) Señal de ruido: Ruido_Blanco

##噪声信号
##前500点高斯分布白噪声,后500点均匀分布白噪声
Noise_White = [0.3 * randn(1, 500), rand(1, 500)];
plot(Noise_White)
title('噪声信号');
xlabel('Time(n)');
ylabel('Amplitude');

(3) Señal mixta: Señal_Original + Ruido_Blanco

##噪声干扰后信号
Mix_Signal = Signal_Original + Noise_White; # 构造的混合信号
subplot(2,2,3)
plot(Mix_Signal)
title('噪声干扰后混合信号');
axis([0 1000 -4 4]); # 设置坐标轴在指定的区间
xlabel('Time(n)');
ylabel('Amplitude');

2. Diseño del filtro Wiener:

* Combinado con los puntos clave del marco estructural general a continuación , será más útil aprender el principio del filtrado de Wiener ~

*Los pasos principales son los siguientes:

(1) El coeficiente de autocorrelación Rxx  de la señal mixta ( mencionado en el principio de filtrado de Wiener ) ;

(2) El coeficiente de correlación Rxy  entre la señal mezclada y la señal original ( mencionado en el principio de filtrado de Wiener )

Función xcorr: se utiliza para calcular el coeficiente de correlación de dos datos.

(3) Establezca el orden M = 100 ( parámetros ajustables que afectan el efecto de filtrado );

(4) Construir la matriz de autocorrelación de señales mixtas rxx (i, j) a través de bucles ( mencionado en el principio de filtrado de Wiener );

(5) Obtenga el vector de correlación cruzada rxy (i) entre la señal mezclada y la señal original ( mencionado en el principio de filtrado de Wiener );

(6) Obtenga los coeficientes del filtro Wiener diseñados ( datos clave, utilizados para operaciones posteriores de filtrado Wiener en la señal ):

h = inv(rxx)*rxy'

Función inv: se usa para encontrar la matriz inversa; si ocurre un error, la función pinv se puede usar para encontrar la matriz pseudoinversa.

##维纳滤波
Rxx = xcorr(Mix_Signal,Mix_Signal);# 得到混合信号的自相关函数
Rxy = xcorr(Mix_Signal,Signal_Original);# 得到混合信号和原始信号的互相关函数
M = 100;# 维纳滤波阶数
for i = 1:M # 得到混合信号的自相关矩阵
    for j = 1:M
        rxx(i,j) = Rxx(N-i+j);
    end
end
for i = 1:M # 得到混合信号和原信号的互相关向量
    rxy(i) = Rxy(i+N-1);
end
# 得到所要设计的Wiener滤波器系数
h = pinv(rxx)*rxy';

3. Filtrado Wiener de señales ruidosas.

Función de filtro: se utiliza para filtrar la señal de acuerdo con el filtro diseñado.

##维纳滤波后的信号
Signal_Filter = filter(h,1,Mix_Signal);# 将输入信号通过维纳滤波器
plot(Signal_Filter);
title('维纳滤波后的信号');
axis([0 1000 -4 4]); # 设置坐标轴在指定的区间
xlabel('Time(n)');
ylabel('Amplitude');

Aplique la función de subtrama para mostrar cuatro imágenes al mismo tiempo, el efecto final es el siguiente:

4. Error cuadrático medio

* El error cuadrático medio se utiliza a menudo para evaluar la diferencia entre señales antes y después del filtrado.

(Es más convincente evaluar el efecto de filtrado numéricamente que observarlo directamente a través de la visualización de imágenes)

*Por lo general, se pueden utilizar diferentes indicadores de evaluación según las diferentes situaciones reales.

fprintf('引入噪声后信号相对原信号的统计均方误差:\n');
mse1 = mean((Mix_Signal-Signal_Original).^2); # 滤波后的信号相对原信号的统计均方误差
mse1
fprintf('滤波后的信号相对原信号的统计均方误差:\n');
mse2 = mean((Signal_Filter-Signal_Original).^2); # 滤波后的信号相对原信号的统计均方误差
mse2

función media: cálculo promedio.

* El error cuadrático medio estadístico de la señal después de introducir ruido en relación con la señal original:

mse1 = 0,2172

* Error cuadrático medio estadístico de la señal filtrada con respecto a la señal original:

mse2 = 0,0306

Después de aplicar el filtrado de Wiener, la señal se acerca más a la señal original.


Supongo que te gusta

Origin blog.csdn.net/qq_41958946/article/details/127578623
Recomendado
Clasificación