用matlab作信号分析 如何处理低频噪音

用matlab作信号分析 如何处理低频噪音,第1张

预计用到的函数有: wavread();读入wav格式的语音信号 fft()快速傅里叶变换 plot()绘制二维图形 randn() 高斯白噪声 示例: x=wavread('filewav');%读取波形文件获得数据 x=x(1:1024);%取前1024点作为处理使用数据 fx=fft(x); figure(1); subplot(211); plot(x); subplot(212) plot(abs(fx)); snr=3; x1=x+snrrandn(1,1024);%添加高斯白噪声 fx1=fft(x1); figure(2); subplot(211); plot(x1) subplot(212); plot(abs(fx1))

去噪有很多种方法,现在小波去噪最为常用,在matlab中有自带的函数进行小波去噪,简单易行。最常用且简单的是阈值去噪,用函数ddencmp()生成信号的默认阈值,然后利用函数wdencmp()进行去噪。如:

%对含噪信号s进行3层小波分解

[c,l]=wavedec(s,3,'db1'); %s为含噪信号,3为小波分解层数,db1为采用的小波基

%获取信号默认值

[thr,sorh,keepapp]=ddencmp('den','wv',s);

%参数den代表去噪,wv代表小波,s代表含有噪声的信号

%实现去噪过程

s2=wdencmp('gbl',c,l,'db1',3,thr,sorh,keepapp);

%参数gbl表示采用全局去噪

哈哈!傻眼了吧,理论和实际不可兼得啊!对于你这个问题有如下建议:

小波去噪的试验,十个有九个都喜欢用正、余弦函数,但由于小波函数的几何特征,其实不易得到满意效果,你只能选择线性强的小波基,即对称性强并且光滑的小波,嘿嘿,貌似能做DWT的所有小波基中只有sym8的对称性最强(参看>

当你的噪声特征与信号的特征的频率相近时,小波也无能为力,它不是神,也一样分不出啥是噪声,所以其一是可增加分解层数,你这个信号只有100个数,5层已经很高了,再增大也没啥用了,可能会过多显示小波基的特征,造成扭曲失真(如果用SWT会好很多,但需要自己编制函数);其二是参数SCAL可以改为伸缩的sln,而不是固定的one,这样分解层数和SCAL都将起作用,你可以试着改改玩,效果还行。

分解5层

分解8层

你可以试试只分解一层的状况,频率最低的几处噪声会保留下来哦!

直接用两个矩阵相见就可以啦,例如a和b矩阵相减 直接用c=a-b即可 需要注意a和b的矩阵行、列数要相等 比如可以编程 a=[1 1;2 2]; b=[3 4;5 6]; c=a-b

以上就是关于用matlab作信号分析 如何处理低频噪音全部的内容,包括:用matlab作信号分析 如何处理低频噪音、请问如何在matlab中对信号进行去噪 *** 作。最好用函数的形式,方便其他程序调用、小波去噪matlab程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10108230.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存