Hollosi Information eXchange /HIX/
HIX CODER 1012
Copyright (C) HIX
2000-11-23
Új cikk beküldése (a cikk tartalma az író felelőssége)
Megrendelés Lemondás
1 Ki latott mar ilyet. (Clipper order) (mind)  53 sor     (cikkei)
2 Turbo Pascal !!! (mind)  13 sor     (cikkei)
3 Spektrum (mind)  170 sor     (cikkei)
4 Fourier (mind)  17 sor     (cikkei)

+ - Ki latott mar ilyet. (Clipper order) (mind) VÁLASZ  Feladó: (cikkei)

Hello

Egy felettebb kulonos esetem van, es nem nagyon tudok vele mit
kezdeni. Tudom hogy tobb latens clipper programozo is elofordul itt,
hat megkerdem, van-e aki mar "gyogyitott" ilyen bajt :

A progi Clipper 5.2e -ben irodott.

Kb 20 munkaterulete van.
Ezek kozul az egyiken van egy olyan DBF megnyitva, aminek 3
indextablaja van.
Egy KOD szerinti indexu, egy NEV szerinti indexu, es egy olyan, ami
NEV szerinti indexu, de FOR segitsegevel egy logikai mezo alapjan
szurve van.

A progi egy helyen megnyitja ezt az allomanyt
USE Partner
SET INDEX TO partn, partnev, partnsz

sorok segitsegevel.
Ezutan a progiban van egy DBEDIT ,amiben ezt az allomanyt kilistazza.
Mielott a DBEDIT-be lepne a progi, az index ordert
SET ORDER TO 3-mal a szurt index tablara allitom.
A DBEDIT belso fuggvenyeben viszont szeretnem, ha F9 megnyomasara
valtani lehetne a szurt, es a nem szurt lista kozott.

Ez a lenyeget kiragadva a kovetkezokeppen nez ki.
  If laskar=-8           //F9
      TONE(440,1)
      If indexord()=2
         TONE(880,2)
         set order to 3   //szukitett lista
      EndIF
      If indexord()=3
         set order to 2  // teljes lista
      EndIF
   return 1              // Kulonben nem csinalunk semmit
   EndIF

Amibe lassan beleorulok, hogy az elso megnyomasra megtortenik a valtas
a teljes nevsor szerinti indexre, de ha megegyszer megnyomom az F9-et,
akkor egyszeruen _nem_ valt vissza a 3-masra !!!!!!!
A TONE() mar azert van benne, hogy teszteljem, hogy tenyleg belep-e.
Es tenyleg belep, mert csipog, de az index _akkor_ sem valtozik meg,
hanem megmarad a 2. orderen. Mintha a set order to 3 vegre sem
hajtodna.

Nahat erre varrjon gombot valaki, ha tud !!

-- 
Udv:
    Csiszar L.                        mailto:
    www.stadium.hu/szt
+ - Turbo Pascal !!! (mind) VÁLASZ  Feladó: (cikkei)

Sziasztok !
Nagyon tanacstalan vagyok az eretsegi dolgozatommal kapcsolatban.  Szeretnem
megkerdezni, hogy turbo pascalban mit lenne erdemes kesziteni. En logikai
jatekprogramokra gondoltam ahol nem lenyeg a grafika, de sajnos nincsen
semilyen forraskodom ahonnan megnezhetnem hogyan is kell az ilyet csinalni.
Ha tudtok cimet ahol forraskodokat letolthetnek vagy ha van valami otletetek
mit lehetne meg turbo pascalban jol megcsinalni es hozza meg ha dokumen-
tum is van az orult jo lenne.
Kerlek segitsetek ha tudtok! Nagyon sokat jelentene.

Elore is koszonom !

(a levelet az e-mailemre is kuldhetitek es a coder listara is)
+ - Spektrum (mind) VÁLASZ  Feladó: (cikkei)

> digitalizalt jelsorozat pl. hang, es szeretnem megtudni a folytonos
 > spektrumat, de nem csak a felharmonikusokat, hanem az egeszet, illetve
 > adott tartomanyon belul, de folytonosan. Maga az adathalmaz pl egy
 > egydimenzios tombben van tarolva, es mondjuk -127..127 tartomanyba
 > esnek. Tulajdonkeppen egy eljarasra lennek kivancsi, amivel konkret
 > adatok (mert adatok) alapjan kiszamithato lenne, hogy egy adott
 > frekvencia milyen mertekben van jelen az adott hangban. Valami olyasmi
 > kepletet vagy prg reszletet varok, mint modjuk a Fourier-sorba fejtes.

Folyamatos spektrumot nem kaphatsz, csak annak diszkret pontjait.
Fourier sorba fejteni az adathalmazt igen egyszeru, a Fourier sor
definicioja alapjan:

a(n) = Summa-i-re (X(i) * cos( omega * n ), ahol omega 2*PI*(1/I),
ahol I a pontok szama X(i) pedig az i-ik minta.
b(n) az ugyanez, csak sin()-al.
Az n 0 es I/2 kozott van.

Mindazonaltal, a fenti modszer kisse lassu, mert O(n^2) idot igenyel.
A gyors Fourier transzformacio vagy FFT azt a tenyt hasznalja ki, hogy
a sin/cos periodikus, es ezert egy csomo olyan eset van, ahol a
sin( omega * n ) ugyanazt az erteket adja bar omega es n mas. Ennek
megfeleloen a szorzas es osszeadas helyett lehet eloszor osszegezni
az X(i) -ket, majd az osszeget egyszer szorozni. Vannak benne egyeb
apro trukkok is, a lenyeg, hogy a vegen O( n * log n ) igenyu, vagyis
sokkal gyorsabb, mint a rendes FT.

Egy regi forrasbol kikapirgalt C rutint mellekelek, meg nem ANSI C,
de konnyen atteheto. Ha GNU C-t hasznalsz, akkor az egesz sokkal
elegansabba teheto, mert ott a complex beepitett tipus, nem kell
kinlodni a strukturaval meg a komplex szorzas kifejtesevel meg
hasonlokkal.

Mielott azonban nekiesnel a dolognak, tisztaban kell lenned azzal,
hogy az a teny, hogy a mintaveteled csak egy veges idotartamra terjed
ki elrontja az eredmenyedet. A problema az, hogy ha az eredeti jelnek
volt olyan komponense, hogy a teljes mintaveteli ido nem egesz szamu
tobbszorose a komponens periodusidejenek, akkor a transzformacio vegen
minden frekvencian visszamarad egy ertek, ami valojaban az eredeti
jelben nem volt benne, de azzal, hogy a mintavetelt egy idotartomanyra
leszukitetted, belevitted. Ezt a dolgot el lehet kerulni ha egy
szurest vegzel a jelen, ami az elejet es a veget kicsit elmasszirozza.

Hogy milyen szurot hasznalsz, az attol fugg, hogy epp mit akarsz
csinalni. En mar elegge regen nem csinaltam ilyesmit, de ha emlekeim
nem csalnak, valamiert a Blackman - Harris szuro elegge tetszett
nekem, mert az energiaspektruma azt hiszem annak a legsimabb vagy
valami hasonlo.

Zoltan

----------------------- FFT ---------------------------------
#include <stdio.h>
#include <math.h>

#define	PI	3.141592654
#define	M	10		/* 2^M points you have			*/


typedef	struct	{

	double	re;		/* Real part				*/
	double	im;		/* Imaginary part			*/

        } CPX;

CPX	twiddle[ 1 << M ];	/* Twiddle factors			*/
CPX	data[ 1 << M ];		/* Original data and result		*/


/*
*
*	Fast Fourier transform - good old radix-2 algorithm
*
*/

FFT( data, inverse )

CPX	*data;		/* Array to transform				*/
int	inverse;	/* True if inverse transformation		*/

{

int	i, j, k, l, n1, n2, i1, i2;
CPX	t, tw;
int	N;

	N = 1 << M;
	n2 = N;

	for ( i = 1 ; i <= M ; i++ ) {

		n1 = n2;
		n2 >>= 1;
		i1 = 0;
		i2 = N / n1;

		for ( j = 0 ; j < n2 ; j++ ) {

			tw.re = twiddle[ i1 ].re;
			tw.im = inverse ? twiddle[ i1 ].im : -twiddle[ i1 ].im;
			i1 += i2;

			for ( k = j ; k < N ; k += n1 ) {

				l = k + n2;

				t.re = data[ k ].re - data[ l ].re;
				t.im = data[ k ].im - data[ l ].im;

				data[ k ].re += data[ l ].re;
				data[ k ].im += data[ l ].im;
				data[ l ].re  = t.re * tw.re + t.im * tw.im;
				data[ l ].im  = t.im * tw.re - t.re * tw.im;
			}
		}
	}

	if ( inverse ) {

		for ( i = 0 ; i < N ; i++ ) {

			data[ i ].re /= N;
			data[ i ].im /= N;
		}
	}


	for ( j = 0, i = 0 ; i < N-1 ; i++ ) {

		if ( i < j ) {

			t.re = data[ j ].re;
			t.im = data[ j ].im;

			data[ j ].re = data[ i ].re;
			data[ j ].im = data[ i ].im;

			data[ i ].re = t.re;
			data[ i ].im = t.im;
		}

		for ( k = N / 2 ; k <= j ; k >>= 1 )

			j -= k;

		j += k;
	}
}

/*
*
*	Fills the sin/cos table
*
*/

FillTable()

{

int	i;
int	N;

	for ( i = 0, N = ( 1 << M ) ; i < N ; i++ ) {

		twiddle[ i ].im = sin( 2 * PI / N * i );
		twiddle[ i ].re = cos( 2 * PI / N * i );
	}
}
------------------------- FFT vege ---------------------------
+ - Fourier (mind) VÁLASZ  Feladó: (cikkei)

Udv!


> Felado :  [Hungary]
> Temakor: Re.:Hang spektruma ( 12 sor )
> Én is hasonló problémával küzdök. Tudom is a köönyv címét, amiben
> szépen benne van a téma kidolgozva, egyszer régen olvastam, de most
> nem tudom megszerezni, a könyvtárból is valaki ellopta. Akinek esetleg
> megvan, az segítsen!
> A könyv szerzője/címe: Székely Vladimir: Képkorrekció, hanganalízis,
> térszámítás PC-n

Pedig szerintem meg mindig lehet kapni. Azert nem merem most ajanlgatni,
mert dobozokban vannak a konyveim, es legalabb egy honap amig elokerulnek.
Ha addigr a sem oldodtak meg a problemaid, akkor irjal, megoldjuk.

Istvan

AGYKONTROLL ALLAT AUTO AZSIA BUDAPEST CODER DOSZ FELVIDEK FILM FILOZOFIA FORUM GURU HANG HIPHOP HIRDETES HIRMONDO HIXDVD HUDOM HUNGARY JATEK KEP KONYHA KONYV KORNYESZ KUKKER KULTURA LINUX MAGELLAN MAHAL MOBIL MOKA MOZAIK NARANCS NARANCS1 NY NYELV OTTHON OTTHONKA PARA RANDI REJTVENY SCM SPORT SZABAD SZALON TANC TIPP TUDOMANY UK UTAZAS UTLEVEL VITA WEBMESTER WINDOWS