|
| Fase af FFT af tilfældig autokorrelation =~ Fra : Jack |
Dato : 03-03-06 17:03 |
|
Hej
Hvordan kan det være at følgende kode giver samme output
ved tilfældigt input?
signal_input=randn(1,100);
auto_korrelation=xcorr(signal_input);
fase_output=angle(fft(auto_korrelation));
| |
Carsten Svaneborg (03-03-2006)
| Kommentar Fra : Carsten Svaneborg |
Dato : 03-03-06 19:50 |
|
Jack wrote:
> auto_korrelation=xcorr(signal_input);
Autokorrelationen er C(delta)=< X[i]*X[i+delta]>.
Dvs. C(0)=<X^2> og C(delta)=0 for delta > 0.
Du kan også tage dette som definition af at være
tilfældig. Så du får samme autokorrelationsfunktion
hver gang, så længe du tager gennemsnit over nok
tilfældige tal.
--
Mvh. Carsten Svaneborg
http://gauss.ffii.org
| |
Jack (03-03-2006)
| Kommentar Fra : Jack |
Dato : 03-03-06 20:50 |
|
>
> Du kan også tage dette som definition af at være
> tilfældig. Så du får samme autokorrelationsfunktion
> hver gang, så længe du tager gennemsnit over nok
> tilfældige tal.
Jeg tror du misforstår mig....eller så forstår jeg bare ikke
det du skriver...
Prøv at køre dette loop i MATLAB og forklar hvorfor
fasen af en fft af to tilfældige, uens autokorrelationer
er den samme....Jeg kan ikke lige gennemskue hvorfor
og jeg har arbejdet på at finde en forklaring i et par
dage nu.....
clc
close all
clear
N=40;
for k=1:1000
x=randn(1,N);
rxx=xcorr(x);
fase=angle(fft(rxx));
subplot(1,2,1)
plot(rxx)
ylim([-20 100]);
subplot(1,2,2)
plot(fase)
drawnow;
t=['Tryk på en tast ' num2str(k)];
title(t)
pause()
end
| |
Jack (03-03-2006)
| Kommentar Fra : Jack |
Dato : 03-03-06 22:56 |
|
ok jeg har vist dummet mig....input signalets indhold har selvfølgelig ingen
betydning for fasen af en fft....det er kun antallet af punkter der er
afgørende...
dumme mig...
| |
Jesper Toft (08-03-2006)
| Kommentar Fra : Jesper Toft |
Dato : 08-03-06 00:52 |
|
Jack wrote:
> ok jeg har vist dummet mig....input signalets indhold har selvfølgelig
> ingen betydning for fasen af en fft....det er kun antallet af punkter der
> er afgørende...
> dumme mig...
Hov Hov, stop lige lidt...
Det er da vist ikke rigtigt.
Input af en FFT har stor betydning for fasen.
Lad os lige regne lidt..
Grunden til at du har samme fase uanset dit input skyldes udelukkende dit
input signals udseende.
En autocoorlation har den enskab at den har et ulige antal samples i dens
output.. Dernæst er den symetrisk omkring midten.
DFT(x(k)) = sum 0->N-1 ( x(n) exp( -j * 2 * pi * k * n / N ) )
På grund af x(n)s opbygning, kan midten skrives for sig selv (ganget en
vinkel) og de 2 sider skrives som en sum af hver sample i den ene halvside
halvside gange summen af 2 vinkler.
DFT(x(k)) =
x((N-1)/2) * exp( -j * 2 * pi * k * (N-1)/2 / N ) +
sum 0->(N-3)/2 (
x(n) * (
exp( -j * 2 * pi * k * n / N ) + exp( -j * 2 * pi * k * (N-n-1) / N )
) )
Det sidste af de 2 vinkel bidrag (der er opstået på grund af den sidste del
af x(n)) kan skrives som:
exp( -j*2*pi*k*(N-1)/N + j*2*pi*k*n/N )
Hvilket giver:
exp( j*2*pi*k*n/N ) * exp( -j*2*pi*k*(N-1)/N )
Sammensat med det andet fase led giver det:
exp( -j*2*pi*k*(N-1)/N/2 ) * (
exp( -j*2*pi*k*n/N ) * exp( -j*2*pi*k*(N-1)/N/2 ) +
exp( j*2*pi*k*n/N ) * exp( +j*2*pi*k*(N-1)/N/2 )
)
Hvilket med euler giver:
exp( -j*2*pi*k*(N-1)/N/2 ) * cos( 2*pi*k*n/N + 2*pi*k*(N-1)/N/2)
Vinklen kan derved sættes uden for summen der herefter er reel (der er kun
x(n)*cos() tilbage).
Sammenligner vi den vinkel med den der står udenfor summen allerede, vil vi
se at de faktisk er ens..
Derved har vi summen af 2 tal med samme vinkel.. Det vil sige der er kun en
enkelt vinkel der ikke er afhængig af input data..
Du ender dermed med et resultat at din vinkel for din FFT for lige præcist
det input du har valgt er:
angle(exp( -j * 2 * pi * k * (N-1)/2 / N ))
Eller:
pi * k * (N-1) / N
Håber det gav mening..
--
/Jesper
| |
|
|