Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите люди!
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
BYY
sad.gif У меня такая проблема надо написать программу на Delphy DCT(Compute two-dimensional discrete cosine transform) главное небыстрое преобразование! Пытался найти ничиго так и не получилось везде одно и тоже выдает быстрое косинусное преобразованиеsad.gif. Может кто работал или знает ссылки по этой теме поготи(лучше на русском)! Или выложите текст программы хоть что я буду сильно благодарен!
_pv
не то чтобы на delphi, но там и так все понятно
Код
#include <math.h>

const double PI=3.1415926535897932384626433832795;

#define DCTSIZE 16

double C[DCTSIZE][DCTSIZE];

void InitDCT(){
    int i,j;
    for (i=0;i<DCTSIZE;++i){
        for (j=0;j<DCTSIZE;++j){
            C[i][j]=cos((double) ( (double) ( (double)(2*i+1)*(double)j*PI)/(double)(2.0*DCTSIZE)));
        }
    }
}

inline double L(int i){
    if (i==0) return sqrt(1.0/DCTSIZE);
    return sqrt(2.0/DCTSIZE);
}

void DCT(double inbuf[DCTSIZE][DCTSIZE],double outbuf[DCTSIZE][DCTSIZE]){
    for (int u=0;u<DCTSIZE;++u){
        for (int v=0;v<DCTSIZE;++v){
            outbuf[u][v]=0.0;
            for (int i=0;i<DCTSIZE;++i){
                for (int j=0;j<DCTSIZE;++j){
                    outbuf[u][v]+=C[i][u]*C[j][v]*inbuf[i][j];
                }
            }
            outbuf[u][v]*=L(u);
            outbuf[u][v]*=L(v);
        }
    }
}

void IDCT(double inbuf[DCTSIZE][DCTSIZE],double outbuf[DCTSIZE][DCTSIZE]){
    for (int i=0;i<DCTSIZE;++i){
        for (int j=0;j<DCTSIZE;++j){
            outbuf[i][j]=0.0;
            for (int u=0;u<DCTSIZE;++u){
                for (int v=0;v<DCTSIZE;++v){
                    outbuf[i][j]+=L(u)*L(v)*C[i][u]*C[j][v]*inbuf[u][v];
                }
            }
        }
    }
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.