⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fftlab.c

📁 su 的源代码库
💻 C
📖 第 1 页 / 共 2 页
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved.                       *//*********************** self documentation **********************//* * FFTLAB - Motif-X based graphical 1D Fourier Transform * * Usage:  fftlab * * Caveat: you must have the Motif Developer's package to install this code *//**************** end self doc ********************************//* * Credits: Dave Hale */#include "Xmcwp/Xmcwp.h"typedef struct {	Samples *r,*i;} CSamples;/* GLOBAL VARIABLES USED INTERNALLY */static Samples *fReal;		/* real part of f */static Samples *fImag;		/* imaginary part of f */static Samples *gReal;		/* real part of g */static Samples *gImag;		/* imaginary part of g */static CSamples *fComplex;	/* complex samples f */static CSamples *gComplex;	/* Fourier transform of f */static int nSamples;		/* number of samples */static int originCentered;	/* non-zero if origin at nSamples/2 *//* FUNCTIONS USED INTERNALLY */static void CreateApplication (Widget parent);static void editingCB (int selected, void *callData);static void lengthCB (int selected, void *callData);static void originChangeCB (Widget w, char * client_data, char * call_data);static void zeroAllCB (Widget w, char * client_data, char * call_data);static void quitCB (Widget w, char * client_data, char * call_data);static void editDone (Samples *s);static void newData (Samples *s);static void zeroData (Samples *s);static void transform (CSamples *this_fft, CSamples *that_fft);static float determinePlotValue (CSamples *cs);static void shiftOrigin (Samples *s);static void fftcc(int sign, int n, complex cc[]);/* main program */intmain (int argc, char **argv){	Widget app;		/* initialize toolkit */	app = XtInitialize(argv[0],"Fftlab",NULL,0,&argc,argv);		/* create and realize the application */	CreateApplication(app);	XtRealizeWidget(app);		/* handle events */	XtMainLoop();	return(EXIT_SUCCESS); /* not reached */}/* create all application widgets */static void CreateApplication (Widget parent){	int n;	XmString labels;	Widget win,frame,framee,framel,formo,formw,form,label,pushb,toggleb;	Arg args[20];	int nEditingButtons=4;	char *editingButtons[] = {"Draw","Negate","Zero","None"};	int nLengthButtons=3;	static int lengths[]={16,32,64};	char *lengthButtons[]={"16","32","64"};		/* create main window */	n = 0;	win = XmCreateMainWindow(parent,"",args,n);	XtManageChild(win);		/* create form widget to hold options panel and complex samples */	n = 0;	formw = XmCreateForm(win,"",args,n);	XtManageChild(formw);		/* create options panel */	n = 0;	XtSetArg(args[n],XmNtopAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNtopOffset,2); n++;	XtSetArg(args[n],XmNleftAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNleftOffset,2); n++;	XtSetArg(args[n],XmNbottomAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNbottomOffset,2); n++;	formo = XmCreateForm(formw,"",args,n);	XtManageChild(formo);	framee = XtcwpCreateStringRadioButtons(formo,"Editing",		nEditingButtons,editingButtons,0,		editingCB,NULL);	XtManageChild(framee);	framel = XtcwpCreateStringRadioButtons(formo,"Length",		nLengthButtons,lengthButtons,0,		lengthCB,lengths);	XtManageChild(framel);	n = 0;	XtSetArg(args[n],XmNleftAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNleftOffset,2); n++;	XtSetArg(args[n],XmNtopAttachment,XmATTACH_WIDGET); n++;	XtSetArg(args[n],XmNtopWidget,framee); n++;	XtSetArg(args[n],XmNtopOffset,10); n++;	XtSetValues(framel,args,n);	n = 0;	XtSetArg(args[n],XmNlabelType,XmSTRING); n++;	labels = XmStringCreateLtoR("Origin\nCentered",CHARSET);	XtSetArg(args[n],XmNlabelString,labels); n++;	XtSetArg(args[n],XmNalignment,XmALIGNMENT_BEGINNING); n++;	XtSetArg(args[n],XmNleftAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNleftOffset,2); n++;	XtSetArg(args[n],XmNtopAttachment,XmATTACH_WIDGET); n++;	XtSetArg(args[n],XmNtopWidget,framel); n++;	XtSetArg(args[n],XmNtopOffset,10); n++;	toggleb = XmCreateToggleButtonGadget(formo,"",args,n);	XtManageChild(toggleb);	XtAddCallback(	(Widget) toggleb,			XmNvalueChangedCallback,			(XtCallbackProc) originChangeCB,			(XtPointer) NULL);	n = 0;	XtSetArg(args[n],XmNlabelType,XmSTRING); n++;	labels = XmStringCreateLtoR("Zero All",CHARSET);	XtSetArg(args[n],XmNlabelString,labels); n++;	XtSetArg(args[n],XmNleftAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNleftOffset,2); n++;	XtSetArg(args[n],XmNrightAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNrightOffset,2); n++;	XtSetArg(args[n],XmNtopAttachment,XmATTACH_WIDGET); n++;	XtSetArg(args[n],XmNtopWidget,toggleb); n++;	XtSetArg(args[n],XmNtopOffset,10); n++;	pushb = XmCreatePushButtonGadget(formo,"",args,n);	XtManageChild(pushb);	XtAddCallback(	(Widget) pushb,			XmNactivateCallback,			(XtCallbackProc) zeroAllCB,			(XtPointer) NULL);	n = 0;	XtSetArg(args[n],XmNlabelType,XmSTRING); n++;	labels = XmStringCreateLtoR("Quit",CHARSET);	XtSetArg(args[n],XmNlabelString,labels); n++;	XtSetArg(args[n],XmNleftAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNleftOffset,2); n++;	XtSetArg(args[n],XmNrightAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNrightOffset,2); n++;	XtSetArg(args[n],XmNbottomAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNbottomOffset,2); n++;	pushb = XmCreatePushButtonGadget(formo,"",args,n);	XtManageChild(pushb);	XtAddCallback(	(Widget) pushb,			XmNactivateCallback,			(XtCallbackProc) quitCB,			(XtPointer) NULL);	/* allocate space for complex f and g */	fComplex = (CSamples*)malloc(sizeof(CSamples));	gComplex = (CSamples*)malloc(sizeof(CSamples));		/* create complex f */	n = 0;	XtSetArg(args[n],XmNrightAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNrightOffset,2); n++;	XtSetArg(args[n],XmNleftAttachment,XmATTACH_WIDGET); n++;	XtSetArg(args[n],XmNleftWidget,formo); n++;	XtSetArg(args[n],XmNleftOffset,5); n++;	XtSetArg(args[n],XmNtopAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNtopOffset,2); n++;	XtSetArg(args[n],XmNbottomAttachment,XmATTACH_POSITION); n++;	XtSetArg(args[n],XmNbottomPosition,50); n++;	frame = XmCreateFrame(formw,"",args,n);	XtManageChild(frame);	n = 0;	form = XmCreateForm(frame,"",args,n);	XtManageChild(form);	n = 0;	XtSetArg(args[n],XmNlabelType,XmSTRING); n++;	labels = XmStringCreateLtoR("f(x)",CHARSET);	XtSetArg(args[n],XmNlabelString,labels); n++;	XtSetArg(args[n],XmNtopAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNtopOffset,2); n++;	XtSetArg(args[n],XmNleftAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNleftOffset,2); n++;	XtSetArg(args[n],XmNrightAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNrightOffset,2); n++;	label = XmCreateLabelGadget(form,"label",args,n);	XtManageChild(label);	fComplex->r = fReal = samplesCreate(form,"Real",editDone);	fComplex->i = fImag = samplesCreate(form,"Imaginary",editDone);	n = 0;	XtSetArg(args[n],XmNtopAttachment,XmATTACH_WIDGET); n++;	XtSetArg(args[n],XmNtopWidget,label); n++;	XtSetArg(args[n],XmNleftAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNleftOffset,2); n++;	XtSetArg(args[n],XmNrightAttachment,XmATTACH_POSITION); n++;	XtSetArg(args[n],XmNrightPosition,50); n++;	XtSetArg(args[n],XmNbottomAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNbottomOffset,2); n++;	XtSetValues(fReal->frame,args,n);	n = 0;	XtSetArg(args[n],XmNtopAttachment,XmATTACH_WIDGET); n++;	XtSetArg(args[n],XmNtopWidget,label); n++;	XtSetArg(args[n],XmNleftAttachment,XmATTACH_POSITION); n++;	XtSetArg(args[n],XmNleftPosition,50); n++;	XtSetArg(args[n],XmNrightAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNrightOffset,2); n++;	XtSetArg(args[n],XmNbottomAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNbottomOffset,2); n++;	XtSetValues(fImag->frame,args,n);		/* create complex g */	n = 0;	XtSetArg(args[n],XmNrightAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNrightOffset,2); n++;	XtSetArg(args[n],XmNleftAttachment,XmATTACH_WIDGET); n++;	XtSetArg(args[n],XmNleftWidget,formo); n++;	XtSetArg(args[n],XmNleftOffset,5); n++;	XtSetArg(args[n],XmNbottomAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNbottomOffset,2); n++;	XtSetArg(args[n],XmNtopAttachment,XmATTACH_POSITION); n++;	XtSetArg(args[n],XmNtopPosition,50); n++;	frame = XmCreateFrame(formw,"",args,n);	XtManageChild(frame);	n = 0;	form = XmCreateForm(frame,"",args,n);	XtManageChild(form);	n = 0;	XtSetArg(args[n],XmNlabelType,XmSTRING); n++;	labels = XmStringCreateLtoR("F(k)",CHARSET);	XtSetArg(args[n],XmNlabelString,labels); n++;	XtSetArg(args[n],XmNtopAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNtopOffset,2); n++;	XtSetArg(args[n],XmNleftAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNleftOffset,2); n++;	XtSetArg(args[n],XmNrightAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNrightOffset,2); n++;	label = XmCreateLabelGadget(form,"",args,n);	XtManageChild(label);	gComplex->r = gReal = samplesCreate(form,"Real",editDone);	gComplex->i = gImag = samplesCreate(form,"Imaginary",editDone);	n = 0;	XtSetArg(args[n],XmNtopAttachment,XmATTACH_WIDGET); n++;	XtSetArg(args[n],XmNtopWidget,label); n++;	XtSetArg(args[n],XmNleftAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNleftOffset,2); n++;	XtSetArg(args[n],XmNrightAttachment,XmATTACH_POSITION); n++;	XtSetArg(args[n],XmNrightPosition,50); n++;	XtSetArg(args[n],XmNbottomAttachment,XmATTACH_FORM); n++;	XtSetArg(args[n],XmNbottomOffset,2); n++;	XtSetValues(gReal->frame,args,n);	n = 0;	XtSetArg(args[n],XmNtopAttachment,XmATTACH_WIDGET); n++;	XtSetArg(args[n],XmNtopWidget,label); n++;	XtSetArg(args[n],XmNleftAttachment,XmATTACH_POSITION); n++;	XtSetArg(args[n],XmNleftPosition,50); n++;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -