博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Matlab: 白噪声与曲线拟合
阅读量:6000 次
发布时间:2019-06-20

本文共 1953 字,大约阅读时间需要 6 分钟。

在信号处理中常常需要用到曲线拟合,这里介绍一下利用最小二乘拟合一般曲线的方法,并对滤掉信号中白噪声的方法作些介绍。

为了测试拟合算法的好坏,先模拟出一个信号作为检验算法的例子:

  1. 用白噪声产生模拟信号:
    对于理论信号y=y(x),一般可用rand(size(x))和randn(size(x))生成随即噪声信号,两者的区别在于rand生成的噪声信号都是正值,而randn生成的噪声信号则是正负跳跃分布的,所以randn作为白噪声信号,更符合实际情况:
f0=@(c,x)( (x>=0&x
=c(1)&x
=c(2)&x
=c(4)&x
=c(6))*0 );disp('real c0');c0=[1, 2, 1, 5, 2, 6]x_int=0:0.002:10;y_int=f0(c0,x_int);%(x_int, y_int) is perfect zigzag signal %sig=y_int+0.5*rand(size(x_int));sig=y_int+0.5*randn(size(x_int));
985636-20170708163554815-1137936768.png
985636-20170708163606128-462238853.png
  1. 最小二乘折线拟合
    考虑到需要拟合的函数是个分段的折线函数,需要首先建立含有固定参数的折线函数的数学模型,算法如下图:
    985636-20170708192847175-1387797347.png
    按照这个算法,用matlab搭建的代码如下:
% try zigzag fittingf2=@(c,x)( (x>=0&x
=c(1)&x
=c(2)&x
=c(4)&x
=c(6))*0 );c0=[1.1, 1.5, 1.8, 5.4, 2.5, 5.6];c_fit=nlinfit(x_int,sig,f2,c0);y2=f2(c_fit,x_int);figure();plot(x_int,sig,'blue');hold onplot(x_int,y2,'red --','linewidth',2);legend('sig','zigzag fitting');

985636-20170708191655722-447307825.png

真实参数:1,2,1,5,2,6
拟合参数:1.0237,2.06,1.0107,4.9479,2.1101,6.0005
可以看到,拟合的参数多少和真实的参数存在一些差异,但是已经非常接近。

  1. 优化:傅立叶变换降噪
    如果要进一步提高拟合的精度,需要设法降低白噪声的干扰。因为白噪声是一种宽谱的干扰,所以常用的带通滤波处理是不可行的,这里可以考虑对信号进行傅立叶变换,滤掉其中强度较弱的白噪声频域成分。
Fs=1/(x_int(2)-x_int(1));nfft=length(sig);sig_fft_comp=fft(sig);sig_fft_real=2*abs(sig_fft_comp)/nfft;% adjust the distribution of spectrum according to double frequency directionsig_fft_real_adjust=[sig_fft_real(round(nfft/2+1):end),sig_fft_real(1:round(nfft/2))];f_double=linspace(-Fs/2,Fs/2,nfft);% apply the A(f) strength filterAf_level=0.01;Af_lim=Af_level*max(sig_fft_real);i_fd=find(sig_fft_real

傅立叶降噪后结果如下:

985636-20170708214234065-674473504.png
985636-20170708215841706-41126273.png
此时算得的拟合系数是:
1.0677,1.8680, 0.9665,5.0140,1.9736,5.9895
这比降噪前的效果稍好了一些,更贴近与真实的折线系数。但是编程的复杂度上升了很多,在对拟合的精度要求不是太高的情况下,可以不用作傅立叶降噪的处理。
  1. 补充:matlab多项式拟合函数(polyfit)
    [p,s,mu]=polyfit(x,y,n)
    x,y是被拟合的离散曲线点,n是需要拟合的多项式次数(默认的多项式是幂级数形式的),其中p是个多项式各次项的系数,是按照指数从高到低排列的。mu(1)是y的平均值,mu(2)是单位标准偏差(unit standard deviation,可缩写成STD)
    \(SDT=\frac{y-mean(y)}{\sigma}\)

转载于:https://www.cnblogs.com/docnan/p/7137203.html

你可能感兴趣的文章
俄安全公司:iPhone自动向苹果服务器上传用户通话记录
查看>>
TCL免污式洗衣机:双方共赢的科技创新
查看>>
智能家居真的更安全吗?邻居可用Siri解锁你家的门锁
查看>>
新零售催生未来经济形态 线上线下全渠道融合达新高度
查看>>
测试VDI网络性能 保证终端用户体验
查看>>
嵌入式软件测试与一般软件测试之异同研究
查看>>
Cookie问题(烦了三天)
查看>>
华云数据重新定义企业级云平台服务
查看>>
大数据推动人工智能发展 AI+X将实现人工智能生活化
查看>>
IDC:IBM Bluemix 落地 中国PaaS市场竞争进入新阶段
查看>>
在线协作工具“一起写”获金山WPS战略投资
查看>>
专家解读工业物联网优势的商业模式
查看>>
清新区建成清远市首个农综改大数据平台
查看>>
sqlite3数据库归纳
查看>>
物联网普而不及 仍缺杀手级应用
查看>>
持续集成引擎 Hudson 和 Jenkins 的恩恩怨怨
查看>>
《微课实战:Camtasia Studio入门精要》——1.3 软件安装
查看>>
《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一1.1.3 评估物理性能...
查看>>
良品铺子天猫618爆卖300万个手撕面包,还用数据改造线下
查看>>
这位阿里工程师的家,为何设置了重重机关?
查看>>