autocad预览控件.不需要安装autocad即可在界面浏览-,Delphi,绘图程序/Graph Drawing
本程序为基于matlab的小波分析的应用实例。-,matlab,界面编程/GUI Develop
高通brew平台上的BUIW控件中的ImageStaticWidget使用示例-,Visual C++,Static控件/Static control
客观合理化一天一片人体豆腐花规范化广泛非官方大哥大法国-,C++ Builder,界面编程前耐渗/GUI Develop
本程序为基于matlab的插值分析与Euler解常微分方程的应用实例。-,matlab,界面编程/GUI Develop
用ASP.NET做的酒店管理系统,该系统主要处理酒店日常运营中涉及的客户信息.-,ASP,其他书籍/Other Books
EVC 读写INI文件 EVC 读写INI文件EVC 读写INI文件EVC 读写INI文件EVC 读写INI文件-,Visual C++,文件 *** 作/File Operate
本程序介绍基于matlab的平方根及改进平方根算法。-,matlab,按钮控件/Button control
高通brew平台上的BUIW控件中的slider的示例程序-,Visual C++,界面编程/GUI Develop
塔顶地无可奈何花落去 人威风扫地雪 可耕地枯无可奈何花落去 无可奈何花落去饿-,Visual C++,GDI/图象编程/GDI-Bitmap
oblog31sql oblog31sql oblog31sql oblog31sql oblog31sql-,ASP,Web服务器/Web Server
MATLAB实现简单图象处理的程序,在matlab2006a上通过-,matlab,matlab例程/matlab
源码、运行程序、帮助文件、必须的数据库文件-,Windows_Unix,C#编程/CSharp
dos下的TCP/IP栈库函数,并提供了多种tcp/ip编程demo。 -,DOS,TCP/IP协议栈/TCP/IP Stack
MATLAB进入时显示的图标的程序实现,有动画效果!-,matlab,matlab例程/matlab
地方官梵蒂冈地方官法 方法方法方法方法方法 -,Unix_Linux,TreeView控件/TreeView
几个matlab的编程实例,对初学者有一定的帮助。-,matlab,界面编程/GUI Develop
用ASP.NET做的客户管理系统,该系统以客户慧脊管理中涉及的销售管理,合同管理为主体.-,ASP,其他书籍/Other Books
毕毕剥剥毕毕剥剥爸爸 毕毕剥剥毕毕剥剥爸爸 -,DOS,Static控件/Static control
将数据库的资料转档到EXCEL里进行保存-,Delphi,其他小程序/Other windows programs
数字图像中队图像进行模板匹配算法之前的预处理算法!-,Visual C++,图形/文字识别/Graph Recognize
存车处存车处存车处厂 滴滴答答滴滴答答得到 -,DOS,编辑框/EditBox
实数编码GA,也是从网上下载的。非要上亩慧传5个才能下载,哎,实在是没办法啊,这个也不知道能不能运行,不能的话请不要骂我哦,谢谢!!-,Visual C++,人工智能/AI-NN-PR
DS1302+AT89C2051的LED钟,可以显示年、周、月、日、小时、分钟、秒-,TEXT,其他小程序/Other windows programs
可耕地 唇形枯 要一地三三大哥有在一码元表的有遥有-,Visual C++,TreeView控件/TreeView
用JAVA写的遗传算法的例子,比较简单,如果解压缩的时候需要密码的话,应该是“1”。写的比较简单。是老早以前写的了。-,Java,人工智能/AI-NN-PR
汇编语言,用C51单片机实现交通灯控制!二极管模拟发光!-,Asm,单片机开发/SCM
通过串口控制步进电机控制器,实现联络,速度控制,步长-,Visual C++,串口编程/Com Port
绝佳的Tab View控件的方式之一,VC++6.0经过运行调试的,可直接使用-,Visual C++,TreeView控件/TreeView
以某中小规模汽车维修厂为案例,用ASP.NET做的仓库管理系统.-,ASP,其他书籍/Other Books
关机程序。。。。。。。。。。。。。。。。。-,Visual C++,Windows编程/Windows Develop
绝佳的Tab View控件的方式之二,VC++6.0经过运行调试的,可直接使用-,Visual C++,界面编程/GUI Develop
在VC6下基于OpenCV的轮廓检测程序,其中图像的二值化 *** 作基于Canny和自适应阈值。通过trackbar来实现不同情况下的轮廓检测。-,Visual C++,图形/文字识别/Graph Recognize
绝佳的Tab View控件的方式之三,VC++6.0经过运行调试的,可直接使用-,Visual C++,界面编程/GUI Develop
用于首先获取需要下载的文件的大小,然后将其分块下载。-,Java,网络编程/WinSock-NDIS
用csocket模拟聊天室,可以在一台机子上模拟,也可以在不同机子上-,Visual C++,网络编程/WinSock-NDIS
这个好象也是从网络上找到一个基本遗传算法的例子,解压缩的时候如果需要密码的话,应该是“1”。-,Visual C++,人工智能/AI-NN-PR
本程序是运用java 语言 编写一款查看 网站源文件的程序 -,Java,其他/Other systems
使用C语言实现菜单控制的源程序,实现了学生成绩的管理.-,C-C++,界面编程/GUI Develop
在打开图像时,点击图像可在打开对话框中实时看到预览,绝好.-,Visual C++,界面编程/GUI Develop
用ASP.NET做的合同管理系统,该系统包括合同进展控制模块,员工管理模块,客户管理模块,项目管理模块,合同管理模块和合同统计模块等.-,ASP,其他书籍/Other Books
语音识别与合成工具箱.具有如下功能:时域分析,频域分析,LPC分析与合成等.-,matlab,matlab例程/matlab
实现(C描述)#include <stdio.h>
#include <math.h>
#include <stdlib.h>
//#include "行颤烂complex.h"
// --------------------------------------------------------------------------
#define N 8 //64
#defineM 3 //6 //2^m=N
#definePI3.1415926
// --------------------------------------------------------------------------
float twiddle[N/2] = {1.0, 0.707, 0.0, -0.707}
float x_r[N] = {1, 1, 1, 1, 0, 0, 0, 0}
float x_i[N]/档漏/N=8
/*
float twiddle[N/2] = {1, 0.9951, 0.9808, 0.9570, 0.9239, 0.8820, 0.8317, 0.7733,
0.7075, 0.6349, 0.5561,0.4721,0.3835,0.2912,0.1961,0.0991,
0.0000,-0.0991,-0.1961,-0.2912,-0.3835,-0.4721,-0.5561,-0.6349,
-0.7075,-0.7733, 0.8317,-0.8820,-0.9239,-0.9570,-0.9808,-0.9951} //N=64
float x_r[N]={1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,}
float x_i[N]
*/
FILE *fp
// ----------------------------------- func -----------------------------------
/**
* 初始化输出虚部
*/
static void fft_init( void )
{
int i
for(i=0i<Ni++) x_i[i] = 0.0
}
/**
* 反转算法.将时域信号重新排序.
* 这个算法有改进的空间
*/
static void bitrev( void )
{
intp=1, q, i
intbit_rev[ N ]//洞野
float xx_r[ N ] //
bit_rev[ 0 ] = 0
while( p <N )
{
for(q=0q<pq++)
{
bit_rev[ q ] = bit_rev[ q ] * 2
bit_rev[ q + p ] = bit_rev[ q ] + 1
}
p *= 2
}
for(i=0i<Ni++) xx_r[ i ] = x_r[ i ]
for(i=0i<Ni++) x_r[i] = xx_r[ bit_rev[i] ]
}
/* ------------ add by sshc625 ------------ */
static void bitrev2( void )
{
return
}
/* */
void display( void )
{
printf("\n\n")
int i
for(i=0i<Ni++)
printf("%f\t%f\n", x_r[i], x_i[i])
}
/**
*
*/
void fft1( void )
{ fp = fopen("log1.txt", "a+")
int L, i, b, j, p, k, tx1, tx2
float TR, TI, temp// 临时变量
float tw1, tw2
/* 深M. 对层进行循环. L为当前层, 总层数为M. */
for(L=1L<=ML++)
{
fprintf(fp,"----------Layer=%d----------\n", L)
/* b的意义非常重大,b表示当前层的颗粒具有的输入样本点数 */
b = 1
i = L - 1
while(i >0)
{
b *= 2
i--
}
// -------------- 是否外层对颗粒循环, 内层对样本点循环逻辑性更强一些呢! --------------
/*
* outter对参与DFT的样本点进行循环
* L=1, 循环了1次(4个颗粒, 每个颗粒2个样本点)
* L=2, 循环了2次(2个颗粒, 每个颗粒4个样本点)
* L=3, 循环了4次(1个颗粒, 每个颗粒8个样本点)
*/
for(j=0j<bj++)
{
/* 求旋转因子tw1 */
p = 1
i = M - L// M是为总层数, L为当前层.
while(i >0)
{
p = p*2
i--
}
p = p * j
tx1 = p % N
tx2 = tx1 + 3*N/4
tx2 = tx2 % N
// tw1是cos部分, 实部tw2是sin部分, 虚数部分.
tw1 = ( tx1>=N/2)? -twiddle[tx1-N/2] : twiddle[ tx1 ]
tw2 = ( tx2>=N/2)? -twiddle[tx2-(N/2)] : twiddle[tx2]
/*
* inner对颗粒进行循环
* L=1, 循环了4次(4个颗粒, 每个颗粒2个输入)
* L=2, 循环了2次(2个颗粒, 每个颗粒4个输入)
* L=3, 循环了1次(1个颗粒, 每个颗粒8个输入)
*/
for(k=jk<Nk=k+2*b)
{
TR = x_r[k] // TR就是A, x_r[k+b]就是B.
TI = x_i[k]
temp = x_r[k+b]
/*
* 如果复习一下 (a+j*b)(c+j*d)两个复数相乘后的实部虚部分别是什么
* 就能理解为什么会如下运算了, 只有在L=1时候输入才是实数, 之后层的
* 输入都是复数, 为了让所有的层的输入都是复数, 我们只好让L=1时候的
* 输入虚部为0
* x_i[k+b]*tw2是两个虚数相乘
*/
fprintf(fp, "tw1=%f, tw2=%f\n", tw1, tw2)
x_r[k] = TR + x_r[k+b]*tw1 + x_i[k+b]*tw2
x_i[k] = TI - x_r[k+b]*tw2 + x_i[k+b]*tw1
x_r[k+b] = TR - x_r[k+b]*tw1 - x_i[k+b]*tw2
x_i[k+b] = TI + temp*tw2 - x_i[k+b]*tw1
fprintf(fp, "k=%d, x_r[k]=%f, x_i[k]=%f\n", k, x_r[k], x_i[k])
fprintf(fp, "k=%d, x_r[k]=%f, x_i[k]=%f\n", k+b, x_r[k+b], x_i[k+b])
} //
} //
} //
}
/**
* ------------ add by sshc625 ------------
* 该实现的流程为
* for( Layer )
* for( Granule )
*for( Sample )
*
*
*
*
*/
void fft2( void )
{ fp = fopen("log2.txt", "a+")
int cur_layer, gr_num, i, k, p
float tmp_real, tmp_imag, temp // 临时变量, 记录实部
float tw1, tw2// 旋转因子,tw1为旋转因子的实部cos部分, tw2为旋转因子的虚部sin部分.
intstep // 步进
intsample_num // 颗粒的样本总数(各层不同, 因为各层颗粒的输入不同)
/* 对层循环 */
for(cur_layer=1cur_layer<=Mcur_layer++)
{
/* 求当前层拥有多少个颗粒(gr_num) */
gr_num = 1
i = M - cur_layer
while(i >0)
{
i--
gr_num *= 2
}
/* 每个颗粒的输入样本数N' */
sample_num= (int)pow(2, cur_layer)
/* 步进. 步进是N'/2 */
step = sample_num/2
/* */
k = 0
/* 对颗粒进行循环 */
for(i=0i<gr_numi++)
{
/*
* 对样本点进行循环, 注意上限和步进
*/
for(p=0p<sample_num/2p++)
{
// 旋转因子, 需要优化...
tw1 = cos(2*PI*p/pow(2, cur_layer))
tw2 = -sin(2*PI*p/pow(2, cur_layer))
tmp_real = x_r[k+p]
tmp_imag = x_i[k+p]
temp = x_r[k+p+step]
/*(tw1+jtw2)(x_r[k]+jx_i[k])
*
* real : tw1*x_r[k] - tw2*x_i[k]
* imag : tw1*x_i[k] + tw2*x_r[k]
* 我想不抽象出一个
* typedef struct {
* double real // 实部
* double imag // 虚部
* } complex以及针对complex的 *** 作
* 来简化复数运算是否是因为效率上的考虑!
*/
/* 蝶形算法 */
x_r[k+p] = tmp_real + ( tw1*x_r[k+p+step] - tw2*x_i[k+p+step] )
x_i[k+p] = tmp_imag + ( tw2*x_r[k+p+step] + tw1*x_i[k+p+step] )
/* X[k] = A(k)+WB(k)
* X[k+N/2] = A(k)-WB(k) 的性质可以优化这里*/
// 旋转因子, 需要优化...
tw1 = cos(2*PI*(p+step)/pow(2, cur_layer))
tw2 = -sin(2*PI*(p+step)/pow(2, cur_layer))
x_r[k+p+step] = tmp_real + ( tw1*temp - tw2*x_i[k+p+step] )
x_i[k+p+step] = tmp_imag + ( tw2*temp + tw1*x_i[k+p+step] )
printf("k=%d, x_r[k]=%f, x_i[k]=%f\n", k+p, x_r[k+p], x_i[k+p])
printf("k=%d, x_r[k]=%f, x_i[k]=%f\n", k+p+step, x_r[k+p+step], x_i[k+p+step])
}
/* 开跳!:) */
k += 2*step
}
}
}
/*
* 后记:
* 究竟是颗粒在外层循环还是样本输入在外层, 好象也差不多, 复杂度完全一样.
* 但以我资质愚钝花费了不少时间才弄明白这数十行代码.
* 从中我发现一个于我非常有帮助的教训, 很久以前我写过一部分算法, 其中绝大多数都是递归.
* 将数据量减少, 减少再减少, 用归纳的方式来找出数据量加大代码的规律
* 比如FFT
* 1. 先写死LayerI的代码然后再把LayerI的输出作为LayerII的输入, 又写死代码......
*大约3层就可以统计出规律来. 这和递归也是一样, 先写死一两层, 自然就出来了!
* 2. 有的功能可以写伪代码, 不急于求出结果, 降低复杂性, 把逻辑结果定出来后再添加.
*比如旋转因子就可以写死, 就写1.0. 流程出来后再写旋转因子.
* 寥寥数语, 我可真是流了不少汗! Happy!
*/
void dft( void )
{
inti, n, k, tx1, tx2
float tw1,tw2
float xx_r[N],xx_i[N]
/*
* clear any data in Real and Imaginary result arrays prior to DFT
*/
for(k=0k<=N-1k++)
xx_r[k] = xx_i[k] = x_i[k] = 0.0
// caculate the DFT
for(k=0k<=(N-1)k++)
{
for(n=0n<=(N-1)n++)
{
tx1 = (n*k)
tx2 = tx1+(3*N)/4
tx1 = tx1%(N)
tx2 = tx2%(N)
if(tx1 >= (N/2))
tw1 = -twiddle[tx1-(N/2)]
else
tw1 = twiddle[tx1]
if(tx2 >= (N/2))
tw2 = -twiddle[tx2-(N/2)]
else
tw2 = twiddle[tx2]
xx_r[k] = xx_r[k]+x_r[n]*tw1
xx_i[k] = xx_i[k]+x_r[n]*tw2
}
xx_i[k] = -xx_i[k]
}
// display
for(i=0i<Ni++)
printf("%f\t%f\n", xx_r[i], xx_i[i])
}
// ---------------------------------------------------------------------------
int main( void )
{
fft_init( )
bitrev( )
// bitrev2( )
//fft1( )
fft2( )
display( )
system( "pause" )
// dft()
return 1
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sshcx/archive/2007/06/14/1651616.aspx
printf输出时,如果格式符指定的域宽不够,会巧御派自动扩展孝贺到数据实际所需宽度,比如:......
int a=12345
printf("%3d",a) //此时会输出a的值,即12345,指定域宽为3,显然拆庆不够a的宽度,自动扩 ......//展成5位,输出a的值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)