BEŞİNCİ HAFTA UYGULAMA YAZILIMLARI VE ÖRNEKLER Görünüm büyüklüğünü %75 veya %50 yaparak iki sayfayı birlikte görüntüleyiniz. Frekans bölgesinde sürekli verinin Fourier dönüşümü sıfır olarak çizilir ise katlanma oluşmuştur ve sürekli verinin Fourier dönüşümü Nyquist frekansının ötesinde yani çizim aralığının dışındadır. Uygulamada kullanılacak olan 4DFT.pro adlı PV-WAVE programı diskten okunan veya yazılım tarafından yaratılan bir sınama verisinin ayrık Fourier dönüşümünü hesaplamaktadır. Diskten veri okuma seçeneği seçilir ise geçerli dizindeki tür eki.dat olan dosyaların bir dökümü verilir. Verinin okunması için sıra numarasının girilmesi yeterlidir. Zaman verisini kapsayan dosyanın ilk satırı zamanın başlangıç değeri ve örnekleme aralığı olmak üzere boşluk ile ayrılmış iki sayıdan oluşmalıdır. İzleyen satırlarda ise bir zaman değeri ve ona karşılık gelen sayısal veri bulunmalıdır. Sınama verisi yaratıldığında ise zaman verisinin ilk ve son yatay eksen değerleri ile örnekleme aralığı sorulur. Daha sonra frekans ekseninin doğrusal veya logaritmik olması arasında bir seçim yapılır. İzgenin görüntüleneceği en küçük ve en büyük frekans değerleri girilir. Bu frekans değerlerini de içermek üzere izge hesabı için kaç adet frekans değerinin kullanılacağı program tarafından sorulur. (4.2.18) dönüşüm çifti, exp( t ) exp 2 2 2 f (4.2.18) ve üstel fonksiyonun Fourier dönüşümü (4.3.2) çifti ile 2 exp( t ) 4 f 2 2 2 (4.3.2) daha önce verilmişti. Zaman fonksiyonları cos(2 f0t ) fonksiyonu ile çarpılarak, yazılım tarafından kullanılan dönüşüm çiftleri aşağıdaki şekilde elde edilmiştir: 2 2 2 f 1 1 exp( t ).cos(2 f0t ) exp * (f f 0 ) (f f 0 ), 2 2 2 2 2 2 2 1 (f f 0 ) (f f 0 ) exp( t ).cos( 2 f0 t ) exp exp, (7.10.1) 2 2 1 1 exp( t ).cos(2 f0t ) * (f f 2 2 2 0 ) (f f 0 ) 4 f 2 2, exp( t ).cos(2 f t ) 0 2 2 2 2 2 2 4 (f f 0 ) 4 (f f 0 ). (7.10.2)
KATLANMA OLUŞMAKTA veri dosyadan okutulacak (1) - sinama verisi (2) >2 en kucuk ve en buyuk zaman degerleri >-2 2 ornekleme araligi >0.2 problem1 - g(k.dt)=exp(-alfa*t*t).cos(2.pi.f0.t) problem2 - g(k.dt)=exp(-alfa*abs(t)).cos(2.pi.f0.t) >2 alfa katsayisini giriniz >0.8 kosinus fonksiyonunun frekansi icin sifir girildiginde sadece ustel fonksiyon hesaplanir kosinus fonksiyonunun frekansini giriniz >4 veri sayisi 21 ornekleme araligi 0.200000 Nyquist frekansi 2.50000 GIRIS VERISI zaman bolgesi veri sayisi = 21 ornekleme araligi = 0.200000 ilk zaman degeri = -2.00000 son zaman degeri = 2.00000 veri uzunlugu (saniye) = 4.00000 frekans ekseni dogrusal (1) veya logaritmik (2) >1 Nyquist frekansi = 2.50000 en kucuk ve en buyuk frekans degerlerini giriniz >-5 5 hesaplanmasi istenilen izge degeri sayisi (tek sayi giriniz) >101 frekans bolgesi veri sayisi = 101.000 frekans ornekleme araligi = 0.100000 veri
DOĞRU HESAPLAMA veri dosyadan okutulacak (1) - sinama verisi (2) >2 en kucuk ve en buyuk zaman degerleri >-2 2 ornekleme araligi >0.1 problem1 - g(k.dt)=exp(-alfa*t*t).cos(2.pi.f0.t) problem2 - g(k.dt)=exp(-alfa*abs(t)).cos(2.pi.f0.t) >2 alfa katsayisini giriniz >0.8 kosinus fonksiyonunun frekansi icin sifir girildiginde sadece ustel fonksiyon hesaplanir kosinus fonksiyonunun frekansini giriniz >4 veri sayisi 41 ornekleme araligi 0.100000 Nyquist frekansi 5.00000 GIRIS VERISI zaman bolgesi veri sayisi = 41 ornekleme araligi = 0.100000 ilk zaman degeri = -2.00000 son zaman degeri = 2.00000 veri uzunlugu (saniye) = 4.0000 frekans ekseni dogrusal (1) veya logaritmik (2) >1 Nyquist frekansi = 5.00000 en kucuk ve en buyuk frekans degerlerini giriniz >-5 5 hesaplanmasi istenilen izge degeri sayisi (tek sayi giriniz) >101 frekans bolgesi veri sayisi = 101.000 frekans ornekleme araligi = 0.100000
ZAMAN-SINIRLI OLMA ÖZELLİĞİ YOK İSE veri dosyadan okutulacak (1) - sinama verisi (2) >2 en kucuk ve en buyuk zaman degerleri >-1 1 ornekleme araligi >0.1 problem1 - g(k.dt)=exp(-alfa*t*t).cos(2.pi.f0.t) problem2 - g(k.dt)=exp(-alfa*abs(t)).cos(2.pi.f0.t) >2 alfa katsayisini giriniz >0.8 kosinus fonksiyonunun frekansi icin sifir girildiginde sadece ustel fonksiyon hesaplanir kosinus fonksiyonunun frekansini giriniz >4 veri sayisi 21 ornekleme araligi 0.100000 Nyquist frekansi 5.00000 GIRIS VERISI zaman bolgesi veri sayisi = 21 ornekleme araligi = 0.100000 ilk zaman degeri = -1.00000 son zaman degeri = 1.00000 veri uzunlugu (saniye) = 2.00000 frekans ekseni dogrusal (1) veya logaritmik (2) >1 Nyquist frekansi = 5.00000 en kucuk ve en buyuk frekans degerlerini giriniz >-5 5 hesaplanmasi istenilen izge degeri sayisi (tek sayi giriniz) >101 frekans bolgesi veri sayisi = 101.000 frekans ornekleme araligi = 0.100000
ZAMAN-SINIRLI OLMA ÖZELLİĞİ YOK İSE veri dosyadan okutulacak (1) - sinama verisi (2) >2 en kucuk ve en buyuk zaman degerleri >-0.5 0.5 ornekleme araligi >0.1 problem1 - g(k.dt)=exp(-alfa*t*t).cos(2.pi.f0.t) problem2 - g(k.dt)=exp(-alfa*abs(t)).cos(2.pi.f0.t) >2 alfa katsayisini giriniz >0.8 kosinus fonksiyonunun frekansi icin sifir girildiginde sadece ustel fonksiyon hesaplanir kosinus fonksiyonunun frekansini giriniz >0 veri sayisi 11 ornekleme araligi 0.100000 Nyquist frekansi 5.00000 GIRIS VERISI zaman bolgesi veri sayisi = 11 ornekleme araligi = 0.100000 ilk zaman degeri = -0.500000 son zaman degeri = 0.500000 veri uzunlugu (saniye) = 1.00000 frekans ekseni dogrusal (1) veya logaritmik (2) >1 Nyquist frekansi = 5.00000 en kucuk ve en buyuk frekans degerlerini giriniz >-5 5 hesaplanmasi istenilen izge degeri sayisi (tek sayi giriniz) >101 frekans bolgesi veri sayisi = 101.000 frekans ornekleme araligi = 0.100000
KATLANMA OLUŞMAKTA dosyadan okutulacak (1) - sinama verisi (2) >2 en kucuk ve en buyuk zaman degerleri >-3 3 ornekleme araligi >0.2 problem1 - g(k.dt)=exp(-alfa*t*t).cos(2.pi.f0.t) problem2 - g(k.dt)=exp(-alfa*abs(t)).cos(2.pi.f0.t) >1 alfa katsayisini giriniz >2 kosinus fonksiyonunun frekansi icin sifir girildiginde sadece ustel fonksiyon hesaplanir kosinus fonksiyonunun frekansini giriniz >3 veri sayisi 31 ornekleme araligi 0.200000 Nyquist frekansi 2.50000 GIRIS VERISI zaman bolgesi veri sayisi = 31 ornekleme araligi = 0.200000 ilk zaman degeri = -3.00000 son zaman degeri = 3.00000 veri uzunlugu (saniye) = 6.00000 frekans ekseni dogrusal (1) veya logaritmik (2) >1 Nyquist frekansi = 2.50000 en kucuk ve en buyuk frekans degerlerini giriniz >-5 5 hesaplanmasi istenilen izge degeri sayisi (tek sayi giriniz) >101 frekans bolgesi veri sayisi = 101.000 frekans ornekleme araligi = 0.100000
DEPREM İVME VERİSİNİN FOURİER DÖNÜŞÜMÜ LOGARİTMİK EKSEN veri dosyadan okutulacak (1) - sinama verisi (2) >1 dosya no dosya adi 1 bolewtm1.dat 2 bolnstm1.dat 3 bolvtm1.dat 4 duzewtm1.dat 5 duznstm1.dat 6 duzvtm1.dat dosya numarasi giriniz >1 veri sayisi 1500 ornekleme araligi 0.0100000 Nyquist frekansi 50.0000 GIRIS VERISI zaman bolgesi veri sayisi = 1500 ornekleme araligi = 0.0100000 ilk zaman degeri = 1.95503e-005 son zaman degeri = 14.9904 veri uzunlugu (saniye) = 14.9903 frekans ekseni dogrusal (1) veya logaritmik (2) >2 Nyquist frekansi = 50.0000 en kucuk ve en buyuk frekans degerlerini giriniz >0.1 10 hesaplanmasi istenilen izge degeri sayisi (tek sayi giriniz) >501 frekans bolgesi veri sayisi = 501.000 frekans ornekleme orani = 1.00925
;program 4dft ;bu program gercel bir zaman verisinin Fourier donusumunu hesaplar LOADCT, 2, /silent USERSYM, [-.5,.5],[0,0] A=FINDGEN(16)*(!pi*2/16.) USERSYM, COS(A), SIN(A), /Fill basla: read,'programi devam ettirmek icin sifir giriniz >',n ;bütün pencereleri kapat while (!D.WINDOW GE 0) DO WDELETE,!D.WINDOW if n ne 0 then goto, son read, 'veri dosyadan okutulacak (1) - sinama verisi (2) >', vcins if vcins lt 1 or vcins gt 2 then goto, basla if vcins eq 1 then begin ;diskdeki dosyalari goruntule da=findfile('*.dat') da=strlowcase(da) nd=n_elements(da) nds=intarr(nd) nds=sort(da) print, ' dosya no dosya adi' for i=0, nd-1 do print, i+1,' ', da(nds(i)) baslangic: read, 'dosya numarasi giriniz >', dn if dn lt 1 or dn gt nd then goto, baslangic ;olculen veriyi oku dosya=da(nds(dn-1)) status=dc_read_free(dosya, x, y, /Col, Resize=[1,2]) ;veri sayisi n=n_elements(y) dt=y(0) n=n-1 t=fltarr(n) g=fltarr(n) t(0:n-1)=x(1:n) g(0:n-1)=y(1:n) endif if vcins eq 2 then begin ;sinama verisi yarat
read, ' en kucuk ve en buyuk zaman degerleri >',tk, tb read, 'ornekleme araligi >',dt n=nint((tb-tk)/dt)+1 t=findgen(n)*dt+tk problem: print, 'problem1 - g(k.dt)=exp(-alfa*t*t).cos(2.pi.f0.t)' print, 'problem2 - g(k.dt)=exp(-alfa*abs(t)).cos(2.pi.f0.t)' read, ' >',nprp if nprp lt 1 or nprp gt 2 then goto, problem read, 'alfa katsayisini giriniz >',alfa print, 'kosinus fonksiyonunun frekansi icin sifir girildiginde' print, 'sadece Gaussian veya ustel fonksiyon hesaplanir' read,'kosinus fonksiyonunun frekansini giriniz >', f0 if nprp eq 1 then g=exp(-alfa*t*t)*cos(2.*!pi*f0*t) if nprp eq 2 then g=exp(-alfa*abs(t))*cos(2.*!pi*f0*t) ;giris verisini dosyaya yaz ;dosya='ustel1.dat' ;print, dosya ;openw, 2, dosya ;printf, 2, t(0), dt ;for i=0, n-1 do printf, 2, T(i), G(i) ;close, 2 ; deneme verisi yaratma ve yazma bitti endif ;hesaplama buradan itibaren baslar fn=0.5/dt print, 'veri sayisi', n print, 'ornekleme araligi', dt print, 'Nyquist frekansi', fn print PRINT, 'GIRIS VERISI' PRINT, 'zaman bolgesi veri sayisi = ', n PRINT, 'ornekleme araligi = ', DT PRINT, 'ilk zaman degeri = ', t(0) PRINT, 'son zaman degeri = ', t(n-1) PRINT, 'veri uzunlugu (saniye) = ', t(n - 1)-t(0) print ymin= min(g)-0.2 ymax=max(g) ymax=ymax+(ymax/5. < 1.)
!P.Multi=0 window, 0, xsize=600, ysize=300 plot, t, g, color=0, /Nodata, Background=-1, $ xrange=[t(0), t(n-1)], yrange=[ymin, ymax], Charsize=1., XStyle=1, YStyle=1,$ Title = 'zaman fonksiyonu', XTitle = ' Zaman (sn) ', YTitle = 'Genlik' if vcins eq 1 then begin oplot, t, g, color=-4850, Thick=2 endif else begin oplot, t, g, Symsize =0.6, Psym = -8, color=-4850, Thick=2 endelse PRINT, 'frekans ekseni dogrusal (1) veya logaritmik (2)' read, ' >', fcins PRINT, 'Nyquist frekansi = ', fn frekans: read, 'en kucuk ve en buyuk frekans degerlerini giriniz >', fk, fb IF fb le fk THEN goto, frekans read, ' hesaplanmasi istenilen izge degeri sayisi (tek sayi giriniz) >',mf if fcins eq 2 and fk le 0. then fk=0.1 if fcins eq 2 and fb le 0. then fb=10. f=fltarr(mf) F(0) = FK IF fcins EQ 1 THEN begin DF = (FB - FK) / (MF - 1.) for i=1, mf-1 do F(I) = F(I - 1) + DF endif else begin DF = (FB / FK)^(1./ (MF - 1.)) for i=1, mf-1 do F(I) = F(I - 1) * DF endelse gercel=fltarr(mf) sanal=fltarr(mf) FOR JO = 0, MF-1 do begin FF = F(JO) SR = g(0) * COS(2 *!PI * FF * t(0)) / 2 SI = g(0) * SIN(2 *!PI * FF * t(0)) / 2
FOR I = 1, N - 2 do begin SR = SR + g(i) * COS(2 *!pi * T(i) * FF) SI = SI + g(i) * SIN(2 *!PI * T(i) * FF) endfor SR = SR + g(n-1) * COS(2 *!PI * FF * t(n - 1)) / 2 SI = SI + g(n-1) * SIN(2 *!PI * FF * t(n - 1)) / 2 gercel(jo) = SR sanal(jo) = -SI endfor ;zaman sinirli veri gercel = DT * gercel sanal = DT * sanal ;periyodik veri ; gercel = gercel/n ; sanal = sanal/n!p.multi=[0,1,3] ;;window, 1, xsize=600, ysize=800 window, 1, xsize=600, ysize=650 gnlk=sqrt(gercel*gercel+sanal*sanal) ymin= nint(min(gercel)<min(sanal))-1 ymax= nint(max(gnlk))+1. IF fcins EQ 1 THEN begin if vcins eq 1 then begin plot, f, gnlk, color=0, /Nodata, Background=-1, XStyle=1, YStyle=1, $ xrange=[fk, fb], yrange=[0, ymax], Charsize=2, $ Title = '<Genlik Spektrumu>', XTitle = ' Frekans (Hz) ', YTitle = 'Genlik' oplot, f, gnlk, Symsize =0.5, Psym = -8, color=-4850 endif if vcins eq 2 then begin npd=3.*n>251 dfpd=(fb-fk)/(npd-1) fpd=findgen(npd)*dfpd+fk if nprp eq 1 then begin pd=0.5*sqrt(!pi/alfa)*(exp(-!pi*!pi*(fpd+f0)*(fpd+f0)/alfa)+exp(-!pi*!pi*(fpd-f0)*(fpd-f0)/alfa)) endif if nprp eq 2 then begin pd=alfa/(alfa*alfa+4.*!pi*!pi*(fpd+f0)*(fpd+f0))+alfa/(alfa*alfa+4.*!pi*!pi*(fpd-f0)*(fpd-f0)) endif ymax=ymax>max(pd)
plot, f, gnlk, color=0, /Nodata, Background=-1, XStyle=1, YStyle=1, $ xrange=[fk, fb], yrange=[0, ymax], Charsize=2, $ Title = '<Genlik Spektrumu> Hesaplanan (Mavi 0) ve Surekli (Kirmizi -)', XTitle = ' Frekans (Hz) ', YTitle = 'Genlik' oplot, fpd, pd, Thick=2, color=75 oplot, f, gnlk,symsize =0.6, Psym = 8, color=-4850 ;Donusum degerlerini diske yaz ;status=dc_write_free('ustel1af.dat', f, gnlk, /Column, Delim=' ') ;status=dc_write_free('ustel1bf.dat', fpd, pd, /Column, Delim=' ') endif ;plot, f, atan(sanal/gercel) plot, f, gercel, color=0, /Nodata, Background=-1, XStyle=1, YStyle=1, $ xrange=[fk, fb], yrange=[ymin, ymax], Charsize=2, Title = 'Gercel Bilesen', $ XTitle = ' Frekans (Hz) ', YTitle = 'Gercel' oplot, f, gercel,symsize =0.5, Psym = -8, color=-4850 plot, f, sanal, color=0, /Nodata, Background=-1, XStyle=1, YStyle=1, $ xrange=[fk, fb], yrange=[ymin, ymax], Charsize=2, Title = 'Sanal Bilesen', $ XTitle = ' Frekans (Hz) ', YTitle = 'Gercel' oplot, f, sanal,symsize =0.5, Psym = -8, color=-4850 endif else begin plot_oi, f, gnlk, color=0, /Nodata, Background=-1, XStyle=1, YStyle=1, $ xrange=[fk, fb], yrange=[0, ymax], Charsize=2,$ Title = 'Genlik Spektrumu', XTitle = ' Frekans (Hz) ', YTitle = 'Genlik' oplot, f, sqrt(gercel*gercel+sanal*sanal),symsize =0.5, Psym = -8, color=-4850 plot_oi, f, gercel, color=0, /Nodata, Background=-1, XStyle=1, YStyle=1, $ xrange=[fk, fb], yrange=[ymin, ymax], Charsize=2, Title = 'Gercel Bilesen', $ XTitle = ' Frekans (Hz) ', YTitle = 'Gercel' oplot, f, gercel, Symsize =0.5, Psym = -8, color=-4850 plot_oi, f, sanal, color=0, /Nodata, Background=-1, XStyle=1, YStyle=1, $ xrange=[fk, fb], yrange=[ymin, ymax], Charsize=2, Title = 'Sanal Bilesen', $ XTitle = ' Frekans (Hz) ', YTitle = 'Gercel' oplot, f, gercel, Symsize =0.5, Psym = -8, color=-4850 ;Donusum degerlerini diske yaz ;status=dc_write_free('veri1f.dat', f, gnlk, /Column, Delim=' ') endelse PRINT, 'frekans bolgesi veri sayisi = ', MF IF fcins EQ 1 THEN begin PRINT, 'frekans ornekleme araligi = ', DF endif
IF fcins EQ 2 THEN begin PRINT, 'frekans ornekleme orani = ', DF endif goto, basla son: end