2016-03-24 19 views
2

Ich benutze die Helferfunktion getSampleRate(), um das Nyquist-Limit auszuarbeiten und es einer temporären lokalen Variablen zuzuordnen.Nyquist Frequency Restriction - Wie man nur Obertöne mischt, die unterhalb des Nyqvist-Limits liegen

Ich muss jetzt den Teil der Klasse aktualisieren, der die Harmonischen miteinander mischt, so dass nur Harmonische mit Frequenzen unterhalb der Nyquist-Grenze in der Mischung enthalten sind. Angeblich wird getFrequency() herausfinden, auf welcher Frequenz es eingestellt ist, aber danach bin ich mir immer noch nicht sicher, wie ich nur diese Frequenzen einschließe. Eine if-Anweisung vielleicht.

Vielen Dank im Voraus, ich bin neu in die Programmierung, insbesondere C++ Audio-

class SawWave 
{ 
public: 
void reset() 
{ 

    for(int i=0; i<MAX_HARMONICS; i++) 
    { 
     harmonic[i].reset(); 

    } 
} 

void setFrequency(float frequency){ 

    for(int i=0; i < MAX_HARMONICS; i++) 
    { 
     harmonic[i].setFrequency(frequency * (i + 1)); 
    } 
} 

float tick() 
{ 
    float nyquist = getSampleRate() * 0.5; 
    float sum = 0; 
    int count; 


    for (count = 0; count < MAX_HARMONICS; count++) 
    { 
     sum += (harmonic[count].tick()) * 1/(count + 1); 
    } 
    return sum; 
} 

protected: 

Sine harmonic[MAX_HARMONICS]; 
}; 
+0

Sie möchten einen Tiefpassfilter? – Brad

Antwort

2

Da Sie erwähnt, dass Sie Zugriff auf die einzelnen Harmonischen der Frequenzen mit Sine::getFrequency() haben, müssen Sie sie einfach aus dem erzeugten Signal auszuschließen akkumulierte in sum:

for (count = 0; count < MAX_HARMONICS; count++) 
{ 
    if (harmonic[count].getFrequency() < nyquist) 
    { 
     sum += (harmonic[count].tick()) * 1/(count + 1); 
    } 
} 

Beachten Sie, dass Sie auch weitere Harmonischen stoppen zu erzeugen könnte, sobald Sie einen finden, der nicht weniger als nyquist ist, da Sie die Harmonischen Speicherung in Reihenfolge der steigenden Frequenz:

for (count = 0; count < MAX_HARMONICS; count++) 
{ 
    if (harmonic[count].getFrequency() < nyquist) 
    { 
     sum += (harmonic[count].tick()) * 1/(count + 1); 
    } 
    else 
    { 
     break; 
    } 
}