1、频域滤波
带通滤波器:如果知道原始信号的频率范围,可以设计一个带通滤波器,只保留该频率范围内的信号,其他频率部分被认为是噪声
带阻滤波器:如果知道噪声的频率范围,可以设计一个带阻滤波器,阻止该频率范围内的信号通过,从而只保留原始信号
频域滤波示例:
①信号的频域转换: 先对信号进行傅里叶变换,将其从时域转换到频域
% 生成示例信号
fs = 1000; % 采样率
t = 0:1/fs:1-1/fs; % 时间向量
f1 = 50; % 原始信号频率
f2 = 200; % 噪声信号频率
signal = sin(2 * pi * f1 * t) + 0.5 * sin(2 * pi * f2 * t) + 0.2 * randn(size(t));
% 傅里叶变换
fft_signal = fft(signal);
freqs = (0:length(signal)-1) * (fs / length(signal));
②设计滤波器:根据频率特性设计带阻滤波器,去除噪声频率成分
% 设计带阻滤波器
lowcut = 180; % 带阻滤波器下限频率
highcut = 220; % 带阻滤波器上限频率
filter_mask = (freqs < lowcut) | (freqs > highcut);
filtered_fft_signal = fft_signal .* filter_mask;
③信号的逆频域转换:对过滤后的信号进行逆傅里叶变换,回到时域。
% 信号的逆傅里叶变换
filtered_signal = ifft(filtered_fft_signal);
% 绘图显示结果
figure;
subplot(2, 1, 1);
plot(t, signal);
title('原始信号');
xlabel('时间 (s)');
ylabel('幅值');
subplot(2, 1, 2);
plot(t, real(filtered_signal));
title('去噪后信号');
xlabel('时间 (s)');
ylabel('幅值');
2、时域分析
滑动平均滤波器:通过滑动窗口对信号进行平滑处理,可以减小噪声的影响
自适应滤波器:根据输入信号的特性动态调整滤波器参数,可以有效地分离出噪声
3、信号分解方法
小波变换:将信号分解到不同尺度的小波系数中,低频部分通常对应原始信号,高频部分则是噪声
经验模态分解(EMD):将信号分解为一系列本征模态函数(IMF),噪声通常分布在较高频的IMF中
4、统计方法
主成分分析(PCA):用于多维信号中,通过找到主成分和次要成分,可以分离出信号和噪声
独立成分分析(ICA):将信号分解为统计独立的成分,噪声成分通常是独立的,可以分离出来
5、机器学习方法
监督学习:使用已标注的数据训练模型,识别并分离出噪声
非监督学习:使用聚类等算法,根据信号和噪声的不同特性进行分离
完整代码如下:
% 生成示例信号
fs = 1000; % 采样率
t = 0:1/fs:1-1/fs; % 时间向量
f1 = 50; % 原始信号频率
f2 = 200; % 噪声信号频率
signal = sin(2 * pi * f1 * t) + 0.5 * sin(2 * pi * f2 * t) + 0.2 * randn(size(t));
% 傅里叶变换
fft_signal = fft(signal);
freqs = (0:length(signal)-1) * (fs / length(signal));
% 设计带阻滤波器
lowcut = 180; % 带阻滤波器下限频率
highcut = 220; % 带阻滤波器上限频率
filter_mask = (freqs < lowcut) | (freqs > highcut);
filtered_fft_signal = fft_signal .* filter_mask;
% 信号的逆傅里叶变换
filtered_signal = ifft(filtered_fft_signal);
% 绘图显示结果
figure;
subplot(2, 1, 1);
plot(t, signal);
title('原始信号');
xlabel('时间 (s)');
ylabel('幅值');
subplot(2, 1, 2);
plot(t, real(filtered_signal));
title('去噪后信号');
xlabel('时间 (s)');
ylabel('幅值');