Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z wyliczeniem DCT

Ostatnio zmodyfikowano 2009-10-05 19:54
Autor Wiadomość
maciekbyrwa
Temat założony przez niniejszego użytkownika
Problem z wyliczeniem DCT
» 2009-10-04 12:31:18
Witam

Mam problem z wyliczeniem DCT (dyskretnej transformaty kosinusowej).

Na stronie http://cnx.org/content/m13173/latest/ znalazłem wzór wraz z przykładową macierzą oraz wyliczonymi dla niej współczynnikami DCT.

Mój kod wylicza poprawnie tylko element [0][0] i nie wiem gdzie popełniam błąd.
C/C++
//-------------------------------------------
int u, v, x, y;
float suma, wynik, wu, wv;
const pi = 3.141592653589793;

for( u = 0; u < 8; u++ )
{
    for( v = 0; v < 8; v++ )
    {
        suma = 0;
       
        if( u == 0 ) wu = 0.353553390593274; // 1/sqrt(8)
       
        if( u != 0 ) wu = 0.5; // sqrt(2/8)
       
        if( v == 0 ) wv = 0.353553390593274;
       
        if( v != 0 ) wv = 0.5;
       
        for( x = 0; x < 8; x++ )
        {
            for( y = 0; y < 8; y++ )
            {
                suma = suma +( StringGrid1->Cells[ x ][ y ] * cos(( u *(( 2 * x ) + 1 ) * pi ) / 16 ) * cos(( v *(( 2 * y ) + 1 ) * pi ) / 16 ) );
            }
        }
        wynik = RoundTo( wu * wv * suma, 0 );
        StringGrid2->Cells[ u ][ v ] = wynik;
    }
}
//-----------------------------------------------
Ps.
Piszę w Borland C++ Builder. (StringGrid1 to tablica wejściowa)
P-10626
DejaVu
» 2009-10-05 18:33:33
Możliwe błędy:
1) źle przepisany algorytm
2) odwrotne indeksowanie tablicy x,y => y,x
3) sin/cos przyjmuje radiany, a wzór wyrażony jest w stopniach
P-10649
maciekbyrwa
Temat założony przez niniejszego użytkownika
» 2009-10-05 19:54:26
>Możliwe błędy:
>1) źle przepisany algorytm

Algorytm napisałem sam na podstawie znalezionego wzoru.
Wzór ten znalazłem także w 3 książkach, a więc raczej jest dobry.
W linku który podałem jest podana wyliczona macierz - sprawdzałem w Matlabie i dostaję taki sam wynik jak na stronie.

>2) odwrotne indeksowanie tablicy x,y => y,x
Sprawdzałem - otrzymuje się takie same liczby tylko w innych miejscach macierzy.

>3) sin/cos przyjmuje radiany, a wzór wyrażony jest w stopniach
To sprawdzę, ale co dziwne element o współrzędnych [0,0] jest wyliczany prawidłowo
P-10655
« 1 »
  Strona 1 z 1