Como calcular respostas complexas médias (e justificativas)?

11

Estou desenvolvendo um software que calcula a resposta de um sistema comparando a FFT dos sinais de entrada e saída. Os sinais de entrada e saída são divididos em janelas e, para cada janela, os sinais são subtraídos à mediana e multiplicados por uma função Hann. A resposta do instrumento para essa janela é então a proporção das FFTs dos dados processados.

Eu acredito que o procedimento acima é padrão, embora eu possa estar descrevendo mal. Meu problema vem em como combinar as respostas das várias janelas.

Tanto quanto posso ver, a abordagem correta é calcular a média dos valores complexos em todas as janelas. A amplitude e a resposta de fase são, então, a amplitude e a fase do valor médio complexo em cada frequência:

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))

com loops implícitos nos compartimentos de frequência.

Mas me pediram para alterar isso para calcular a amplitude e a fase em cada janela primeiro e depois calcular a média das amplitudes e fases em todas as janelas:

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

Argumentei que isso está incorreto porque os ângulos médios estão "simplesmente errados" - a média de 0 e 360 ​​graus é 180, por exemplo, mas as pessoas com quem estou trabalhando responderam dizendo "OK, apenas exibiremos amplitude".

Então, minhas perguntas são:

  • Estou correto ao pensar que a segunda abordagem também é geralmente incorreta para amplitudes?
  • Em caso afirmativo, existem exceções que possam ser relevantes e que possam explicar por que as pessoas com quem estou trabalhando preferem o segundo método? Por exemplo, parece que as duas abordagens concordam quando o ruído se torna pequeno; talvez essa seja uma aproximação aceita para o baixo ruído?
  • Se a segunda abordagem estiver incorreta, existem referências autorizadas e convincentes que eu possa usar para mostrar isso?
  • Se a segunda abordagem estiver incorreta, existem exemplos bons e fáceis de entender que mostrem isso para amplitude (como a média de 0 e 360 ​​graus faz para a fase)?
  • Alternativamente, se eu estou errada, o que seria um bom livro para me educar-me melhor?

Tentei argumentar que a média de -1 1 1 -1 1 -1 -1 deve ser zero em vez de 1, mas isso não convence. E embora eu ache que poderia, com o tempo, construir um argumento baseado na estimativa da máxima probabilidade, dado um modelo de ruído específico, não é o tipo de raciocínio que as pessoas com quem estou trabalhando ouçam. Portanto, se não estou errado, preciso de um argumento poderoso da autoridade ou de uma demonstração "óbvia".

[Tentei adicionar mais tags, mas não consigo encontrar as relevantes e não consigo definir novas como um novo usuário - desculpe]

andrew cooke
fonte
Que motivo eles dão para desfavorecer seu método?
Nibot
a resposta parece mais suave quando plotada com o segundo método. Eu acho que isso ocorre porque, para os casos analisados, não há sinal significativo (em f mais alto), enquanto a segunda abordagem força um sinal "a aparecer" do ruído. Além disso, várias questões políticas / de comunicação, como você pode imaginar.
andrew cooke
1
Você já tentou fornecer alguns casos de teste? Pegue dados aleatórios e filtre-os através de alguns filtros com resposta de frequência conhecida. Verifique se a estimativa da função de transferência converge para a função de transferência conhecida.
Nibot
não. eu não tenho. essa é uma boa sugestão. obrigado. se apresentado bem, eu poderia ver isso sendo convincente.
andrew cooke

Respostas:

13

A estimativa da função de transferência geralmente é implementada de maneira ligeiramente diferente do método que você descreve.

Seu método calcula

F[y]F[x]

F

Uma implementação mais típica calculará a densidade espectral cruzada de x e y dividida pela densidade espectral de potência de x:

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

F[x]

Estimação incoerente

Seu empregador sugeriu que você estimasse a função de transferência usando

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

Isso funcionará , mas tem duas grandes desvantagens:

  1. Você não recebe nenhuma informação de fase.
  2. xy

Seu método e o método que descrevi contornam esses problemas usando uma média coerente .

Referências

A idéia geral de usar segmentos médios sobrepostos para calcular densidades espectrais de potência é conhecida como método de Welch . Acredito que a extensão de usar isso para estimar as funções de transferência também seja conhecida como método de Welch, embora não tenha certeza se isso é mencionado no artigo de Welch. Consultar o artigo de Welch pode ser um recurso valioso. Uma monografia útil sobre o assunto é o livro de Bendat e Piersol, Random Data: Analysis and Measurement Procedures .

Validação

Para validar seu software, sugiro aplicar vários casos de teste, nos quais você gera ruído branco gaussiano e o alimenta através de um filtro digital com uma função de transferência conhecida. Alimente as entradas e saídas em sua rotina de estimativa da função de transferência e verifique se a estimativa converge para o valor conhecido da função de transferência.

nibot
fonte
ah! obrigado. vou investigar / tentar isso.
andrew cooke
@nibot O que, exatamente, comprimentos FFT são usados ​​aqui?
Spacey
Você pode usar qualquer comprimento. O comprimento determina a resolução e, implicitamente (com uma quantidade fixa de dados para trabalhar), o número de médias. Fft mais longo = melhor resolução, mas também erros maiores devido a ter menos médias.
Nibot
ok, outra diferença é que você tem <F (y) F * (x)> / <F (x) F * (x)> enquanto Phonon tem <F (y)> <F * (x)> / (< F (x)> <F * (x)>) diz: o (
andrew cooke
Não faz sentido calcular <F (y)> <F * (x)> / (<F (x)> <F * (x)>), pois os <F * (x)> serão cancelados imediatamente. Eu acho que está correto como eu escrevi.
Nibot
12

Bem-vindo ao processamento de sinais!

Você está absolutamente correto. Você não pode simplesmente média de magnitudes e fases da DFT separadamente, especialmente fases. Aqui está uma demonstração simples:

z=a+bi|z|zz

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

zz1z2

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

Nesse caso,

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

Além disso,

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

|z|z

Agora, para fazer o que você está tentando fazer, sugiro o seguinte. Teoricamente, você pode encontrar uma resposta de impulso de um sistema dividindo o DFT da saída pelo DFT da entrada. No entanto, na presença de ruído, você obterá resultados muito estranhos. Uma maneira um pouco melhor de fazer isso seria usar a estimativa de resposta de impulso FFT de canal duplo, que é a seguinte (derivação não fornecida aqui, mas você pode encontrá-la online).

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
fonte
2
obrigado; Eu não tinha certeza se votaria neste ou na melhor resposta da Nibot - acho que eles estão defendendo o mesmo processo, então fui com a recomendação do livro, mas se eu tivesse dois votos também o incluiria ...
andrew cooke
1
@andrewcooke Sim, ambos estão defendendo exatamente a mesma coisa. Espero que isso esclareça as coisas para você e seus colegas.
Phonon
tem sido uma grande ajuda para mim (obrigado novamente). na segunda-feira, sugerirei que (1) implemente o método sugerido e (2) faça comparações com dados conhecidos (sintéticos) dos três. então espero que a melhor abordagem vai ganhar: o)
Andrew Cooke
@Phonon Quais comprimentos de FFT estamos usando para calcular as FFTs aqui? length_of_signal + max_length_of_channel + 1?
Spacey
@ Mohammad Tem que ser pelo menos o dobro do atraso que você espera encontrar. Isso se deve à simetria circular da DFT, portanto, você obterá valores de atraso causais e não causais em seu resultado.
Phonon
3

Essa é uma diferença entre a média coerente e incoerente dos espectros de FFT. A média coerente tem mais probabilidade de rejeitar ruídos aleatórios na análise. Incoerente tem mais probabilidade de acentuar magnitudes de ruído aleatórias. Qual destes é mais importante para o seu relatório de resultados?

hotpaw2
fonte
se eles derem resultados diferentes, acho que quero uma estimativa imparcial. ou é imparcial?
andrew cooke