求:小波函数C程序
求有关各种小波函数的C程序, 例如Morlet小波,草帽小波,Haar等小波函数,请大家多帮忙,谢谢!!![ 本帖最后由 zhlong 于 2007-6-4 21:51 编辑 ]
回复 楼主 shanghai 的帖子
虽然帖子过期了 我还是回一下吧 这个程序是我前几天做的!在函数调用上有一点点问题。自己改一下就能用了!!我的输入数据是从文件输入的!
#include "math.h"
#include "stdio.h"
#include "conio.h"
FILE*outF;
int DB4DWT(int Data[],int n) /*Haar小波的分解算法 */
{
int i,j;
int half=n>>1;
int tmp;
double h0=0.5,h1=0.5;
double g0=-0.5,g1=0.5;
if(!(outF=fopen("result.txt","wt")))
{
printf("\nCant open the out file\n");
exit(0);
}
printf("\nthe filter of wavelet\n");
fprintf(outF,"the filter of wavelet\n");
if(n>=4)
{
for(j=0;j<half;j++)
{
tmp=Data[(2*j)%n]*h1+Data[(2*j+1)%n]*h0;
tmp=Data[(2*j)%n]*g1+Data[(2*j+1)%n]*g0;
}
for(i=0;i<n;i++)
{
Data=tmp;
}
}
}
void IDWT(int Data[],int n) /*Haar小波的重构算法 */
{
int t,shuju,a={1,2},a1={3,-1},b={0,0,0,0},b1={0,0,0,0},c,d;
double h0=1,h1=1;
double g0=1,g1=-1;
int i,j;
for(i=0;i<4;i+=2)
{
b=a;
b1=a1;
}
printf("++++++++++up sampling+++++++++++\n");
fprintf(outF,"++++++++++up sampling+++++++++++\n");
for(i=0;i<4;i++)
{
printf("%d %d\n",b,b1);
fprintf(outF,"%d %d\n",b,b1);
}
n=4;
for(j=0;j<4;j++)
{
c=b[(j)%n]*h1+b[(j+1)%n]*h0;
d=b1[(j)%n]*g1+b1[(j+1)%n]*g0;
Data=c+d;
}
printf("++++++++++recombination+++++++++\n");
fprintf(outF,"++++++++++recombination+++++++++\n");
for(j=0;j<4;j++)
printf("%d\n",Data);
for(i=0;i<4;i++)
fprintf(outF,"%d\n",Data);
}
void main()
{ FILE *dat;
int a;
int i,n=4;int half=n>>1;
if((dat=fopen("c:\\33.txt","rt"))==NULL){
printf("open file error");
getch();
exit(1);}
for(i=0;i<4;i++){
fscanf(dat,"%d",&a);
}
fclose(dat);
printf("data:");for(i=0;i<4;i++){
printf("%d ",a);
}
getchar();
DB4DWT(a,n);
printf("+++++++approximatepart++++++++\n");
fprintf(outF,"++++++++++approximatepart+++++++++\n");
for(i=0;i<half;i++)
{
printf("%d\n",a);
fprintf(outF,"%d\n",a);
}
printf("+++++++++detailpart+++++++++++\n");
fprintf(outF,"++++++++++detailpart+++++++++\n");
for(i=half;i<n;i++)
{
printf("%d\n",a);
fprintf(outF,"%d\n",a);
}
IDWT(a,n);
fclose(outF);
getch();
} c:\\33.txt",
什么格式的 ??
修改后的代码
#include <stdlib.h>#include <math.h>
#include <stdio.h>
#include <conio.h>
FILE*outF;
int DB4DWT(int Data[],int n) /*Haar小波的分解算法 */
{
int i,j;
int half=n>>1;
int tmp;
double h0=0.5,h1=0.5;
double g0=-0.5,g1=0.5;
if(!(outF=fopen("result.txt","wt")))
{
printf("\nCant open the out file\n");
exit(0);
}
printf("\nthe filter of wavelet\n");
fprintf(outF,"the filter of wavelet\n");
if(n>=4)
{
for(j=0;j<half;j++)
{
tmp=Data[(2*j)%n]*h1+Data[(2*j+1)%n]*h0;
tmp=Data[(2*j)%n]*g1+Data[(2*j+1)%n]*g0;
}
for(i=0;i<n;i++)
{
Data=tmp;
}
}
return 0;
}
void IDWT(int Data[],int n) /*Haar小波的重构算法 */
{
inta={1,2},a1={3,-1},b={0,0,0,0},b1={0,0,0,0},c,d;
double h0=1,h1=1;
double g0=1,g1=-1;
int i,j;
for(i=0;i<4;i+=2)
{
b=a;
b1=a1;
}
printf("++++++++++up sampling+++++++++++\n");
fprintf(outF,"++++++++++up sampling+++++++++++\n");
for(i=0;i<4;i++)
{
printf("%d %d\n",b,b1);
fprintf(outF,"%d %d\n",b,b1);
}
n=4;
for(j=0;j<4;j++)
{
c=b[(j)%n]*h1+b[(j+1)%n]*h0;
d=b1[(j)%n]*g1+b1[(j+1)%n]*g0;
Data=c+d;
}
printf("++++++++++recombination+++++++++\n");
fprintf(outF,"++++++++++recombination+++++++++\n");
for(j=0;j<4;j++)
printf("%d\n",Data);
for(i=0;i<4;i++)
fprintf(outF,"%d\n",Data);
}
void main()
{
FILE *dat;
int a;
int i,n=4;int half=n>>1;
if((dat=fopen("c:\\33.txt","rt"))==NULL){
printf("open file error");
getch();
exit(1);}
for(i=0;i<4;i++){
fscanf(dat,"%d",&a);
}
fclose(dat);
printf("data:");
for(i=0;i<4;i++){
printf("%d ",a);
}
getchar();
DB4DWT(a,n);
printf("+++++++approximatepart++++++++\n");
fprintf(outF,"++++++++++approximatepart+++++++++\n");
for(i=0;i<half;i++)
{
printf("%d\n",a);
fprintf(outF,"%d\n",a);
}
printf("+++++++++detailpart+++++++++++\n");
fprintf(outF,"++++++++++detailpart+++++++++\n");
for(i=half;i<n;i++)
{
printf("%d\n",a);
fprintf(outF,"%d\n",a);
}
IDWT(a,n);
fclose(outF);
getch();
}
和matlab结果不一致
回复 地板 graduate 的帖子
不一样是这样的 因为 我在写反变换的程序中有规定的几个数实质上我的程序是正确的 你要做点修改 在程序中有一段是在反变换程序中调用正变换的结果
我的33.txt中的数字是4 -2 1 3
我的程序之所以运行的重构结果是4 -2 1 3
是因为我在反变换中没有调用正变换的结果 而直接赋值为inta={1,2},a1={3,-1},
所以你要用这个程序 要做的只有一点:
将反变换中的程序中的a和a1换成正变换中的返回值!!!!
由于我编这个是为了熟悉算法的 所以我就没有继续改 你自己改改吧 这个程序是对的 仅仅是返回值那你要自己做 兄弟 我想请教一下小波去噪的 算法 问题,,可不可以交流下
QQ? 学习下,正在找小波的C程序
页:
[1]