Спектральный анализ без БПФ

Дмитрий К
Сообщения: 29
Зарегистрирован: 02 мар 2011, 09:48

Спектральный анализ без БПФ

Сообщение Дмитрий К »

Существует ли метод спетрального анализа без использования БПФ (для малого числа гармоник) и оконного взвешивания?
Возможно ли применить как альтернативу фильтр Фарроу(вместо окна, если известна частота основного тона и исходя из этого подстраивать частоту дискретизации) и алгоритм Герцеля(вместо БПФ узнавать амплитуду гармоник на фиксированых бинах)?

Правильно ли я понял, в статье "Динамический пересчет спектральных отсчетов на каждом такте дискретизации. Модифицированный алгоритм Герцеля" излагается метод, когда ни Фарроу ни оконное взвешивание не нужно, а все частоты точно ложатся на частотную сетку анализа?

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 972
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Спектральный анализ без БПФ

Сообщение Бахурин Сергей »

Дмитрий К писал(а):Существует ли метод спетрального анализа без использования БПФ (для малого числа гармоник) и оконного взвешивания?
Для малого числа гармоник существует алгоритм Герцеля и его модификация.
Дмитрий К писал(а):Возможно ли применить как альтернативу фильтр Фарроу(вместо окна, если известна частота основного тона и исходя из этого подстраивать частоту дискретизации) и алгоритм Герцеля(вместо БПФ узнавать амплитуду гармоник на фиксированых бинах)?
Да возможно, только не ясно зачем вам делать спектральный анализ если вы точно знаете, что у вас одна гармоника и точно знаете ее частоту?
Дмитрий К писал(а):Правильно ли я понял, в статье "Динамический пересчет спектральных отсчетов на каждом такте дискретизации. Модифицированный алгоритм Герцеля" излагается метод, когда ни Фарроу ни оконное взвешивание не нужно, а все частоты точно ложатся на частотную сетку анализа?
Да в алгоритме Герцеля идет подбор длины выборки для того чтобы уменьшить эффект растекания спектра за счет длины выборки кратной периоду сигнала. Однако положить частоты точно на сетку анализа можно лишь в нескольких частных случаях: когда гармоника одна, две или частоты гармоник кратны. В общем случае положить набор гармоник точно на сетку анализа нельзя (например вы никогда не совместите на одной частоте дискретизации гармоники с частотами 1/3, 1/7, 1/11)

Дмитрий К
Сообщения: 29
Зарегистрирован: 02 мар 2011, 09:48

Re: Спектральный анализ без БПФ

Сообщение Дмитрий К »

Большое спасибо за ответ!
Итак модель сигнала такова: Синусоида с постоянной частотой (fо = 45-55Гц) и кратные по частоте гармоники (10 гармоник - 2*fo,3*fo...10*fo).

Получается априорное сведение: частота основной гармоники (а значит и кратных ей).

Теперь необходимо посчитать амплитуду этих гармоник, желательно как можно точнее.
И ещё, как расчитать затраты на оперативную память при использовании модифицированного Герцеля?

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 972
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Спектральный анализ без БПФ

Сообщение Бахурин Сергей »

Бахурин Сергей писал(а): Теперь необходимо посчитать амплитуду этих гармоник, желательно как можно точнее.
И ещё, как расчитать затраты на оперативную память при использовании модифицированного Герцеля?
Ну как бы при условии что у вас 4к RAM и слабенький процессор это будет очень не просто. Алгоритм Герцеля это бих фильтр, соотвествнно требует памяти для хранения сигнала на линиях задержки. Если выборка длиной N то требует память для хранения N отсчетов сигнала.

Дмитрий К
Сообщения: 29
Зарегистрирован: 02 мар 2011, 09:48

Re: Спектральный анализ без БПФ

Сообщение Дмитрий К »

Но! Если имеется возможность не применять оконную функцию, то длинна выборки может быть заметно уменьшена!
Например становится возможным вообще по одному периоду считать! в результате N = 24!

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 972
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Спектральный анализ без БПФ

Сообщение Бахурин Сергей »

Дмитрий К писал(а):Но! Если имеется возможность не применять оконную функцию, то длинна выборки может быть заметно уменьшена!
Например становится возможным вообще по одному периоду считать! в результате N = 24!
ну вы можете конечно попробовать, я не знаю какие точности при этом удастся получить.

Дмитрий К
Сообщения: 29
Зарегистрирован: 02 мар 2011, 09:48

Re: Спектральный анализ без БПФ

Сообщение Дмитрий К »

Я использовал вашу бесценную статью о фильтрах Фарроу и ваш код. Результаты приятно удивили.
Теперь дело за железными экспериментами - надо как-то упихать это дело в мой микроконтроллер, предварительно переведя всё на fixed point

Большое вам спасибо!

Выбор мой такой: фарроу 3-го порядка и БПФ на 32 точки.
Конечно, получается что нужно динамически считать коэффициенты Фарроу. Вот и думаю теперь по вычислительной сложности будет ли Фарроу и БПФ быстрее/медленнее чем динамический Герцель. При том что результат по сути один и тот же...???

ivan219
Сообщения: 61
Зарегистрирован: 09 май 2011, 16:39

Re: Спектральный анализ без БПФ

Сообщение ivan219 »

Чуть более шустрый алгоритм Герцеля http://www.dsplib.ru/forum/viewtopic.ph ... p=665#p665 всего 3 умножения на один семпл.
Вот код

Код: Выделить всё

procedure TForm1.Hercel;
var
  I: Integer;
  S, V0, V1, V2, a, Re, Im, fRe, fIm: Double;
begin
 Re := Cos(2 * Pi / 32);
 Im := Sin(2 * Pi / 32);
 a := Re * 2;
 V2 := 0;
 V1 := 0;
 V0 := 0;
 for I := 0 to 511 do
   begin
    if I >= 32 then S := Signal[I] - Signal[I - 32]
    else S := Signal[I];


    V2 := V1;
    V1 := V0;
    V0 := S - V2 + V1 * a;
    fRe := V0 * Re - V1;
    fIm := V0 * Im;


    pHercel[I] := 100 - Round(Sqrt(Sqr(fRe) + Sqr(fIm)) / 2.5);
   end;
end;
памяти чуть больше но зато шустрее.

А приблизительно сравнить алгоритмы можно по количеству умножений, сложений и объём памяти. Выпишите для каждого алгоритма объём вычислений на один семпл и получите ответ.

Дмитрий К
Сообщения: 29
Зарегистрирован: 02 мар 2011, 09:48

Re: Спектральный анализ без БПФ

Сообщение Дмитрий К »

ivan219 писал(а):Чуть более шустрый алгоритм Герцеля http://www.dsplib.ru/forum/viewtopic.ph ... p=665#p665 всего 3 умножения на один семпл.
Вот код

Код: Выделить всё

procedure TForm1.Hercel;
var
  I: Integer;
  S, V0, V1, V2, a, Re, Im, fRe, fIm: Double;
begin
 Re := Cos(2 * Pi / 32);
 Im := Sin(2 * Pi / 32);
 a := Re * 2;
 V2 := 0;
 V1 := 0;
 V0 := 0;
 for I := 0 to 511 do
   begin
    if I >= 32 then S := Signal[I] - Signal[I - 32]
    else S := Signal[I];


    V2 := V1;
    V1 := V0;
    V0 := S - V2 + V1 * a;
    fRe := V0 * Re - V1;
    fIm := V0 * Im;


    pHercel[I] := 100 - Round(Sqrt(Sqr(fRe) + Sqr(fIm)) / 2.5);
   end;
end;
памяти чуть больше но зато шустрее.

А приблизительно сравнить алгоритмы можно по количеству умножений, сложений и объём памяти. Выпишите для каждого алгоритма объём вычислений на один семпл и получите ответ.
Простите, это Паскаль?

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 972
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Спектральный анализ без БПФ

Сообщение Бахурин Сергей »

да если быть точным это дельфи (object pascal)

Ответить