Vamos dizer que temos um espectro que varia de -X MHz a + X MHz. Eu precisaria corrigir o erro de frequência no espectro deslocando o componente zero para o meio (0 Hz).
Se a saída (o espectro de frequências) for calculada via FFT, até onde eu sei, posso mover o espectro ajustando os 'fatores de variação' (ou coeficientes, para dados complexos e ondas senoidais e cosseno).
No caso de um tamanho 1024 FFT (índices de compartimento de 0 a 1023), o componente de 0 Hz deve existir no número de compartimento 511. No entanto, devido a um possível erro de frequência, o componente de 0 hz pode realmente estar no compartimento 510, por exemplo.
Não consigo encontrar muita informação sobre isso. Qualquer ajuda apreciada.
EDIT: Erro na pergunta.
fft
frequency
frequency-spectrum
user1166780
fonte
fonte
Respostas:
Se a mudança de frequência desejada for um múltiplo do espaçamento da bandeja, como no seu exemplo, você poderá facilmente efetuar a mudança que deseja, girando as saídas FFT pelo número de posições necessárias. No caso mais comum em que o deslocamento de frequência não é um múltiplo inteiro do espaçamento entre compartimentos, você pode multiplicar o sinal por uma função exponencial complexa antes de executar a FFT.
Portanto, se você determinar que o componente de frequência central de que você fala está realmente localizado na frequênciafoffset Hz em seus dados, e os dados são amostrados na taxa fs Hz, em seguida, para mudar o espectro de modo que o componente de interesse esteja na frequência zero na saída da FFT, você faria:
fonte
bem, a maneira mais simples é que, se você usou o fourier para encontrar o espectro, e precisa conhecer sua frequência pela quantidade de deslocamento, pode fazer uma coisa ..
1) descubra a resposta de impulso desses espectros
2) envolva-o com um ruído
3) veja o sinal que você obtaine4) tome sua FFT apenas para ter certeza, se combinar com a anterior
4) e veja os espectros calculando a média para diferentes partes ... para isso eu posso fornecer um algoritmo no software mathematica, que é
Neste código, eu tenho um argumento para tomar pmsesignal, assim você pode usar seu próprio sinal em vez dele ..
não tenho certeza, quão bem eu expliquei isso, mas isso funcionou no meu caso ..
Felicidades!
fonte