PHỤ LỤC B. Chương trình mô phỏng

Một phần của tài liệu Tán xạ Raman kích thích (Trang 73 - 101)

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"

Một phần của tài liệu Tán xạ Raman kích thích (Trang 73 - 101)

Tải bản đầy đủ (DOC)

(101 trang)
w