2016-03-24 6 views
2

getSampleRate()ヘルパー関数を使用してナイキスト限界を計算し、それを一時的なローカル変数に代入しています。ナイキスト周波数制限 - ナイキスト限界以下の高調波を混合する方法

ナイキスト限度を下回る周波数の高調波のみがミックスに含まれるように、高調波をミックスするクラスの部分を更新する必要があります。おそらくgetFrequency()はどの周波数に設定されているのかを調べますが、それ以降はその周波数だけをどうやって組み込むのかまだ分かりません。おそらくifステートメント。事前に

おかげで、私は特にC++オーディオ

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

ローパスフィルタが必要ですか? – Brad

答えて

2

あなたがSine::getFrequency()で、個々の高調波の周波数へのアクセス権を持っていることを述べているので、あなたは、単に蓄積生成された信号からそれらを除外するために必要な、プログラミングに新しいですsum中:あなたも、すぐにはあなたが高調波を格納しているので、以下nyquistないものを見つけると、さらに高調波の発生を停止でき

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

注意増加する次数:

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