[an error occurred while processing this directive]
|
Помогите неграмотному и напрочь забывшему математику алгоритмом!
Суть проблемы - msp430 оцифровывает сигнал, частота выборки - 400 гц, входной сигнал - частота от 20 до около 200 гц, зашумленный, с меняющейся амплитудой, к нему добавлен загрязняющий сигнал, частоту которого в принципе можно определить с помощью другого датчика.
Сейчас снял сигнал, записал на диск и пытаюсь анализировать алгоритмы с помощью LabView - там есть готовый спектроанализатор, сравниваю свой результат с этим.
Алгоритм нужен в реальном времени, максимум точек на 16. Точность определения частоты - процентов 5-10.
Пробую Левинсона-Дурбина, найденного где-то в интернете - ничего толкового. Он ниже - LabView-шная версия (как бы сравнения не съелись)
автокорреляцияint16 i,k;
for (i=0; i<=P; i++)
{
R[i]=0;
for(k=0; k<(window-1); k++)
R[i]+=xw[k]*xw[k+i];
}Сам алгоритм
float alfa;
int16 i,k;
float E,B,PARCOR;
float b[64];beta[0]=1;
E=R[0];
for (i=1; i<=P; i++)
{
B = R[i];
for (k=1; k<(i); k++) B +=R[i-k]*beta[k];
PARCOR=-B/E;
for (k=1; k<(i); k++) b[k]=beta[i-k];
for (k=1; k<(i); k++) beta[k] += PARCOR*b[k];
beta[i]=PARCOR;
E *= (1 - beta[i]*beta[i]);
}
alfa=E;
E-mail: info@telesys.ru