Modified discrete cosine transform probleemi

Seuraa 
Viestejä45973
Liittynyt3.9.2015

http://en.wikipedia.org/wiki/Modified_discrete_cosine_transform

Tuollaista kokeilin laskeskella, mutta muunnoksen ja käänteismuunnoksen jälkeen tulos ei pysy enää samana.. Onko koodin kaavassa jokin virhe? Olen kyllä moneen kertaan lukenut läpi.

[code:3k5ahoe5]// Modified Discrete Cosine Transform v0.1

#include
#include
#include
#include

int main(void) {
const char str[] = "abbaKabba"; // data

int i, n, N = strlen(str)/2, mid = 0;
double *real = calloc(sizeof(double), N), pi_n = 3.14159265359 / N, tmp_l;

for (i = 0; i < 2*N; i++) {
mid += str[i];
printf("%i ", str[i]);
} mid /= i; printf("\n\nN = %i, mid = %i\n\n", N, mid);

// vähennetään datasta sen keskiarvo, ettei amplitudit kasva niin suuriksi

for (i = 0; i < N; i++) { // muunnos looppi
for (n = 0; n < 2*N; n++)
real[i] += (str[n] - mid)*cos(pi_n * (n + 0.5 + N/2) * (i + 0.5));
printf("\t%.3f\n", real[i]);
}

for (i = 0; i < 2*N; i++) { // käänteismuunnos looppi
for (tmp_l = n = 0; n < N; n++)
tmp_l += real[n] * cos(pi_n * (i + 0.5 + N/2) * (n + 0.5));
tmp_l = tmp_l / N + mid;

printf("%.3f => %X = %c\n", tmp_l, (char) round(tmp_l), (char) round(tmp_l));
}

free(real);
return 0;
}[/code:3k5ahoe5]

Laskimella kun laskin, niin samoja tuloksia tuli. Mutta en silti usko, että wikipediassa kaava olisi väärin. Mikäköhän mättää? DFT onnistui oikein.

Koittakaa laskea muunnos vaikka jonolle {-4, 6, -3, 3}.

X_0 = -3.827
X_1 = 9.239 (pyöristettyjä)

arvoiksi käänteismuunnoksesta tulee noin {-5, 5, 0, 0}.

:/

Kommentit (10)

Cargo
Seuraa 
Viestejä979
Liittynyt27.8.2007

waretat Matlabin tai Maplen! Niillä on paljon helpompi ohjelmoida noita matikkafunktioita, jos ei satu tykkäämään valmiista toiminnoista.
C++:lla saa kyllä helposti reaaliset fouriersarjat ja kaippa yhtä helposti kompleksisetkin!

Suosittelen kuitenkin odottaa kunnes _jone_ avaa sanaisan arkkunsa tässäkin ketjussa ja sanoo: "perseestä koko koodi!"

" sähkö (se sähkö, jota tuotetaan mm. voimalaitoksissa) ei ole energiaa "
- Vastaaja_s24fi

“Jos et ole kaksikymppisenä vihreä, sinulla ei ole sydäntä. Mutta jos et ole nelikymppisenä perussuomalainen, sinulla ei ole aivoja.”
- Cargo

Vierailija
Cargo
C++:lla saa kyllä helposti reaaliset fouriersarjat ja kaippa yhtä helposti kompleksisetkin!

Haluan käyttää nimenomaan C:tä, koska C++ en tässä yhteydessä rupea opettelemaan ja tarkoitus on kokeilla mm. kuvien jne pakkausta näillä menetelmillä.

DFT:n sain jo toimimaan..

Vierailija
Cargo
Suosittelen kuitenkin odottaa kunnes _jone_ avaa sanaisan arkkunsa tässäkin ketjussa ja sanoo: "perseestä koko koodi!"

Itse olet perseestä, ja olen päättänyt olla ottamatta kantaa ketjuihin, joissa noitten typerien mielipiteittesi kanssa esiinnyt. (Tämä siis oli ainut poikkeus, nyt tiedät.) Olet siis todella täysi nolla, ja minua alkaa yököttämään aina, kun vain näen edes vilauksenkin logostasi.

Vierailija

No ei noihin Sir Von Cargon viesteihin tarvitsisi niin filosofisesti puuttua, koska jokainen tiedämme, että Cargo on iskän ja äiskän pellavapäinen runkkaajapoika. Kotiintuloajat ja muutama tunti päivässä pam-pam-pum pelejä. Paskahousuhan sinä olet.

Eiköhän kuule olisi parempi, että lopettaisit kokonaan kirjoittelun, ja keskittyisit vain niihin pum-pum-pam peleihisi, karkkipäivääsi, sekä päiviin, joilloin saat iskältä ja äiskältä luvan hakea jäätelöä jäätelöautosta.

Jos Cargo ei saa joka-aamuista suklaamuroannostaan, Cargo on silloin koko päivän hyvin vihainen iskälle, äiskälle ja tiede.fi -foorumille. Mielestäni olisi tärkeää, että Cargon iskä ja äiskä panostaisivat enemmän pellavapäisen runkkaajapoikansa kaitsentaan.

-torstai

Seppo_Pietikainen
Seuraa 
Viestejä7615
Liittynyt18.10.2007
4smith4
Eikös Mathlab muuta ne matemaattiset kaavat C kielelle?

Se on Matlab, ja muuttaa, tietyin rajoituksin. Suosittelen tutustumista Octaveen, jos Matlabin hinta muodostaa esteen (Octave on Open Source, eika mielestani viela Matlabin tasolla kaikissa ominaisuuksissaan, mutta ei huono).

http://www.octave.org

--
Seppo P.
Kreationismi perustuu tietämättömyyteen, se sikiää tietämättömyydestä ja siitä sikiää tietämättömyyttä. Tietämättömyyden levittäminen on kreationismin elinehto ja tietämättömyydessä rypeminen on kreationistin luonnollinen elämisenmuoto

Vierailija
Because there are different numbers of inputs and outputs, at first glance it might seem that the MDCT should not be invertible. However, perfect invertibility is achieved by adding the overlapped IMDCTs of subsequent overlapping blocks, causing the errors to cancel and the original data to be retrieved; this technique is known as time-domain aliasing cancellation (TDAC).



it is designed to be performed on consecutive blocks of a larger dataset, where subsequent blocks are overlapped so that the last half of one block coincides with the first half of the next block.

Melko epäyllättävää että täytyy tehdä näin. Et voi tehdä funktiota joka mappaisi n reaalilukua n/2 reaaliluvuksi siten että voisit palauttaa n/2 reaaliluvuista uniikin n reaaliluvun sarjan. Sarjoja pitää siis overlapata.

Ja C on hieno kieli. Yhtä hyvin sillä onnistuu numeriikka kuin muillakin matalan tason kielillä. Ja etenkin kovan tason laskentaan C on melko ehdoton. Ellei halua viettää suurinta osaa aikaa odotellen kun matlabbi ruksuttaa.

Cargo
Seuraa 
Viestejä979
Liittynyt27.8.2007
torstai
.... samaa paskaa.........

-torstai

Nyt torstai alias _jone_ suosittelen sinua menemään Ale Pubiin tai vaikka Pispalan Pulteriin ja iskemään sieltä jonkun 50v kapakka ruusun! Sitten kun olet saanut pillua, niin voi tämä sinun jatkuva angstikin hellittää.......

Taitaa elämä pyöriä vähän liikaa koneitten ympärillä kun täytyy jatkuvasti olla suuna ja päänä nettipalstoilla.

Sillä välin kun pidät turpasi kiinni täällä, niin voit tarjota kahteen ulottuvuuteen upottamaasi moniulotteisuutta (???) joihinkin tiedelehtiin julkaistavaksi, ja mielellään joskus muulloin kuin aprillipäivänä.

" sähkö (se sähkö, jota tuotetaan mm. voimalaitoksissa) ei ole energiaa "
- Vastaaja_s24fi

“Jos et ole kaksikymppisenä vihreä, sinulla ei ole sydäntä. Mutta jos et ole nelikymppisenä perussuomalainen, sinulla ei ole aivoja.”
- Cargo

Vierailija

Eikös iskän ja äiskän pellavapäinen Cargo runkkaajapoika enää parempaa keksi. Järisyttävää alatyylin heittoa. Et osaa edes aukoa päätäsi. Olet ikään kuin kala kuivalla maalla, joka vain hädissään yrittää haukkoa happea ilmasta. Jos kaipaat hellyyttä, saat sitä käpertymällä iskän ja äiskän syliin, jolloin he antavat rakkautta pellavapäiselle runkkaajapojalleen.

Tukijoukkosikin ovat tästä syystä kaikonneet ja jättäneet sinut tiede.fi -foorumilla oman onnesi nojaan. Kukapa enää viitsisi olla samaa mieltä kanssasi, pellavapäisen runkkaajapojan kanssa. Eikö olisi jo aika luoda uusi nimimerkki, tai mieluummin ei kirjoitella lainkaan.

-torstai

Cargo
Seuraa 
Viestejä979
Liittynyt27.8.2007
torstai
Eikös iskän ja äiskän pellavapäinen Cargo runkkaajapoika enää parempaa keksi. Järisyttävää alatyylin heittoa. Et osaa edes aukoa päätäsi. Olet ikään kuin kala kuivalla maalla, joka vain hädissään yrittää haukkoa happea ilmasta. Jos kaipaat hellyyttä, saat sitä käpertymällä iskän ja äiskän syliin, jolloin he antavat rakkautta pellavapäiselle runkkaajapojalleen...... Kukapa enää viitsisi olla samaa mieltä kanssasi, pellavapäisen runkkaajapojan kanssa.

-torstai


No etpä sinäkään mikään vittuilun superlahjakkuus ole! Samoilla asioilla vatvominen kertoo älynpuutteesta....

" sähkö (se sähkö, jota tuotetaan mm. voimalaitoksissa) ei ole energiaa "
- Vastaaja_s24fi

“Jos et ole kaksikymppisenä vihreä, sinulla ei ole sydäntä. Mutta jos et ole nelikymppisenä perussuomalainen, sinulla ei ole aivoja.”
- Cargo

Uusimmat

Suosituimmat