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