2016-03-24 4 views
2

Я использую вспомогательную функцию getSampleRate(), чтобы выработать ограничение Найквиста и назначить его временной локальной переменной.Ограничение частоты Nyquist - как смешивать гармоники только ниже предела Nyqvist

Теперь я должен обновить часть класса, которая смешивает гармоники вместе, так что в микс включены только гармоники с частотами ниже предела Найквиста. Предположительно 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:

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

Обратите внимание, что вы можете также остановить дальнейшие генерации гармоник, как только вы найдете тот, который не менее nyquist, так как вы сохраняете гармоники в порядок увеличения частоты:

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

 Смежные вопросы

  • Нет связанных вопросов^_^