Dvojrozměrná diskrétní Fourierova transformace

Příklad 1:  Použití diskrétní dvojrozměrné Fourierovy transformace

n=64;m=64;

Frekvence dat bude (Subscript[ν, 1])=5 a (Subscript[ν, 2])=5

Nejdříve si vytvoříme diskrétní data. Data vytvoříme z periodické funkce dvou proměnných, p = (1/5, 1/5). Data mají frekvenci ν = (5, 5).

data=Table[N[Cos[2*Pi*i*5/n]  Cos[2*Pi*j*5/m]],{i,1,n},{j,1,m}];

Zobrazení signálu:

ListPlot3D[data]

Výpočet diskrétní dvojrozměrné Fouriorovy transformace:

FT=Fourier[data];

Zobrazení spektra:

ListPlot3D[Abs[FT],PlotRange->All]

Nyní musíme správně interpretovat osy grafu:
Protože dν = (1, 1), píky jsou pro frekvence (Subscript[ν, 1]) = ((6-1)*1, (6-1)*1), (Subscript[ν, 1])= (5, 5);                                                                      
                                                                 (Subscript[ν, 2]) = ((6-1)*1, 64-(6-1)*1), (Subscript[ν, 2]) = (5, 59);                                                                      
                                                                 (Subscript[ν, 3]) = (64-(6-1)*1, (6-1)*1), (Subscript[ν, 3]) = (59, 5);                                                                      
                                                                                                            (Subscript[ν, 4]) = (64-(6-1)*1, 64-(6-1)*1), (Subscript[ν, 4]) = (59, 59);

Pro lepší znázornění dat i diskrétní Fourierovy transformace použijeme graf hustoty (contour plot), tmavší barvy jsou nižší hodnoty, světlé barvy vyšší hodnoty dat.

Nejdříve contour-plot signálu:

ListContourPlot[data,InterpolationOrder->0]

Nyní contour-plot spektra:

ListContourPlot[Abs[FT],InterpolationOrder->0,PlotRange->{0,1}]

Frekvence dat bude (Subscript[ν, 1])=5.3 a (Subscript[ν, 2])=5.3

Nejdříve si vytvoříme diskrétní data. Data vytvoříme z periodické funkce dvou proměnných, p = (1/5.3, 1/5.3). Data mají frekvenci ν = (5.3, 5.3).

data=Table[N[Cos[2*Pi*i*5.3/n]  Cos[2*Pi*j*5.3/m]],{i,1,n},{j,1,m}];

Zobrazení signálu:

ListPlot3D[data]

Výpočet diskrétní dvojrozměrné Fouriorovy transformace:

FT=Fourier[data];

Zobrazení spektra:

ListPlot3D[Abs[FT],PlotRange->All]

Pokuť signál nemá frakvence, které jsou násobkem dν, tak spektrum vypadá trochu jinak. Nejsme schopni frekvenci ν = (5.3, 5.3) odečíst z grafu. Museli bychom použít dν=(0.1,0.1), tj. T=(10,10).

Pro lepší znázornění dat i diskrétní Fourierovy transformace použijeme graf hustoty (contour plot), tmavší barvy jsou nižší hodnoty, světlé barvy vyšší hodnoty dat.

Nejdříve contour-plot signálu:

ListContourPlot[data,InterpolationOrder->0]

Nyní contour-plot spektra:

ListContourPlot[Abs[FT],InterpolationOrder->0,PlotRange->{0,1}]

Příklad 2:  Vyčištění signálu pomocí diskrétní dvojrozměrné Fourierovy transformace

Postup řešení

n=64;m=64;

Vytvoříme zašuměný signál pomocí náhodných čísel z intervalu (-0.5,0.5).

data=Table[N[Cos[2*Pi*i*5/n]  Cos[2*Pi*j*5/m]+Random[]-0.5],{i,1,n},{j,1,m}];

Vykreslíme contour-plot signálu

ListContourPlot[data,InterpolationOrder->0]

Vypočteme diskrétní dvojrozměrnou Fourierovu transformaci

FT=Fourier[data];

Vykreslíme graf spektra zašuměného signálu signálu

ListPlot3D[Abs[FT],PlotRange->All]

Vykreslíme contour-plot spektra zašuměného signálu signálu

ListContourPlot[Abs[FT],InterpolationOrder->0,PlotRange->{0,2}]

Nyní malé píky, které vznikly frekvencí zašumění v spektru vyčistíme a vykreslíme contour-plot

FTn=Round[FT/2];
ListContourPlot[Abs[FTn],InterpolationOrder->0,PlotRange->{0,2}]

Nyní si inverzní Fourierovou transformací vytvoříme vyčištěný signál. Zároveň musíme oříznout hodnoty které jsou velmi malé a imaginární.

datanp=InverseFourier[FTn];
datan=Chop[datanp];

Výsledek-porovnání zašuměného a vyčištěného signálu

Zobrazíme si contour-plot. První obrázek jsou původní zašuměná data, druhý obrázek jsou vyčištěná data.(Využití při zaostřováníobrázků).

ListContourPlot[data,InterpolationOrder->0]

ListContourPlot[datan,InterpolationOrder->0]

Porovnání zašumelého,vyčištěného a nezašuměného signálu

data1=Table[N[Cos[2*Pi*i*5/n]  Cos[2*Pi*j*5/m]],{i,1,n},{j,1,m}];

g1=ListContourPlot[data,InterpolationOrder->0];
g2=ListContourPlot[datan,InterpolationOrder->0];
g3=ListContourPlot[data1,InterpolationOrder->0];

Show[GraphicsArray[{g1,g2,g3}]]