Gå til innhold

[Løst] Sinus generator - hva er feilen?


Anbefalte innlegg

Fikk denne koden av en kollega

void Mash::FillSin(double *pBuf, uint16_t nSamples)
{
    double fs = (double)1000000.0 / (double)getNSecPerSample(SAMPLE_PERIOD_2_MS);
    const double fSin = 31.25;
    double dTmp;
    int i;
    double PhaseInc = 2.0 * MYPI * fSin/fs;

    dTmp = sin(MYPI / 2.0);
    for (i = 0; i < nSamples; i++)
    {
        pBuf[i] = m_amp * sin(m_Phase);
        m_Phase += PhaseInc;
    }
}

Det er ikke sinus som genereres. Noen som kan hjelpe meg å se feilen?

 

Lenke til kommentar
Videoannonse
Annonse

Mangle litt info der, ja. m_amp er 0.25

De første verdiene som genereres er

0

1.0044270185236355e-014
-2.0088540370472709e-014
1.5921955840507062e-014
-4.0177080740945419e-014
Veldig små tall. De øker i loopen, men hvert punkt har forskjellig polaritet. Det er veldig langt fra sinus.
PhaseInc = 392.69908169872411
Problemet er nok at dette er et alt for stort tall. Dele på 1000 ser ut til å fungere.
Lurer på hva vedkommende har tenkt på her.
Endret av Hårek
Lenke til kommentar

Lurer på hva vedkommende har tenkt på her.

Alle konstantene og merkelige variabelnavn hinter for meg at vedkomne kanskje ikke helt hadde hodet med seg i det hele tatt.

 

Hvorfor er fsin 31.25? Hvorfor deles 1e6 på hva nå enn getNSecPerSample gjør? Jeg tror jeg bare hadde skrevet det om. Det er ikke som at en sinusgenerator er vanskelig å skrive.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...