Алгоритм Герцеля.
От: reider  
Дата: 18.02.21 07:27
Оценка:
Доброго времени суток.
Подскажите, есть ли у кого реализация алгоритма Герцеля для комплексного сигнала?
У меня есть пример реализации который работает но только для не комплексного сигнала.

float goertzel(int numSamples,int TARGET_FREQUENCY,int SAMPLING_RATE, float* modData)
{
int k,i;
float   floatnumSamples;
float   omega,sine,cosine,coeff,q0,q1,q2,result;

floatnumSamples = (float) numSamples;
k = (int) (0.5 + ((floatnumSamples * TARGET_FREQUENCY) / SAMPLING_RATE));
omega = (2.0 * 3.1416 * k) / floatnumSamples;
sine = sin(omega);
cosine = cos(omega);
coeff = 2.0 * cosine;

q0=0;
q1=0;
q2=0;
result=0;

for(i=0; i<numSamples; i++)
{
    q0 = coeff * q1 - q2 + modData[i];
    q2 = q1;
    q1 = q0;
}

result = sqrtf(q1 * q1 + q2 * q2 - q1 * q2 * coeff);
return result;
}
герцель c++ алгоритм
Re: Алгоритм Герцеля.
От: ArtDenis Россия  
Дата: 18.02.21 09:27
Оценка:
Здравствуйте, reider, Вы писали:

R>Доброго времени суток.

R>Подскажите, есть ли у кого реализация алгоритма Герцеля для комплексного сигнала?
R>У меня есть пример реализации который работает но только для не комплексного сигнала.

Проще отказаться от С и писать на C++ с использованием std::complex: https://en.cppreference.com/w/cpp/numeric/complex

Код будет практически такой-же
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[2]: Алгоритм Герцеля.
От: reider  
Дата: 18.02.21 10:03
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Здравствуйте, reider, Вы писали:


R>>Доброго времени суток.

R>>Подскажите, есть ли у кого реализация алгоритма Герцеля для комплексного сигнала?
R>>У меня есть пример реализации который работает но только для не комплексного сигнала.

AD>Проще отказаться от С и писать на C++ с использованием std::complex: https://en.cppreference.com/w/cpp/numeric/complex


AD>Код будет практически такой-же


Отказаться не могу.
Спасибо. Смотрю
Re: Алгоритм Герцеля.
От: vopl Россия  
Дата: 18.02.21 10:21
Оценка:
Здравствуйте, reider, Вы писали:

Все то же самое что уже есть, только итог не схлопывай
    result = Complex(
        q1 - q2 * cosine, //re
        q2 * sine); // im
Re[2]: Алгоритм Герцеля.
От: reider  
Дата: 18.02.21 11:20
Оценка:
Здравствуйте, vopl, Вы писали:

V>Здравствуйте, reider, Вы писали:


V>Все то же самое что уже есть, только итог не схлопывай

V>
V>    result = Complex(
V>        q1 - q2 * cosine, //re
V>        q2 * sine); // im
V>

Так у меня на входе комплексный массив
Re[3]: Алгоритм Герцеля.
От: vopl Россия  
Дата: 18.02.21 12:44
Оценка:
V>>Здравствуйте, reider, Вы писали:

V>>Все то же самое что уже есть, только итог не схлопывай

V>>
V>>    result = Complex(
V>>        q1 - q2 * cosine, //re
V>>        q2 * sine); // im
V>>

R>Так у меня на входе комплексный массив

Упс.. Слона то я и не приметил Тогда тебе сюда https://en.wikipedia.org/wiki/Goertzel_algorithm#Complex_signals_in_real_arithmetic
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.