#include <stdio.h>
#include <stdlib.h>
#define LENGTH 512//信号长度
/******************************************************************
* 一维卷积函数
*
* 说明: 循环卷积,卷积结果的长度与输入信号的长度相同
*
* 输入参数: data[],输入信号; core[],卷积核; cov[],卷积结果;
* n,输入信号长度; m,卷积核长度.
*
* 李承宇, lichengyu2345@126.com
*
* 2010-08-18
******************************************************************/
void Covlution(double data[], double core[], double cov[], int n, int m)
{
int i = ;
int j = ;
int k = ; //将cov[]清零
for(i = ; i < n; i++)
{
cov[i] = ;
} //前m/2+1行
i = ;
for(j = ; j < m/; j++, i++)
{
for(k = m/-j; k < m; k++ )
{
cov[i] += data[k-(m/-j)] * core[k];//k针对core[k]
} for(k = n-m/+j; k < n; k++ )
{
cov[i] += data[k] * core[k-(n-m/+j)];//k针对data[k]
}
} //中间的n-m行
for( i = m/; i <= (n-m)+m/; i++)
{
for( j = ; j < m; j++)
{
cov[i] += data[i-m/+j] * core[j];
}
} //最后m/2-1行
i = (n - m) + m/ + ;
for(j = ; j < m/; j++, i++)
{
for(k = ; k < j; k++)
{
cov[i] += data[k] * core[m-j-k];//k针对data[k]
} for(k = ; k < m-j; k++)
{
cov[i] += core[k] * data[n-(m-j)+k];//k针对core[k]
}
} } /******************************************************************
* 一维小波变换函数
*
* 说明: 一维小波变换,只变换一次
*
* 输入参数: input[],输入信号; output[],小波变换结果,包括尺度系数和
* 小波系数两部分; temp[],存放中间结果;h[],Daubechies小波基低通滤波器系数;
* g[],Daubechies小波基高通滤波器系数;n,输入信号长度; m,Daubechies小波基紧支集长度.
*
* 李承宇, lichengyu2345@126.com
*
* 2010-08-19
******************************************************************/
void DWT1D(double input[], double output[], double temp[], double h[],
double g[], int n, int m)
{
// double temp[LENGTH] = {0};//????????????? int i = ;
/*
//尺度系数和小波系数放在一起
Covlution(input, h, temp, n, m); for(i = 0; i < n; i += 2)
{
output[i] = temp[i];
} Covlution(input, g, temp, n, m); for(i = 1; i < n; i += 2)
{
output[i] = temp[i];
}
*/ //尺度系数和小波系数分开
Covlution(input, h, temp, n, m); for(i = ; i < n; i += )
{
output[i/] = temp[i];//尺度系数
} Covlution(input, g, temp, n, m); for(i = ; i < n; i += )
{
output[n/+i/] = temp[i];//小波系数
} } void main()
{ double data[LENGTH];//输入信号
double temp[LENGTH];//中间结果
double data_output[LENGTH];//一维小波变换后的结果
int n = ;//输入信号长度
int m = ;//Daubechies正交小波基长度
int i = ;
char s[];//从txt文件中读取一行数据 static double h[] = {., ., ., -.,
-., .};
static double g[] = {., ., -., -.,
., -.};
//读取输入信号
FILE *fp;
fp=fopen("data.txt","r");
if(fp==NULL) //如果读取失败
{
printf("错误!找不到要读取的文件/"data.txt/"/n");
exit();//中止程序
} while( fgets(s, , fp) != NULL )//读取长度n要设置得长一点,要保证读到回车符,这样指针才会定位到下一行?回车符返回的是零值?是,非数字字符经过atoi变换都应该返回零值
{
// fscanf(fp,"%d", &data[count]);//一定要有"&"啊!!!最后读了个回车符!适应能力不如atoi啊
data[n] = atof(s);
n++;
} //一维小波变换
DWT1D(data, data_output, temp, h, g, n, m); //一维小波变换后的结果写入txt文件
fp=fopen("data_output.txt","w"); //打印一维小波变换后的结果
for(i = ; i < n; i++)
{
printf("%f/n", data_output[i]);
fprintf(fp,"%f/n", data_output[i]);
}
//关闭文件
fclose(fp);
}

小波变换C代码的更多相关文章

  1. 基于opencv的小波变换代码和图像结果

    #include "stdafx.h" #include "WaveTransform.h" #include <math.h> #include ...

  2. DWT小波变换及其在时间序列数据预测中的应用

    Given data: 时间序列数据. Goal:做预测 方法:在滑动窗口中取DWT特征,并验证. 实验验证: Load forcast 数据集. 问题: 小波变换的物理意义是什么? 小波变换的数学意 ...

  3. paper 42 :图像的小波变换

    关于小波变换我只是有一个很朴素了理解.不过小波变换可以和傅里叶变换结合起来理解. 傅里叶变换是用一系列不同频率的正余弦函数去分解原函数,变换后得到是原函数在正余弦不同频率下的系数. 小波变换使用一系列 ...

  4. 【DWT笔记】基于小波变换的降噪技术

    [DWT笔记]基于小波变换的降噪技术 一.前言 在现实生活和工作中,噪声无处不在,在许多领域中,如天文.医学图像和计算机视觉方面收集到的数据常常是含有噪声的.噪声可能来自获取数据的过程,也可能来自环境 ...

  5. 基于opencv的小波变换

    基于opencv的小波变换 提供函数DWT()和IDWT(),前者完成任意层次的小波变换,后者完成任意层次的小波逆变换.输入图像要求必须是单通道浮点图像,对图像大小也有要求(1层变换:w,h必须是2的 ...

  6. 小波学习之二(单层一维离散小波变换DWT的Mallat算法C++实现优化)--转载

    小波学习之二(单层一维离散小波变换DWT的Mallat算法C++实现优化)   在上回<小波学习之一>中,已经详细介绍了Mallat算法C++实现,效果还可以,但也存在一些问题,比如,代码 ...

  7. 小波学习之一(单层一维离散小波变换DWT的Mallat算法C++和MATLAB实现) ---转载

      1 Mallat算法 离散序列的Mallat算法分解公式如下: 其中,H(n).G(n)分别表示所选取的小波函数对应的低通和高通滤波器的抽头系数序列. 从Mallat算法的分解原理可知,分解后的序 ...

  8. 基于OpenCV进行图像拼接原理解析和编码实现(提纲 代码和具体内容在课件中)

    一.背景 1.1概念定义 我们这里想要实现的图像拼接,既不是如题图1和2这样的"图片艺术拼接",也不是如图3这样的"显示拼接",而是实现类似"BaiD ...

  9. 边缘检测算子和小波变换提取图像边缘【matlab】

    Roberts边缘检测算子:根据一对互相垂直方向上的差分可用来计算梯度的原理,采用对角线方向相邻两像素之差. 小波变换的方法比较适用于展现夹带在正常信号中的瞬间反常现象,具有方向敏感性.所以可以边缘检 ...

随机推荐

  1. android中的SQLite数据库

    SQLite是android中集成的一个轻量级的数据库,该数据库支持绝大部分SQL92语法 SQLiteDatabase代表一个数据库(底层就是一个数据库文件),一旦应用程序获得了代表指定数据库的SQ ...

  2. js异步处理

    一.什么是异步? 我们一般喜欢把异步和同步.并行拿出来比较,我以前的理解总是很模糊,总是生硬地记着“同步就是排队执行,异步就是一起执行”,现在一看,当初简直就是傻,所以我们第一步先把这三个概念搞清楚, ...

  3. koa2实现登录注册功能(ejs+mongodb版)

    gtihub仓库地址:(由于国内处于敏感时期,github暂时无法访问) 主要使用的中间件: "ejs": "^2.7.1",(渲染模板) "koa& ...

  4. Java删除过期文件

    public static void main(String[] args) throws IOException { long cut = LocalDateTime.now().minusWeek ...

  5. Mysql中(@i:=@i+1)的作用

    Oracle中有一个伪列rownum,可以在生成查询结果表的时候生成一组递增的序列号.MySQL中没有这个伪列,但是有时候要用,可以用如下方法模拟生成一列自增序号. (1)sql示例:select ( ...

  6. 搜索solr

    这是我第一次写博客,没有系统性.专业性,东西很杂,也不知道自己在写些什么. SOA分布式架构,所以,使用solr,搜索层的服务层需要搭建起来.搜索系统的表现层搭建 ,打包方式是war包 域名改变代表系 ...

  7. 记录一下list转map

    Map<String,String> mapListStream = list.stream().collect(Collectors.toMap(key,value)):key对应key ...

  8. .NET WEB API 简单搭建

    首先是注释问题: 找到 跟目录下Areas/HelpPage/App_Start/HelpPageConfig.cs 加上代码就OK 了 还有在解决方案属性 点击生成  将XML文档文件勾上 API ...

  9. Android——谷歌官方下拉刷新控件SwipeRefreshLayout(转)

    转自:http://blog.csdn.net/zouzhigang96/article/details/50476402 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言: 如今谷歌推出了 ...

  10. laravel写crontab定时任务(发送邮件)和laravel crontab不执行的问题

    1.artisan命令: php artisan make:command SendRejectEmail 2.app/Console/Commands下就会看到SendRejectEmail.php ...