diskrete Cosinus Transformation DCTII

OP #5278532
Lesenswert?
• ▲
▼
Hallo Forengemeinde.

ich hab ein Problem an dem ich jetzt schon ewig hänge und einfach nicht 
weiterkomme.

Und zwar geht es um eine Hausübung.
Aufgabenstellung ist eine diskrete Cosinustansformation zu schreiben.
zuerst war das ganze in C gefragt und jetzt mit der C++ syntax 
allerdings nicht objektorientiert.

Soweit so gut. Ich hab das ganze programmiert mit Codeblocks compiliert 
aber ich bekomme andere Werte. sie sind zwar ähnlich von der Struktur, 
aber eben falsch...

könnte mir bitte jemand kurz die zwei Funktionen vergleichen und mir auf 
die Sprünge helfen? ich hab die beiden Projekte noch einmal komplett im 
Anhang beigefügt für den Fall das es Fragen gibt.

hier der funktionierende Code
1
 #include "dct.h"
2
#include <stdlib.h>
3
#include <stdio.h>
4
#include <math.h>
5

6
// Function to compute the discrete cosine transform DCT-II of a
7
// dataseries and store the result in another dataseries of equal size
8
void dct_ii (dataseries p, dataseries q) {
9
  // Copy dataseries size to time saver, check for equal sizes
10
  int n = p.size;
11
  if (q.size != n) {
12
    fprintf (stderr, "dct_ii: dataseries sizes don't match, exiting\n");
13
    exit (-1);
14
  }
15
  // Perform actual DCT-II
16
  const double pi = 3.1415926535897932;
17
  for (int i=0; i<n; ++i) {
18
    q.value[i] = 0.0;
19
    for (int j=0; j<n; ++j) {
20
      q.value[i] = q.value[i] + cos (pi / n * i * (j + 0.5)) * p.value[j];
21
    }
22
  }
23
  return;
24
}


und hier der mit falschen Ergebnissen.
1
 #include <iostream>
2
#include <vector>
3
#include <cstdio>
4
#include <math.h>
5

6
using namespace std;
7

8
void dct(vector<double> &eingabe, vector<double> &ausgabe) // Berechnung der Cosinustransformation
9
{
10
  int n = eingabe.size();
11
  if (ausgabe.size() != n) {
12
    cout<<"dct_ii: dataseries sizes don't match, exiting"<<endl;
13
    return;
14
  }
15
  // Perform actual DCT-II
16
  const double pi = 3.1415926535897932;
17
  for (int i=0; i<n; ++i) {
18
    ausgabe[i] = 0.0;
19
    for (int j=0; j<n; ++j) {
20
      ausgabe[i] = ausgabe[i] + cos (pi / n * i * (j + 0.5)) * eingabe[j];
21

22
    }
23
  }
24
  return;
25
}

Danke im Vorraus!
Marian
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.