Спектральный анализ без БПФ
Спектральный анализ без БПФ
Существует ли метод спетрального анализа без использования БПФ (для малого числа гармоник) и оконного взвешивания?
Возможно ли применить как альтернативу фильтр Фарроу(вместо окна, если известна частота основного тона и исходя из этого подстраивать частоту дискретизации) и алгоритм Герцеля(вместо БПФ узнавать амплитуду гармоник на фиксированых бинах)?
Правильно ли я понял, в статье "Динамический пересчет спектральных отсчетов на каждом такте дискретизации. Модифицированный алгоритм Герцеля" излагается метод, когда ни Фарроу ни оконное взвешивание не нужно, а все частоты точно ложатся на частотную сетку анализа?
Возможно ли применить как альтернативу фильтр Фарроу(вместо окна, если известна частота основного тона и исходя из этого подстраивать частоту дискретизации) и алгоритм Герцеля(вместо БПФ узнавать амплитуду гармоник на фиксированых бинах)?
Правильно ли я понял, в статье "Динамический пересчет спектральных отсчетов на каждом такте дискретизации. Модифицированный алгоритм Герцеля" излагается метод, когда ни Фарроу ни оконное взвешивание не нужно, а все частоты точно ложатся на частотную сетку анализа?
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Спектральный анализ без БПФ
Для малого числа гармоник существует алгоритм Герцеля и его модификация.Дмитрий К писал(а):Существует ли метод спетрального анализа без использования БПФ (для малого числа гармоник) и оконного взвешивания?
Да возможно, только не ясно зачем вам делать спектральный анализ если вы точно знаете, что у вас одна гармоника и точно знаете ее частоту?Дмитрий К писал(а):Возможно ли применить как альтернативу фильтр Фарроу(вместо окна, если известна частота основного тона и исходя из этого подстраивать частоту дискретизации) и алгоритм Герцеля(вместо БПФ узнавать амплитуду гармоник на фиксированых бинах)?
Да в алгоритме Герцеля идет подбор длины выборки для того чтобы уменьшить эффект растекания спектра за счет длины выборки кратной периоду сигнала. Однако положить частоты точно на сетку анализа можно лишь в нескольких частных случаях: когда гармоника одна, две или частоты гармоник кратны. В общем случае положить набор гармоник точно на сетку анализа нельзя (например вы никогда не совместите на одной частоте дискретизации гармоники с частотами 1/3, 1/7, 1/11)Дмитрий К писал(а):Правильно ли я понял, в статье "Динамический пересчет спектральных отсчетов на каждом такте дискретизации. Модифицированный алгоритм Герцеля" излагается метод, когда ни Фарроу ни оконное взвешивание не нужно, а все частоты точно ложатся на частотную сетку анализа?
Re: Спектральный анализ без БПФ
Большое спасибо за ответ!
Итак модель сигнала такова: Синусоида с постоянной частотой (fо = 45-55Гц) и кратные по частоте гармоники (10 гармоник - 2*fo,3*fo...10*fo).
Получается априорное сведение: частота основной гармоники (а значит и кратных ей).
Теперь необходимо посчитать амплитуду этих гармоник, желательно как можно точнее.
И ещё, как расчитать затраты на оперативную память при использовании модифицированного Герцеля?
Итак модель сигнала такова: Синусоида с постоянной частотой (fо = 45-55Гц) и кратные по частоте гармоники (10 гармоник - 2*fo,3*fo...10*fo).
Получается априорное сведение: частота основной гармоники (а значит и кратных ей).
Теперь необходимо посчитать амплитуду этих гармоник, желательно как можно точнее.
И ещё, как расчитать затраты на оперативную память при использовании модифицированного Герцеля?
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Спектральный анализ без БПФ
Ну как бы при условии что у вас 4к RAM и слабенький процессор это будет очень не просто. Алгоритм Герцеля это бих фильтр, соотвествнно требует памяти для хранения сигнала на линиях задержки. Если выборка длиной N то требует память для хранения N отсчетов сигнала.Бахурин Сергей писал(а): Теперь необходимо посчитать амплитуду этих гармоник, желательно как можно точнее.
И ещё, как расчитать затраты на оперативную память при использовании модифицированного Герцеля?
Re: Спектральный анализ без БПФ
Но! Если имеется возможность не применять оконную функцию, то длинна выборки может быть заметно уменьшена!
Например становится возможным вообще по одному периоду считать! в результате N = 24!
Например становится возможным вообще по одному периоду считать! в результате N = 24!
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Спектральный анализ без БПФ
ну вы можете конечно попробовать, я не знаю какие точности при этом удастся получить.Дмитрий К писал(а):Но! Если имеется возможность не применять оконную функцию, то длинна выборки может быть заметно уменьшена!
Например становится возможным вообще по одному периоду считать! в результате N = 24!
Re: Спектральный анализ без БПФ
Я использовал вашу бесценную статью о фильтрах Фарроу и ваш код. Результаты приятно удивили.
Теперь дело за железными экспериментами - надо как-то упихать это дело в мой микроконтроллер, предварительно переведя всё на fixed point
Большое вам спасибо!
Выбор мой такой: фарроу 3-го порядка и БПФ на 32 точки.
Конечно, получается что нужно динамически считать коэффициенты Фарроу. Вот и думаю теперь по вычислительной сложности будет ли Фарроу и БПФ быстрее/медленнее чем динамический Герцель. При том что результат по сути один и тот же...???
Теперь дело за железными экспериментами - надо как-то упихать это дело в мой микроконтроллер, предварительно переведя всё на fixed point
Большое вам спасибо!
Выбор мой такой: фарроу 3-го порядка и БПФ на 32 точки.
Конечно, получается что нужно динамически считать коэффициенты Фарроу. Вот и думаю теперь по вычислительной сложности будет ли Фарроу и БПФ быстрее/медленнее чем динамический Герцель. При том что результат по сути один и тот же...???
Re: Спектральный анализ без БПФ
Чуть более шустрый алгоритм Герцеля 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;
А приблизительно сравнить алгоритмы можно по количеству умножений, сложений и объём памяти. Выпишите для каждого алгоритма объём вычислений на один семпл и получите ответ.
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;
А приблизительно сравнить алгоритмы можно по количеству умножений, сложений и объём памяти. Выпишите для каждого алгоритма объём вычислений на один семпл и получите ответ.
- Бахурин Сергей
- Администратор
- Сообщения: 1116
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Спектральный анализ без БПФ
да если быть точным это дельфи (object pascal)