PCA去噪--一维正弦信号去噪(高斯白噪声)

备注:所有代码均为原创,若需要代码请联系yifeiwans@stu.xmu.edu.cn.希望对大家有帮助,熬夜写文章,希望大家不要白嫖。给个赞,以后会更新。

1.序言

目前,CSDN以及PUDN论坛上的代码,很少关于PCA进行信号滤波以及信号去噪的,而大多数关于用PCA降维处理.自己也搜了半天的文章发现只有完美的理论讲解,也没有相关的代码。我就根据PCA原理结合高斯白噪声,写了关于PCA去噪方法以及MATLAB代码:正弦信号+高斯白噪声通过PCA方法去除高斯白噪声,还原一维正弦信号。

PCA去噪相关原理大家可以看这篇文章:PCA进行信号滤波icon-default.png?t=N7T8https://www.cnblogs.com/bjwu/p/8970823.html

2.PCA原理(待补充)

3.PCA计算步骤(待补充)

4.MATLAB代码实现

为了与文章相贴合我们采用推荐文章中给的信号例子:三个频率不同且幅值相位不相同的余弦函数之和,20,30,50HZ,幅值分别为1,2,3。噪声信号为高斯白噪声,我们现在要用主成分分析将高斯白噪声从x(t)中滤掉。

4.1噪声模型

x(t)= \cos \left(20t\right)+2\cos \left(30t\right)+3\cos \left(50t\right)+n(t)

其中噪声方差分为取0.1,1以及5来验证算法有效性,MATLAB噪声代码是

noise=0.1*randn(size(st1));

noise=0.1*randn(size(st1)); %方差0.1
noise=1*randn(size(st1)); %方差1
noise=5*randn(size(st1)); %方差5

4.2 仿真结果

图1 PCA去噪方差为0.1
图1 PCA去噪方差为1
图1 PCA去噪方差为5

从三种不同噪声方差下可以看出,噪声小的可以完全恢复出信号,随着噪声功率增加PCA信号恢复出现失真。具体的大家可以做出SNR图来观看。

clc;clear all;close all
%% Simulate data

dt=0.001;
t=0:dt:1-dt;
st=1*cos(2*pi*20*t)+2*cos(2*pi*30*t)+1*cos(2*pi*50*t);

% 20 30,50HZ,幅值分别为1,2 3

sigma=0.1;%噪声方差0.1 1 5


%%PCA函数代码已经隐藏,希望大家不要白嫖可以联系我286820790或邮箱286920790@qq.com
[eig_ts, V,S,N]=PCA_denoising(st,sigma) ;


%% Plotting time

% time series
figure(1)
% subplot(2,1,2)
plot(t,eig_ts/10,"r-")
hold on;
plot(t,st,"b.")
xlabel('Time (norm.)')
title('噪声方差0.1')
legend({'PCA恢复 ';'原始信号'})
zoom on

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科研Beatles

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值