Qual é o efeito do aliasing na magnitude da autocorrelação?


8

Eu tenho uma pergunta sobre o efeito do alias na magnitude das autocorrelações. Em uma simulação no MATLAB, não vejo nenhum efeito de alias ou necessidade de filtro anti-alias quando considero a magnitude da autocorrelação. O que significa que posso subamostrar os dados e fazer a autocorrelação. Existe um artigo "Efeitos do aliasing nas estimativas de momentos espectrais derivados da função de autocorrelação completa", que diz algo como o que afirmo. Alguém poderia me avisar se eu cometi um erro?

Respostas:


4

Dizimar antes de calcular a autocorrelação, na presença de ruído, é inferior a calcular a autocorrelação usando o conjunto de dados completo. Suponha que o sinal de interesse esteja incorporado no ruído branco. O vector consiste em amostras de um processo aleatório discreto. A função de autocorrelação do vetor x [ n ] é:x[n],n=0,1,...,N1x[n]

Ax[k]=1Nki=0N1kx[i]x[i+k]

Ou seja, é o atraso usado para o cálculo da autocorrelação. Em seu cenário proposto, que está dizimando a saída função de autocorrelação por um fator D (ou seja, você só está calculando a função para defasagens 0 , D , 2 D , . . . ) E comparando esse resultado para a função de autocorrelação de x [ n ] dizimados pelo mesmo factor D . Seja x d [ n ] a sequência dizimada; sua função de autocorrelação é:kD0,D,2D,...x[n]Dxd[n]

Axd[k]=DNki=0N1kDx[iD]x[(i+k)D]

(por simplicidade aqui, assumi que é um fator de N na equação acima)DN

Sua pergunta pode ser escrita como:

Ax[kD]?Axd[k]

1 1N-kDEu=0 0N-1 1-kDx[Eu]x[Eu+kD]?DN-kEu=0 0N-1 1-kDx[EuD]x[(Eu+k)D]

Olhando para isso qualitativamente, a soma no lado esquerdo tem mais termos do que sua contraparte no lado direito. Se é estacionário de segunda ordem, então o valor esperado de cada termo em cada soma é o mesmo; o ato de calcular a média de várias amostras com o mesmo valor esperado aumenta a relação sinal / ruído. De maneira um pouco diferente, você pode pensar nos termos de cada soma como amostras de um novo processo aleatório:x[n]

y[n]=x[n]x[n+kD]

x[n]y[n]kDy[n]

Portanto, se houver ruído branco no sinal (o que geralmente ocorre), você obterá uma estimativa melhor das estatísticas de segunda ordem do sinal subjacente usando um tamanho de amostra maior no cálculo (isso pode parecer intuitivamente óbvio). No contexto de suas duas abordagens, isso é realizado usando o sinal completo e não dizimado no cálculo da autocorrelação e dizimando posteriormente (ou seja, apenas calculando o resultado para determinados valores de atraso).


Muito obrigado. Você está certo, mas no caso do meu sinal, não é o problema dominante. Meu problema é principalmente o efeito de serrilhado. Você explicou que o sinal não dizimado total pode ser melhor, mas se quisermos diminuir o efeito do aliasing, devemos coletar ainda mais amostras, como duas (3) vezes o número de amostras, e isso realmente aumenta a complexidade.
Hossein

2

Parece um pouco estranho para mim. O script Matlab abaixo compara a "autocorrelação reduzida para a amostra" com a "autocorrelação dos sinais para redução da amostra". Para ondas senoidais duplas, isso chega bem perto (erro relativo de -50dB), mas para ruído branco é simplesmente errado (erro relativo> +6 dB). Embora possa haver alguma vantagem computacional, não está claro para mim o quão útil as autocorrelações reduzidas são mesmo no caso de onda senoidal dupla. Os picos no espectro ainda aparecem no lugar errado.

% script to check whether autocorrelation is immune to aliasing
% create two sine waves at 18k and 21k (assuming sample rate of 444.1k) 
n = 8192;
t = (0:n-1)'/44100;
x = sin(2*pi*t*21000)+sin(2*pi*t*18000);
% calculate autocorrelation of original signal and one that's downsampled
% by 4 and thus heavily aliased
y = xcorr(x,x);
y2 = xcorr(x(1:4:end),x(1:4:end));
d = y(4:4:end)-4*y2;
% calculate the error in dB
err = 10*log10(sum(d.^2)./sum(y2.^2));
fprintf('Dual sine wave relative error = %6.2f dB\n',err);

%% try the same thing for white noise
x = 2*rand(n,1)-1;
y = xcorr(x,x);
y2 = xcorr(x(1:4:end),x(1:4:end));
d = y(4:4:end)-4*y2;
err = 10*log10(sum(d.^2)./sum(y2.^2));
fprintf('White noise relative error = %6.2f dB\n',err);

Muito obrigado, mas o lugar de picos na autocorrelação é importante para mim e, portanto, não tenho certeza de que esse código mostre meu problema. Mas, como você aponta enquanto o espectro muda, enfrentamos pequenas mudanças no domínio do tempo semelhantes ao que o artigo diz.
Hossein

0

Para tipos específicos de entradas, o efeito do alias de frequência na magnitude das autocorrelações pode ser insignificante. No entanto, não acho que isso seja verdade em geral.

Por exemplo, para uma entrada ilimitada de banda ou para ruído branco, a subamostragem não afetará o formato da autocorrelação (embora possa alterar a escala de maneira preditiva). A autocorrelação do ruído branco é um delta e permanecerá um delta se a amostragem for reduzida.

Agora, o espectro de potência está relacionado à autocorrelação pela transformada de Fourier. Portanto, se sua afirmação for verdadeira, parece que você também pode afirmar que o alias de frequência não altera o conteúdo da frequência da entrada. E isso não é verdade. Mas pode haver exceções (casos especiais).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.