小波去噪c语言程序

小波去噪c语言程序,第1张

1、小波阈值去噪理论

小波阈值去噪就是对信号进行分解,然后对分解后的系数进行阈值处理,最后重构得到去噪信号。该算法其主要理论依据是:小波变换具有很强的去数据相关性,它能够使信号的能量在小波域集中在一些大的小波系数中;而噪声的能量却分布于整个小波域内。因此,经小波分解后,信号的小波系数幅值要大于噪声的系数幅值。可以认为,幅值比较大的小波系数一般以信号为主,而幅值比较小的系数在很大程度上是噪声。于是,采用阈值的办法可以把信号系数保留,而使大部分噪声系数减小至零。小波阈值收缩法去噪的具体处理过程为:将含噪信号在各尺度上进行小波分解,设定一个阈值,幅值低于该阈值的小波系数置为0,高于该阈值的小波系数或者完全保留,或者做相应的“收缩(shrinkage)”处理。最后将处理后获得的小波系数用逆小波变换进行重构,得到去噪后的信号.

2、小波阈值去噪c语言程序

此程序是用于信号处理分析,突出奇异值的前段处理,对信号进行小波包分解,用C语言实现的,仅供参考。

#include

#include

#include

#include

#defineLENGTH4096//信号长度

#defineDB_LENGTH8//Daubechies小波基紧支集长度

/******************************************************************

* 一维卷积函数

* 说明:循环卷积,卷积结果的长度与输入信号的长度相同

* 输入参数:data[],输入信号;core[],卷积核;cov[],卷积结果;

*n,输入信号长度;m,卷积核长度。

******************************************************************/

/*voidCovluTIon(doubledata[],doublecore[],doublecov[],intn,intm)

{

inTI=0;

intj=0;

intk=0;

//将cov[]清零

for(i=0;i《n;i++)

{

cov[i]=0;

}

//前m/2+1行

i=0;

for(j=0;j《m/2;j++,i++)

{

for(k=m/2-j;k《m;k++)

{

cov[i]+=data[k-(m/2-j)]*core[k];//k针对core[k]

}

for(k=n-m/2+j;k《n;k++)

{

cov[i]+=data[k]*core[k-(n-m/2+j)];//k针对data[k]

}

}

//中间的n-m行

for(i=m/2;i《=(n-m)+m/2;i++)

{

for(j=0;j《m;j++)

{

cov[i]+=data[i-m/2+j]*core[j];

}

}

//最后m/2-1行

i=(n-m)+m/2+1;

for(j=1;j《m/2;j++,i++)

{

for(k=0;k《j;k++)

{

cov[i]+=data[k]*core[m-j-k];//k针对data[k]

}

for(k=0;k《m-j;k++)

{

cov[i]+=core[k]*data[n-(m-j)+k];//k针对core[k]

}

}

}

*/

//定义一个线性卷积

voidCovluTIon(doubledata[],doublecore[],doublecov[],intn,intm)

{

inTI=0;

intj=0;

intt=0;

//将cov[]清零

for(j=0;j《n+m-1;j++)

{

cov[j]=0;

}

for(j=0;j《m+n-1;j++)

{

if(j《=m-1)//前面m行

{

for(i=0,t=j;t》=0;i++,t--)

cov[j]+=data[i]*core[t];

}

elseif(j《=n-1)//中间n-m行

{

for(i=j-m+1,t=m-1;t》=0;i++,t--)

cov[j]+=data[i]*core[t];

}

else//后面m行

{

for(i=j-m+1,t=m-1;i《n;i++,t--)

cov[j]+=data[i]*core[t];

}

}

}

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

原文地址: https://outofmemory.cn/dianzi/2718214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存