#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);
}

最新文章

  1. 基于DotNetOpenAuth的OAuth实现示例代码: 获取access token
  2. mysql常用基本操作
  3. Windows Server 2008 R2域控组策略设置禁用USB
  4. OpenCV从入门到放弃系列之——如何扫描图像、利用查找表和计时
  5. 【HOW】如何限制Reporting Services报表导出功能中格式选项
  6. .net之微信企业号开发(二) 企业号人员身份认证与开发
  7. Subarray Sum &amp; Maximum Size Subarray Sum Equals K
  8. 索引器(C# 编程指南)
  9. 学习记录 java 哈希
  10. 两种Makefile
  11. 重新想象 Windows 8 Store Apps (20) - 动画: ThemeAnimation(主题动画)
  12. hdu149850 years, 50 colors (多个最小顶点覆盖)
  13. Callback 与 Promise 间的桥梁 —— promisify
  14. True和数字相加的结果
  15. 【第二组】Hunter-alpha版本发布报告
  16. c/c++ 类模板初探
  17. UVA10256 The Great Divide
  18. 在多任务(RTOS)环境中使用看门狗
  19. (转)解决OSX上面PHP curl SSLRead()
  20. springboot自带定时任务和集成quartz

热门文章

  1. pytest-调整测试用例的执行顺序
  2. AtCoder ABC 131F Must Be Rectangular!
  3. xshell安装错解决方案
  4. GetWindowsDirectoryA and GetSystemDirectory
  5. 前端学习(十九)jquery(笔记)
  6. hdu 3374 最大最小表示法 next
  7. Java里的参数类型/返回值类型
  8. Java之数据库连接池
  9. Flex布局(一)
  10. 奇技淫巧之Delphi和JavaScript互通