Как усреднить сложные ответы (и обоснование)?

11

Я занимаюсь разработкой программного обеспечения, которое рассчитывает отклик системы путем сравнения БПФ входных и выходных сигналов. Входные и выходные сигналы делятся на окна, и для каждого окна сигналы вычитаются по медиане и умножаются на функцию Ханна. Ответ инструмента для этого окна - это отношение FFT обработанных данных.

Я полагаю, что вышеупомянутое - стандартная процедура, хотя я, возможно, плохо ее описываю. Моя проблема заключается в том, как объединить ответы из нескольких окон.

Насколько я вижу, правильный подход - усреднить сложные значения по всем окнам. Амплитуда и фазовый отклик являются тогда амплитудой и фазой среднего комплексного значения на каждой частоте:

av_response = sum_windows(response) / n
av_amplitude = sqrt(real(av_response)**2 + imag(av_response)**2)
av_phase = atan2(imag(av_response), real(av_response))

с неявными петлями по частотным бинам.

Но меня попросили изменить это, чтобы сначала рассчитать амплитуду и фазу в каждом окне , а затем усреднить амплитуды и фазы по всем окнам:

amplitude = sqrt(real(response)**2 + imag(response)**2)
av_amplitude = sum_windows(amplitude) / n
phase = atan2(imag(response), real(response))
av_phase = sum_windows(phase) / n

Я утверждал, что это неверно, потому что усреднение углов «просто неправильно» - например, среднее значение 0 и 360 градусов составляет 180, но люди, с которыми я работаю, ответили: «Хорошо, мы будем отображать только амплитуду».

Итак, мои вопросы:

  • Правильно ли я считаю, что второй подход вообще неверен и для амплитуд?
  • Если да, есть ли какие-то исключения, которые могут иметь отношение к делу, и которые могут объяснить, почему люди, с которыми я работаю, предпочитают второй метод? Например, похоже, что два подхода согласятся, когда шум станет небольшим, поэтому, возможно, это приемлемое приближение для низкого шума?
  • Если второй подход неверен, есть ли убедительные, авторитетные ссылки, которые я могу использовать, чтобы показать это?
  • Если второй подход неверен, есть ли хорошие, простые для понимания примеры, которые показывают это для амплитуды (как среднее для 0 и 360 градусов для фазы)?
  • В качестве альтернативы, если я ошибаюсь, что было бы хорошей книгой для меня, чтобы лучше обучаться?

Я пытался утверждать, что среднее значение -1 1 1 -1 1 -1 -1 должно быть ноль, а не 1, но это было неубедительно. И хотя я думаю, что со временем я смогу построить аргумент, основанный на оценке максимального правдоподобия с учетом конкретной модели шума, это не та аргументация, которую будут слушать люди, с которыми я работаю. Поэтому, если я не ошибаюсь, мне нужен либо весомый аргумент авторитета, либо «очевидная» демонстрация.

[Я пытался добавить больше тегов, но не могу найти соответствующие и не могу определить новые как нового пользователя - извините]

Эндрю Кук
источник
Какую причину они приводят в ущерб вашему методу?
nibot
ответ выглядит более плавным, если он нанесен вторым методом. я думаю, это потому, что для рассматриваемых случаев нет значимого сигнала (при более высоком f), в то время как второй подход заставляет сигнал «появляться» из шума. также различные политические / коммуникационные проблемы, как вы можете догадаться.
Эндрю Кук
1
Вы пытались предоставить несколько тестов? Возьмите случайные данные и отфильтруйте их через некоторые фильтры с известной частотной характеристикой. Убедитесь, что оценка передаточной функции сходится к известной передаточной функции.
nibot
нет. у меня нет это хорошее предложение. Спасибо. если представить хорошо, я мог бы видеть это быть убедительным.
Эндрю Кук

Ответы:

13

Оценка передаточной функции обычно реализуется немного иначе, чем метод, который вы описываете.

Ваш метод вычисляет

F[y]F[x]

F

Более типичная реализация будет вычислять перекрестную спектральную плотность x и y, деленную на спектральную плотность мощности x:

F[y]F[x]|F[x]|2=F[y]F[x]F[x]F[x]

F[x]

Некогерентная оценка

Ваш работодатель предложил вам оценить передаточную функцию, используя

|F[y]||F[x]|

Это будет работать , но имеет два больших недостатка:

  1. Вы не получаете никакой информации о фазе.
  2. xy

Ваш метод и метод, который я описал, позволяют обойти эти проблемы с помощью когерентного усреднения .

использованная литература

Общая идея использования перекрывающихся усредненных сегментов для вычисления спектральной плотности мощности известна как метод Уэлча . Я считаю, что расширение использования этого для оценки передаточных функций также часто называют методом Уэлча, хотя я не уверен, упоминается ли это в статье Уэлча. Поиск бумаги Уэлча может быть ценным ресурсом. Полезной монографией на эту тему является книга Бендата и Пирсола « Случайные данные: процедуры анализа и измерения» .

Проверка

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

nibot
источник
ах! Спасибо. Я буду исследовать / попробовать это.
Эндрю Кук
@nibot Какие, точные, длины БПФ используются здесь?
Spacey
Вы можете использовать любую длину. Длина определяет разрешение и, неявно (учитывая фиксированный объем данных для работы), число средних значений. Более длительное FFT = лучшее разрешение, но также и большие ошибки из-за меньшего среднего.
нибот
хорошо, другое отличие в том, что у вас есть <F (y) F * (x)> / <F (x) F * (x)>, в то время как у Phonon есть <F (y)> <F * (x)> / (< F (x)> <F * (x)>) afaict: o (
Эндрю Кук
Нет смысла вычислять <F (y)> <F * (x)> / (<F (x)> <F * (x)>), поскольку <F * (x)> немедленно отменится. Я думаю, что это правильно, как я написал это.
нибот
12

Добро пожаловать в обработку сигналов!

Ты совершенно прав. Вы не можете просто усреднить значения DFT и фазы отдельно, особенно фазы. Вот простая демонстрация:

z=a+bi|z|zz

|z|=a2+b2
z=tan1(ba)

zz1z2

z=z1+z22=a1+b1i+a2+b2i2=(a1+a2)+(b1+b2)i2

В этом случае,

|z|=(a1+a2)24+(b1+b2)24=12(a1+a2)2+(b1+b2)2a12+b12+a22+b222

Также,

z=tan1(b1a1)+tan1(b2a2)2tan1(2(b1+b2)2(a1+a2))

|z|z

Теперь, чтобы сделать то, что вы пытаетесь сделать, я предлагаю следующее. Теоретически, вы можете найти импульсную характеристику системы, разделив DFT на выходе на DFT на входе. Однако при наличии шума вы получите очень странные результаты. Несколько лучший способ сделать это - использовать двухканальную оценку импульсной характеристики БПФ, которая выглядит следующим образом (деривация здесь не приводится, но вы можете найти ее в Интернете).

Gi(f)=Fi1(f)+Fi2(f)++FiN(f)NFik(f)kkiGo(f)=Fo1(f)+Fo2(f)++FoN(f)NGH^(f)H(f)

H^(f)=Go(f)Gi(f)|Gi(f)|2

()

Phonon
источник
2
благодаря; я не был уверен, стоит ли голосовать за него или за нибота как за лучший ответ - я думаю, что они выступают за один и тот же процесс, поэтому согласился с рекомендацией книги, но если бы у меня было два голоса, это тоже бы включилось ...
Эндрю Кук
1
@andrewcooke Да, они оба защищают одно и то же. Я надеюсь, что это проясняет ситуацию для вас и ваших коллег.
Фонон
это было огромной помощью для меня (спасибо еще раз). в понедельник я предложу, чтобы я (1) реализовал предложенный метод и (2) провел сравнение с известными (синтетическими) данными для всех трех. тогда, надеюсь, лучший подход победит: о)
Эндрю Кук
@Phonon Какие длины БПФ мы используем для вычисления БПФ здесь? length_of_signal + max_length_of_channel + 1?
Спейси
@ Мохаммед Это должно быть как минимум вдвое больше задержки, которую вы ожидаете найти. Это связано с круговой симметрией ДПФ, поэтому вы получите как причинные, так и не причинные значения задержки в своем результате.
Фонон
3

Это разница между когерентным и некогерентным усреднением спектров БПФ. Когерентное усреднение с большей вероятностью отклонит случайный шум в анализе. Некогерентность, скорее всего, усиливает случайные величины шума. Что из этого важнее для вашего отчета о результатах?

hotpaw2
источник
если они дают разные результаты, я думаю, что я хочу объективную оценку. либо беспристрастен?
Андрей Кук