Bootstrap

17、matlab实现均值滤波、中值滤波、Butterworth滤波和线性相位FIR滤波

1、前言

在 MATLAB 中可以通过不同的函数和工具箱实现均值滤波、中值滤波、Butterworth 滤波和线性相位 FIR 滤波。以下是一些基本示例代码,演示如何在 MATLAB 中实现这些滤波器:

均值滤波:

​img = imread('lena.jpg'); % 读取图像 
filtered_img = imfilter(img, fspecial('average', [3 3])); % 应用3x3 均值滤波器 
imshow(filtered_img); % 显示滤波后的图像

中值滤波

img = imread('lena.jpg'); % 读取图像 
filtered_img = medfilt2(img, [3 3]); % 应用3x3 中值滤波 
imshow(filtered_img); % 显示滤波后的图像

Butterworth 滤波: 示例代码处理一维信号:

x = randn(1,10000); % 生成随机信号 
[b, a] = butter(6, 0.5); % 创建6阶 Butterworth 滤波器系数 
filtered_signal = filter(b, a, x); % 应用滤波器

线性相位 FIR 滤波器: 示例代码处理一维信号:

Fs = 1000; % 采样频率 
t = 0:1/Fs:1; % 时间向量 
x = sin(2*pi*50*t) + 2*sin(2*pi*120*t); % 构造信号 
[b, a] = fir1(30, 0.5, 'low', hamming); % 创建30阶线性相位 FIR 滤波器 
filtered_signal = filter(b, 1, x); % 应用滤波器

以上示例代码提供了在 MATLAB 中实现均值滤波、中值滤波、Butterworth 滤波和线性相位 FIR 滤波的基本方法。实际场景中,根据具体需求和信号类型,可以进一步调整参数和滤波器设计方法,以获得更好的滤波效果。MATLAB 中有丰富的信号处理工具箱和函数库,可以帮助用户更方便地实现各种滤波器设计和应用。

2、创建信号

1)创建正余弦信号、噪声信号和混合信号

原始正余弦信号公式:Signal1= sin(2*pi*20* t) + sin(2*pi*40* t) + sin(2*pi*60* t)

高斯分布的白噪声:NoiseGauss= [randn(1,2000)]

均匀分布的白噪声:[rand(1,2000)]

正余弦信号、噪声信号和混合信号代码:

N = 2000; %采样点数
Fs = 2000; %采样频率
t = 0:1 / Fs:1 - 1 / Fs; %时间序列
Signal1= sin(2*pi*20* t) + sin(2*pi*40* t) + sin(2*pi*60* t);
NoiseGauss= [randn(1,2000)]; %高斯分部白噪声
NoiseWhite= [rand(1,2000)]; %后100点均匀分布白噪声
NoiseSignal1= Signal1+NoiseGauss; %设计混合信号1
NoiseSignal2= Signal1+NoiseWhite; %设计混合信号2
subplot(5,1,1);
plot(Signal1);
title('正余弦信号');
subplot(5,1,2);
plot(NoiseGauss);
title('高斯噪声');
subplot(5,1,3);
plot(NoiseWhite);
title('白噪声');
subplot(5,1,4);
plot(NoiseSignal1);
title('混合高斯噪声信号');
subplot(5,1,5);
plot(NoiseSignal2);
title('混合白噪声信号');

试图效果:

2)创建方波信号、噪声及混合信号

原始方波信号公式:

Signal2=[2*ones(1,50),zeros(1,50),-1*ones(1,100),zeros(1,50),-2*ones(1,50),zeros(1,50),1*ones(1,100),zeros(1,50),2*ones(1,50),zeros(1,50),-1*ones(1,100),zeros(1,50),-2*ones(1,50),zeros(1,50),1*ones(1,100),zeros(1,50),2*ones(1,50),zeros(1,50),-1*ones(1,100),zeros(1,50),-2*ones(1,50),zeros(1,50),1*ones(1,100),zeros(1,50),2*ones(1,50),zeros(1,50),-1*ones(1,100),zeros(1,50),-2*ones(1,50),zeros(1,50),1*ones(1,100),zeros(1,50),]

高斯分布的白噪声:NoiseGauss= [randn(1,2000)]

均匀分布的白噪声:[rand(1,2000)]

方波信号、噪声及混合信号代码

N = 2000; %采样点数
Fs = 2000; %采样频率
t = 0:1 / Fs:1 - 1 / Fs; %时间序列
NoiseGauss= [randn(1,2000)]; %高斯分部白噪声
NoiseWhite= [rand(1
;