0 100ps,A 50 m T = eff = µ tại z=500 m.
Khác hẳn với sóng Stoke phổ của sóng bơm không bị ảnh hưởng bởi sóng Stoke mà chỉ bị ảnh hưởng do hiệu ứng điều chế tự dịch pha (SPM) [1]. Đồng thời dạng của sóng bơm trên miền thời gian cũng gần như không đổi dọc theo cự ly truyền dẫn.
3.3.3 Đặc tuyến công suất
Hình (3.10) là kết quả mô phỏng quá trình chuyển từ công suất bơm sang công suất tín hiệu trên sợi quang dài 3 km với hệ số suy hao là 0.2 dB/km, công suất bơm Pp=10 W. Kết quả này thu được từ việc giải hệ hai phương trình (2.19) và (2.20). Để giải chính xác hệ hai phương trình này, chương trình mô phỏng sử dụng hàm ode45 có sẵn trong Matlab cho phép giải hệ phương trình vi phân cấp 1.
Hình 3.10-Quá trình chuyển đổi từ công suất bơm sang công suất tín hiệu gây ra bởi hiệu ứng tán xạ Raman kích thích.
Đồ án tốt nghiệp Đại học Kết luận
KẾT LUẬN
Vấn đề nghiên cứu ảnh hưởng của hiệu ứng tán xạ Raman kích thích lên chất lượng truyền dẫn trong hệ thống thông tin quang đang là một vấn đề có tính thời sự. Chính hiệu ứng này đã gây nên một loại các hiện tượng như thay đổi phổ tín hiệu quang, gây nhiễu trong hệ thống thông tin quang đồng thời cũng được ứng dụng trong việc khuyếch đại tín hiệu quang. Khi công suất tín hiệu truyền trong sợi quang càng lớn thì ảnh hưởng của SRS càng rõ nét.
Từ việc thực hiện đồ án “Tán xạ Raman kích thích”, có thể rút ra một số kết quả: 1. Nghiên cứu quá trình tán xạ Raman khi ánh sáng truyền trong môi trường sợi quang, các đặc tính của tán xạ Raman kích thích như phổ khuyếch đại Raman, tăng ích quang Raman, ngưỡng Raman.
2. Trình bày các ảnh hưởng của tán xạ Raman kích thích trong hệ thống thông tin quang bao gồm ảnh hưởng của SRS đến dạng xung trong hệ thống đơn kênh, các ảnh hưởng của SRS đến hệ thống WDM như xuyên âm, thay đổi công suất đầu ra của các kênh trong hệ thống WDM và cách khắc phục những ảnh hưởng này.
3. Trình bày khả năng sử dụng tán xạ Raman kích thích trong khuyếch đại tín hiệu quang, cấu trúc và ứng dụng của các bộ khuyếch đại quang Raman trong mạng thông tin quang.
4. Xây dựng thành công chương trình mô phỏng để làm rõ hơn nhưng đặc tính của tán xạ Raman kích thích, dựa theo phương trình Schrodinger phi tuyến chương trình đã tính toán và vẽ được dạng của sóng bơm và sóng Stoke trên miền thời gian và miền tần số. Chương trình cũng vẽ được chính xác đặc tuyến công suất qua đó làm rõ được quá trình chuyển đổi công suất từ sóng bơm sang sóng Stoke.
Do tán xạ Raman kích thích là một vấn đề rất rộng nên nội dung đồ án chưa thể đề cập đến mọi vấn đề liên quan. Hướng phát triển tiếp theo của đồ án là tiếp tục tìm hiểu sâu hơn nữa những ảnh hưởng và khả năng ứng dụng của tán xạ Raman kích thích, hoàn thiện chương trình mô phỏng, tìm cách tối ưu hơn nữa thuật toán mô phỏng để có thể thu được những kết quả mô phỏng chính xác hơn.
Đồ án tốt nghiệp Đại học Tài liệu tham khảo
TÀI LIỆU THAM KHẢO
1. Govind P.Agrawal, Nonlinear fiber optics, Academic Press, Inc, 1995.
2. Govind P.Agrawal, Fiber optic communications system, John Wiley & Son, Inc, 2000.
3. G. Van Simaeys, Philippe Emplit, IEEE, Unified description of stimulated-Raman- scattering and four-wave mixing in wavelength-division-multiplexed systems, IEEE Photon, December 1996.
4. Chirstopher M. McIntosh, Alexandra G. Grandpierre, Dematrios N. Christodoulide, Eliminating SRS Channel Depletion in Massive WDM Systems via Optical Filtering Techniques, IEEE Photonics Tech. Letters, Vol. 13, No. 4, April 2001.
5. Mohammed N. Islam, Raman Amplifiers for Telecommunications, IEEE Journal of Selected Topics in Quantum Electronics, Vol. 8, No. 3, May/June 2002.
6. Hoàng duy Hân, Nghiên cứu các hiệu ứng phi tuyến trong sợi quang, Đồ án tốt nghiệp khoá 45, Đại học bách khoa Hà Nội.
7. Nguyễn vĩnh Nam, Vũ văn San, Trần thị thuỷ Bình, Võ đức Hùng, Trần hoàng Diệu, Đỗ thị Nhàn, Nghiên cứu ảnh hưởng của các hiệu ứng phi tuyến tới chất lượng truyền dẫn trong thông tin quang, Đề tài 13-2000-HV-R-DT, Viện khoa học kỹ thuật bưu điện.
Đồ án tốt nghiệp Đại học Phụ lục
CHƯƠNG 4: PHỤ LỤC A. Phương pháp biến đổi Fourier rời rạc
Phương pháp biến đổi Fourier rời rạc hay còn gọi là phương pháp biến đổi Fourier nhanh (FFT-Fast Fourier Tranform) được cho bởi công thức sau:
∑− = − = 1 0 2 N k N kn i k n h e H π (A.1) Trong đó hk,Hn lần lượt là các giá trị rời rạc của hàm h trên miền thời gian và miền tần số với số mẫu là N. Phương trình (A.1) có thể thu được bằng cách xuất phát từ dạng biến đổi Fourier trên miền liên tục như sau:
(− ) ≈ (− )∆ = ∫ ∑− = +∞ ∞ − 1 0 2 exp 2 exp ) ( ) ( N k k n k n n h t if t dt h if t f H π π n k ikn N H h exp(−2 / )=∆. ∆ = ∑ π (A.2)
Với ∆ là khoảng cách giữa hai mẫu liên tiếp, tk là các thời điểm lấy mẫu, fc là tần số lấy mẫu và fn là tần số mẫu thứ n:
∆ =k. tk ; ∆ = 2 1 c f ; ∆ = N n fn (A.3) ; 1 ..., 2 , 1 , 0 − = N k n=−N/2,...,N/2 (A.4) Ta thấy rằng nếu ∆ càng nhỏ thì phổ tín hiệu thu được càng chính xác. Ngoài ra cũng cần phải chú ý là sau khi tìm được Hn ta phải chuyển về H( )fn thông qua (A.2) để thu được phổ đúng của tín hiệu, quá trình này được gọi là chuẩn hoá.
Tương tự ta tính được hàm biến đổi FFT ngược(IFFT):
N kn N n n k H e N h 1 2 / 0 1 π ∑− = = (A.5)
Và phương trình chuẩn hoá :
( )tk hk
h 1.
∆
Đồ án tốt nghiệp Đại học Phụ lục Từ phương trình (A.1) ta thấy Hn là một dãy tuần hoàn chu kỳ N (Hn+N =Hn) do đó
ta tính toán Hn với n=0÷N-1 hay n=−N/2÷N/2 thì kết quả thu được là như nhau. Vì vậy để tính toán phổ thông thường người ta tính toán Hn với n=0÷N −1 tuy nhiên phổ của tín hiệu (Hn) trong trường hợp này bị lệch đi một nửa bề rộng phổ. Do đó để thu được phổ đúng thì sau khi tính toán xong Hn ta phải dịch phổ đi một nửa bề rộng phổ (FFTShift).
Như vậy để tính toán phổ của tín hiệu theo phương pháp biến đổi Fourier rời rạc ta phải thực hiện qua ba giai đoạn. Ban đầu là ta thực hiện việc biến đổi FFT theo (A.1) sau đó dịch đi một nửa bề rộng phổ (ta sẽ thực hiện hai giai đoạn này bằng cách xây dựng hai hàm FFT và FFTShift) và cuối cùng là thực hiện chuẩn hoá như (A.2) để thu được phổ chính xác.
PHỤ LỤC B. Chương trình mô phỏng
Chương trình mô phỏng được viết băng ngôn ngữ Visual Basic, các thông số nhập vào để tính toán như hình (B.1). Sau đó có thể chọn vẽ dạng của sóng bơm, sóng Stoke trên miền thời gian và miền tần số, vẽ phổ khuyếch đại Raman, đặc tuyến công suất.
Hình B.1- Các tham số cần nhập trong chương trình mô phỏng.
‘****************************************************************** ‘Chương trình mô phỏng được xây dưng bằng ngôn ngữ lập trình Visual Basic kết ‘hợp với công cụ Matlab.
‘Code by :Mai nguyên Dũng Private FontFile As String
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function AddFontResource Lib "gdi32" Alias "AddFontResourceA" (ByVal lpFileName As String) As Long
Private Declare Function RemoveFontResource Lib "gdi32" Alias "RemoveFontResourceA" (ByVal lpFileName As String) As Long
Dim showmatLab As Boolean Dim useMatlab As Boolean Private Type complex real As Double img As Double End Type Dim obj1 Dim j As Integer Dim dt As Double Dim tm As Double Const n2 = 2.67 * 10 ^ -20 Const pi = 3.14159265358979 ' 3.1416 Const c = 3 * 10 ^ 8 Const h = 6.625 * 10 ^ -34 Const t11 = 12.2 * 10 ^ -15 Const t22 = 32 * 10 ^ -15
Dim Pp As Double, T0 As Double, z As Double
Dim lamdap As Double, lamdas As Double ‘Bước sóng bơm và sóng Stoke Dim Aeff As Double
Dim chisomax As Integer Dim SRSPump As Boolean
Dim Peakp As Double, Peaks As Double, Pth As Double, Ps As Double Dim gR As Double, gs As Double, gp As Double
Dim gamap As Double, gamas As Double, delta As Double, d As Double Dim aso(1024) As Double, phis(1024) As Double, asz(1024) As complex Dim apo(1024) As Double, phip(1024) As Double, apz(1024) As complex Dim aszT(1024) As Double, apzT(1024) As Double
Dim label_xs As String, label_ys As String 'Chú giải trên các trục-Stoke Dim label_xp As String, label_yp As String 'Chú giải trên các trục- Pump Dim label_x As String, label_y As String
Dim ti_le_xs As Double, ti_le_ys As Double 'Ti le do thi xung Stoke Dim ti_le_xp As Double, ti_le_yp As Double
Dim fre(1024) As Double 'Các mẫu tần số Dim t(1024) As Double
Dim tp1(1024) As Double, ts1(1024) As Double
Dim newDraw As Boolean 'Cho biet ve tren mot do thi moi hay khong Dim Lw As Double 'Chiều dài Walk-Off
‘********************Hàm RamanGain******************* Private Function RamanGain(ByVal lamdap As Double, ByVal df As Double) ‘Hàm tính hệ số khuyếch đại Raman với bước sóng bơm lamdap
Dim k As Double, w As Double, tu As Double, mau As Double k = 1 / t11 ^ 2 + 1 / t22 ^ 2
w = 2 * pi * Abs(df) tu = 2 * w / t22
mau = (k - w ^ 2) ^ 2 + (2 * w / t22) ^ 2
RamanGain = 0.18 * 16 * pi * n2 / (3 * lamdap) * k * tu / mau End Function
‘********************Hàm beta*********************** Private Function beta(lamda As Double) As Double
Dim b(3) As Double, n As Double, wdn As Double b(1) = 0.6961663 b(2) = 0.4079426 b(3) = 0.8974794 Dim l(3) As Double l(1) = 0.0684943 l(2) = 0.1162414 l(3) = 9.896161
Dim O(3) As Double, i As Integer, Om As Double For i = 1 To 3
Next i
Om = 2 * pi * c / (lamda * 10 ^ 6) n = 1
wdn = 0 For i = 1 To 3
n = n + (b(i) * O(i) ^ 2) / (O(i) ^ 2 - Om ^ 2)
wdn = wdn + (b(i) * O(i) ^ 2 * Om ^ 2) / (O(i) ^ 2 - Om ^ 2) ^ 2 Next i n = n ^ 0.5 beta = (n + wdn / n) / c 'beta = n End Function ‘********************Hàm Poeff***********************
Private Function Poeff(ByVal Aeff As Double, ByVal Po As Double, ByVal z As Double, ByVal lamdap As Double)
‘Hàm tính công suất sóng Stoke ban đầu
Dim k As Double, w As Double, tu As Double, mau As Double k = 1 / t11 ^ 2 + 1 / t22 ^ 2 Dim df As Double df = Val(txtDodichtan) * 10 ^ 12 w = 2 * pi * Abs(df) tu = 2 * w / t22 mau = (k - w ^ 2) ^ 2 + (2 * w / t22) ^ 2 lamdas = c / (c / lamdap - df)
Dim dtu As Double, dmau As Double, d2mau As Double, d2g As Double, g2p As Double
dmau = 4 * w ^ 3 + 8 * w / (t22 ^ 2) - 4 * k * w dtu = 2 / t22
d2mau = 12 * w ^ 2 + 8 / t22 ^ 2 - 4 * k
d2g = Abs(d2tu / mau - d2mau * tu / mau ^ 2 - 2 * dtu * dmau / mau ^ 2 + 2 * (dmau) ^ 2 * tu / mau ^ 3)
g2p = 0.155 * 16 * pi * n2 / (3 * lamdap) * k * d2g Poeff = h * df * (2 * pi * Aeff / (g2p * Po * z)) ^ 0.5 End Function
‘********************Hàm ve_xung_vao()*********************** Private Function ve_xung_vao()
‘Ve xung vao
Dim Tmv As Double, i As Integer, dtv As Double
Dim tv(1024) As Double, yv(1024) As Double, tv1(1024) As Double Tmv = 20 * T0 dtv = Tmv / 1023 For i = 1 To 1024 tv(i) = (-Tmv / 2 + (i - 1) * dtv) tv1(i) = tv(i) / T0 yv(i) = sqrt(Ps) * Exp(-(tv1(i) ^ 2 / 2)) Next i ti_le_x = tinh_ti_le(MaxT(tv)) ti_le_y = tinh_ti_le(MaxT(yv)) For i = 1 To 1024
tv(i) = tv(i) * 10 ^ ti_le_x yv(i) = yv(i) * 10 ^ ti_le_y Next i
label_x = "Time ,s x 10" & showScript(-ti_le_x) label_y = "V x 10" & showScript(-ti_le_y) Ve_truc_toa_do MaxT(tv) + 1, MaxT(yv) + 1 For i = 1 To 1024 Next i Plot tv, yv, 1, 1 Form2.Labelx.Caption = label_x Form2.Labely.Caption = label_y End Function ‘********************Hàm Tinh_toan_thong_so()*********************** Private Function Tinh_toan_thong_so()
‘Tính toán các giá trị người sử dụng nhập vào Form2.Labelx.Caption = ""
Form2.Labely.Caption = "" Pp = Val(txtPp.Text)
T0 = Val(txtT0) * 10 ^ -12
lamdap = (10 ^ -6) * Val(txtLamdaP) z = Val(Text1.Text)
Aeff = Val(txtAeff.Text) * (10 ^ -12)
gR = RamanGain(lamdap, Val(txtDodichtan) * 10 ^ 12) lamdas = c / (c / lamdap - Val(txtDodichtan) * 10 ^ 12) gamap = gama(Aeff, lamdap)
gamas = gama(Aeff, lamdas)
Ps = Poeff(Aeff, Pp, z, lamdap) If (z <> 0) Then Pth = 16 * Aeff / (z * gR) End If gs = gR / Aeff gp = (lamdap / lamdas) * gs d = beta(lamdap) - beta(lamdas) Lw = T0 / d delta = z * d / T0 End Function ‘********************Hàm SRS()***********************
Private Function SRS(fc As Double, pSample As Integer, ntype As Integer, nNo As Integer)
Dim max_x As Double, max_y As Double, i As Integer If (Pp >= Pth) And (z <> 0) Then
If Check1.Value = 1 Then
DrawStoke 1024, OptMienthoigian.Value
If OptMienthoigian.Value = True Then 'Neu la mien thoi gian For i = 1 To 1024
ts1(i) = ts1(i) * 10 ^ ti_le_xs aszT(i) = aszT(i) * 10 ^ ti_le_ys Next i
max_x = MaxT(ts1) + 1 max_y = MaxT(aszT) + 1 label_x = label_xs
label_y = label_ys
Ve_truc_toa_do max_x, max_y
Plot ts1, aszT, MaxT(ts1) + 1, MaxT(aszT) + 1, label_xs, label_ys Else 'Neu la mien tan so
For i = 1 To 1024
fre(i) = fre(i) * 10 ^ ti_le_xs aszT(i) = aszT(i) * 10 ^ ti_le_ys Next i
max_x = MaxT(fre) + 1 max_y = MaxT(aszT) + 1 label_x = label_xs
label_y = label_ys
Ve_truc_toa_do max_x, max_y
Plot fre, aszT, MaxT(fre) + 1, MaxT(aszT) + 1, label_xs, label_ys End If
Else 'Nếu cần vẽ xung Pump
DrawPump 1024, OptMienthoigian.Value
If OptMienthoigian.Value = True Then 'Neu ve o mien thoi gian For i = 1 To 1024
tp1(i) = tp1(i) * 10 ^ ti_le_xp apzT(i) = apzT(i) * 10 ^ ti_le_yp Next i
max_x = MaxT(tp1) + 1 max_y = MaxT(apzT) + 1 label_x = label_xp
label_y = label_yp
Ve_truc_toa_do max_x, max_y
Plot tp1, apzT, (tm / 2) * 10 ^ ti_le_x, Round(MaxT(apzT)) * 10 ^ ti_le_y + 1, label_xp, label_y
Else 'Neu la mien tan so For i = 1 To 1024
fre(i) = fre(i) * 10 ^ ti_le_xp apzT(i) = apzT(i) * 10 ^ ti_le_yp
Next i
max_x = 2 * fre(1024) max_y = MaxT(apzT) + 1 label_x = label_xp
label_y = label_yp
Ve_truc_toa_do max_x, max_y
Plot fre, apzT, 2 * fre(pSample), MaxT(apzT) + 1, label_x, label_y End If
End If End Function
‘********************Hàm Ve_hai_xung()*********************** Private Function Ve_hai_xung()
‘Vẽ hai xung trên miền thời gian Form2.Labelx.Caption = "" Form2.Labely.Caption = "" Form2.LblBuocsong.Caption = "" Form2.lblKhoangcach.Caption = "" newDraw = True
Dim tilex As Double, tiley As Double Dim i As Integer
Tinh_toan_thong_so
Dim max_x As Double, max_y As Double If (Pp >= Pth) And (z <> 0) Then
Ps = Poeff(Aeff, Pp, z, lamdap) DrawPump 1024, True
DrawStoke 1024, True If ti_le_xp < ti_le_xs Then tilex = ti_le_xp
Else
tilex = ti_le_xs End If
If ti_le_yp < ti_le_ys Then tiley = ti_le_yp
Else
tiley = ti_le_ys End If
For i = 1 To 1024
ts1(i) = ts1(i) * 10 ^ tilex aszT(i) = aszT(i) * 10 ^ tiley tp1(i) = tp1(i) * 10 ^ tilex apzT(i) = apzT(i) * 10 ^ tiley Next i
If MaxT(ts1) > MaxT(tp1) Then max_x = MaxT(ts1)
Else
max_x = MaxT(tp1) End If
If MaxT(aszT) > MaxT(apzT) Then max_y = MaxT(aszT) Else max_y = MaxT(apzT) End If max_y = Round(max_y) + 1 label_x = label_xp label_y = label_yp
Ve_truc_toa_do max_x, max_y Form2.Picture1.ForeColor = vbRed
Plot tp1, apzT, max_x, max_y, label_xp, label_yp Form2.Picture1.ForeColor = vbBlack
Plot ts1, aszT, max_x, max_y, label_xp, label_yp Form2.Labelx.Caption = label_x
Form2.Labely.Caption = label_y
Form2.lblKhoangcach.Caption = "z=" & z & "m"
Form2.lblChugiai.Caption = "H×nh 1 Sãng b¬m vµ sãng Stoke ë cù ly " & z & " m"
End Function
‘********************Hàm DrawPump()***********************
Private Function DrawPump(ByVal pSample As Integer, Optional timedomain As Boolean = True, Optional ByVal fc As Integer = 0)
‘Tính toán sóng bơm Dim i As Integer
Dim max1 As Double
Dim temp1 As Double, temp2 As Double If timedomain = True Then
tm = 20 * T0 Else tm = 100 * T0 End If dt = tm / (pSample - 1) For i = 1 To pSample tp1(i) = (-tm / 2 + (i - 1) * dt) t(i) = tp1(i) / T0
apo(i) = (Pp ^ 0.5) * Exp(-0.5 * t(i) ^ 2) If (Pp < Pth) Or (z = 0) Then
phip(i) = -gamap * z * apo(i) ^ 2 apz(i).real = apo(i) * Cos(phip(i)) apz(i).img = apo(i) * Sin(phip(i))
imgProcess.Width = picProcess.Width / pSample * i Else
If useMatlab = False Then
phip(i) = Ps * sqrt(pi) / (2 * delta) * (erf(t(i) + delta) - erf(t(i))) Else
phip(i) = tinhPhip(delta, t(i)) End If
temp1 = Cos(gamap * z * (apo(i) ^ 2 + 2 * phip(i))) temp2 = Sin(gamap * z * (apo(i) ^ 2 + 2 * phip(i))) apz(i).real = apo(i) * Exp(-gp * z / 2 * phip(i)) * temp1 apz(i).img = -apo(i) * Exp(-gp * z / 2 * phip(i)) * temp2
imgProcess.Width = picProcess.Width / pSample * i End If Next i Peakp = TimMax(apz) max1 = MaxT(tp1) ti_le_xp = tinh_ti_le(max1) ti_le_yp = tinh_ti_le(Peakp)
label_xp = "10" & showScript((-tinh_ti_le(max1))) label_yp = "10" & showScript((-tinh_ti_le(Peakp))) If timedomain = True Then ‘Vẽ trên miền thời gian For i = 1 To pSample
apzT(i) = Modul(apz(i)) '* (10 ^ ti_le_yp) tp1(i) = tp1(i) '* (10 ^ ti_le_xp)
Next i
If ti_le_xp <> 0 Then
label_xp = "Time,s x" & label_xp Else
label_xp = "Time,s" End If
If ti_le_yp <> 0 Then
label_yp = "Amplifier V x" & label_yp Else
label_yp = "Amplifier V" End If
Else 'Vẽ trên miền tần số
Dim apzF() As complex, aps() As complex ReDim apzF(pSample) As complex
ReDim aps(pSample) As complex
FFT apz, apzF ‘Biến đổi sang miền tần số
FFTShift apzF, aps ‘Dịch đi một nửa bề rộng phổ For i = 1 To pSample
apzT(i) = (dt * Modul(aps(i))) ^ 2 Next i
max_y = MaxT(apzT) ti_le_yp = tinh_ti_le(max_y) For i = 1 To pSample
apzT(i) = (dt * Modul(aps(i))) ^ 2 '* 10 ^ ti_le_yp Next i
For i = 1 To pSample
fre(i) = (fc + (-(pSample - 1) / 2 + i - 1) / (pSample * dt)) '* 10 ^ -11 Next i
max_x = MaxT(fre)
ti_le_xp = tinh_ti_le(max_x) For i = 1 To pSample
fre(i) = fre(i) '* 10 ^ ti_le_xp Next i
If ti_le_xp <> 0 Then
label_xp = "Frequency(f-f0),Hz x" & "10" & showScript(-ti_le_xp) Else
label_xp = "Frequency(f-f0),Hz" End If
If ti_le_yp <> 0 Then
label_yp = "Power, W x" & "10" & showScript((-ti_le_yp)) Else label_yp = "Power, W" End If End If End Function