Discrete cosine transform Diskret kosinus o'zgarishi (dct) turli chastotalarda


Download 94.91 Kb.
Pdf ko'rish
Sana11.11.2021
Hajmi94.91 Kb.


Discrete cosine transform 

 

Diskret kosinus o'zgarishi (DCT) turli chastotalarda 



tebranuvchi kosinus funktsiyalari yig'indisi nuqtai nazaridan 

ma'lumotlar nuqtalarining cheklangan ketma-ketligini 

ifodalaydi. 1972 yilda Nosir Ahmad tomonidan taklif qilingan 

DCT signallarni qayta ishlash va ma'lumotlarni siqishda keng 

qo'llaniladigan transformatsiya usuli hisoblanadi. U raqamli 

tasvirlar (masalan, JPEG va HEIF kabi, kichik yuqori chastotali 

komponentlar tashlab yuborilishi mumkin), raqamli video 

(MPEG va H.26x kabi), raqamli audio (Dolby Digital, MP3 

kabi) kabi koʻpgina raqamli axborot vositalarida qoʻllaniladi. 

va AAC), raqamli televidenie (SDTV, HDTV va VOD kabi), 

raqamli radio (AAC+ va DAB+ kabi) va nutqni kodlash (AAC-

LD, Siren va Opus kabi). DCTlar, shuningdek, raqamli 

signallarni qayta ishlash, telekommunikatsiya qurilmalari, 

tarmoq o'tkazish qobiliyatini kamaytirish va qisman 

differentsial tenglamalarni raqamli hal qilish uchun spektral 

usullar kabi ko'plab boshqa ilovalar uchun ham muhimdir. 

Siqilish uchun sinus funksiyasidan ko'ra kosinusdan 

foydalanish juda muhim, chunki (quyida tasvirlanganidek) 

odatdagi signalni taxmin qilish uchun kamroq kosinus 

funksiyalari kerak bo'ladi, differensial tenglamalar uchun esa 

kosinuslar chegara shartlarining ma'lum bir tanlovini 

ifodalaydi. Xususan, DCT bu Furye bilan bog'liq bo'lgan 

diskret Furye transformatsiyasiga (DFT) o'xshash, lekin faqat 

haqiqiy raqamlardan foydalanadi. DCTlar odatda davriy va 




nosimmetrik ravishda kengaytirilgan ketma-ketlikning Furye 

seriyali koeffitsientlari bilan bog'liq, DFTlar esa faqat davriy 

ravishda kengaytirilgan ketma-ketliklarning Furye seriyasi 

koeffitsientlari bilan bog'liq. DCTlar uzunligi taxminan ikki 

baravar bo'lgan DFT larga ekvivalent bo'lib, ular teng 

simmetriyaga ega bo'lgan haqiqiy ma'lumotlarda ishlaydi 

(chunki real va hatto funktsiyaning Furye o'zgarishi haqiqiy 

va juftdir), holbuki ba'zi variantlarda kirish va/yoki chiqish 

ma'lumotlari yarmiga siljiydi. namuna. Sakkizta standart DCT 

varianti mavjud, ulardan to'rttasi keng tarqalgan. 

Blokni siqish deb ham ataladigan DCT siqish, diskret DCT 

bloklari to'plamidagi ma'lumotlarni siqadi. DCT bloklari bir 

qancha oʻlchamlarga ega boʻlishi mumkin, jumladan, standart 

DCT uchun 8x8 piksel va 4x4 va 32x32 piksel oraligʻida turli 

xil butun DCT oʻlchamlari. DCT kuchli "energiya siqish" 

xususiyatiga ega , yuqori ma'lumotlarni siqish nisbatlarida 

yuqori sifatga erisha oladi. Biroq, og'ir DCT siqish 

qo'llanilganda blokli siqish artefaktlari paydo bo'lishi 

mumkin. DCT signalni qayta ishlashda eng ko'p 

qo'llaniladigan transformatsiya texnikasi va hozirgacha 

ma'lumotlarni siqishda eng ko'p qo'llaniladigan chiziqli 

transformatsiyadir. Siqilmagan raqamli media, shuningdek, 

yo'qotishsiz siqish uchun amaliy darajada yuqori xotira va 

tarmoqli kengligi talablari mavjud edi, bu yuqori samarali 

DCT yo'qotuvchi siqish texnikasi  tufayli sezilarli darajada 

kamaytirildi, ma'lumotlarni siqish nisbati uchun 8:1 dan 14:1 

gacha. yaqin studiya sifati, maqbul sifatli kontent uchun 100:1 



gacha DCT siqish standartlari raqamli tasvirlar, raqamli 

fotosuratlar, raqamli video, oqimli media, raqamli 

televideniya, oqimli televidenie, talab boʻyicha video kabi 

raqamli media texnologiyalarida qoʻllaniladi. (VOD), raqamli 

kino, yuqori aniqlikdagi video (HD video) va yuqori 

aniqlikdagi televizor (HDTV). 

DCT va xususan DCT-II ko'pincha signal va tasvirni qayta 

ishlashda, ayniqsa yo'qotadigan siqishni uchun ishlatiladi, 

chunki u kuchli "energiya siqilish" xususiyatiga ega odatdagi 

ilovalarda, signalning aksariyat qismi ma'lumotlar odatda 

DCT ning bir nechta past chastotali komponentlarida 

to'planadi. Kuchli korrelyatsiya qilingan Markov jarayonlari 

uchun  DCT Karxunen-Lev konvertatsiyasining siqilish 

samaradorligiga yaqinlashishi mumkin (bu dekorrelyatsiya 

ma'nosida optimaldir). Quyida tushuntirilganidek, bu kosinus 

funktsiyalarida yashirin bo'lgan chegara shartlaridan kelib 

chiqadi. DCTlar qisman differensial tenglamalarni spektral 

usullar bilan yechishda ham keng qo'llaniladi, bunda DCT ning 

turli xil variantlari massivning ikki uchida bir oz farq qiluvchi 

juft/toq chegara shartlariga to'g'ri keladi. DCTlar Chebishev 

polinomlari bilan ham chambarchas bog'liq va tezkor DCT 

algoritmlari (quyida) Chebishev ko'phadlari qatori bo'yicha 

ixtiyoriy funktsiyalarni Chebishevga yaqinlashtirishda, 

masalan, Klenshou-Kertis kvadraturasida qo'llaniladi. DCT 

multimedia telekommunikatsiya qurilmalari uchun kodlash 

standartidir. U bit tezligini pasaytirish va tarmoq o'tkazish 

qobiliyatidan foydalanishni kamaytirish uchun keng 



qo'llaniladi. DCT siqish raqamli signallar uchun zarur bo'lgan 

xotira miqdori va tarmoqli kengligini sezilarli darajada 

kamaytiradi. 

// Java program to perform discrete cosine transform 

 

import java.util.*; 



 

class GFG 

  public static int n = 8,m = 8; 



  public static double pi = 3.142857; 

  // Function to find discrete cosine transform and print it 

  static strictfp void dctTransform(int matrix[][]) 

  { 


    int i, j, k, l; 

 

    // dct will store the discrete cosine transform 



    double[][] dct = new double[m][n]; 

 

    double ci, cj, dct1, sum; 



 

    for (i = 0; i < m; i++) 

    { 

      for (j = 0; j < n; j++) 



      { 

        // ci and cj depends on frequency as well as 

        // number of row and columns of specified matrix 

        if (i == 0) 

          ci = 1 / Math.sqrt(m); 

        else 

          ci = Math.sqrt(2) / Math.sqrt(m); 

           

        if (j == 0) 

          cj = 1 / Math.sqrt(n); 

        else 

          cj = Math.sqrt(2) / Math.sqrt(n); 

 

        // sum will temporarily store the sum of 




        // cosine signals 

        sum = 0; 

        for (k = 0; k < m; k++) 

        { 

          for (l = 0; l < n; l++) 

          { 

            dct1 = matrix[k][l] * 

              Math.cos((2 * k + 1) * i * pi / (2 * m)) * 

              Math.cos((2 * l + 1) * j * pi / (2 * n)); 

            sum = sum + dct1; 

          } 

        } 

        dct[i][j] = ci * cj * sum; 

      } 


    } 

 

    for (i = 0; i < m; i++) 



    { 

      for (j = 0; j < n; j++) 

        System.out.printf("%f\t", dct[i][j]); 

      System.out.println(); 

    } 

  } 


   

  // driver program 

  public static void main (String[] args) 

  { 


    int matrix[][] = { { 255, 255, 255, 255, 255, 255, 255, 255 }, 

            { 255, 255, 255, 255, 255, 255, 255, 255 }, 

            { 255, 255, 255, 255, 255, 255, 255, 255 }, 

            { 255, 255, 255, 255, 255, 255, 255, 255 }, 

            { 255, 255, 255, 255, 255, 255, 255, 255 }, 

            { 255, 255, 255, 255, 255, 255, 255, 255 }, 

            { 255, 255, 255, 255, 255, 255, 255, 255 }, 

            { 255, 255, 255, 255, 255, 255, 255, 255 } }; 

    dctTransform(matrix); 

  } 




 

Download 94.91 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2020
ma'muriyatiga murojaat qiling