举例:原始低频信号
原始信号图像:
原始信号频谱图:
噪声信号:
%% 加噪(高斯白噪声)
sigma = 0.01; %噪声方差
noisy = normrnd(0,sigma,1,length(x));
噪声频谱图:
加噪后信号:
构造低通滤波:
%%将7以后的频点的权值全设置为0,构建低通滤波
f2(7:193) = 0; %这里选取的主频个数未7
降噪后信号:
工程代码:
% 峰值缓变函数最优化(去噪方法、回归方法)
clear,clc,close all
%% 构造峰值缓变函数
x = 0 : 0.01 : 2;
%y = 1 ./ ( 1 + ( (x-1).^6) ); % 巴特沃斯低通滤波函数(峰值缓变)
y = 1 ./ ( 1 + ( (x-1).^6 + 0.02 * x ) );
plot(x,y)
%最值求解
pos = find(y == max(y) ); %寻找最大值
disp([ '原始曲线 : ','最优解=' , num2str( x(pos) ) ,', 最优函数值=' , num2str( y(pos) ) ])
%% 加噪(高斯白噪声)
sigma = 0.01; %噪声方差
noisy = normrnd(0,sigma,1,length(x));
yn = y + noisy;
%最值求解
pos2 = find(yn == max(yn)); %寻找最大值
disp([ '加噪曲线 : ','最优解=' , num2str( x(pos2) ) ,', 最优函数值=' , num2str( y(pos2) ) ])
%disp(['------- 去噪方法 -------'])
%% 低通滤波去噪
f2 = fft(yn);
% 计算信号的傅里叶变换
f_signal = fft(noisy);
% 计算频率范围
L = length(y); % 信号长度
Fs = 1 / (x(2) - x(1)); % 采样频率
frequencies = Fs*(0:(L/2))/L;
% 计算幅度谱
amplitude = abs(f_signal/L);
amplitude = amplitude(1:L/2+1);
% 绘制频谱图
figure;
plot(frequencies, amplitude);
title('原信号的频谱图');
xlabel('频率 (Hz)');
ylabel('幅度');
f2(7:193) = 0; %这里选取的主频个数未7
y3 = ifft(f2);
%最值求解
pos3 = find( y3 == max(y3) );%寻找最大值
disp([ '低通滤波去噪 : ','最优解=' , num2str( x(pos3) ) ,', 最优函数值=' , num2str( y(pos3) ) ])
%% 绘图
figure,plot(x,y,'.-'),title('原始峰值缓变函数')
figure,plot(x,yn,'.-'),title('原函数加噪')
figure,plot(x,abs(y3),'.-'),title('低通滤波去噪')