Ограничение частоты Найквиста — Как смешивать только гармоники, которые находятся ниже предела Найквиста

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

Теперь я должен обновить ту часть класса, которая смешивает гармоники вместе, чтобы в микшере были включены только гармоники с частотами ниже предела Найквиста. Предположительно, getFrequency () выяснит, на какую частоту он установлен, но после этого я все еще не уверен, как включить только эти частоты. Возможно, если заявление.

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];
};

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;
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]