پرش به محتوا
آکادمی پست پروسس یارآکادمی پست پروسس یار
  • دسته بندی
    • آنالیز داده
    • برنامه نويسي
    • پست پروسس
    • شبکه 5G
    • شبکه GSM
    • شبکه LTE
    • شبکه WCDMA
  • خانه
  • بلاگ
  • درباره ما
  • تماس با ما
0

در حال حاضر خالی است: ریال0

ادامه‌ی خرید

استارتش رو بزن!
آکادمی پست پروسس یارآکادمی پست پروسس یار
  • خانه
  • بلاگ
  • درباره ما
  • تماس با ما

محاسبه پایلوت‌پلوشن در شبکه 3G با استفاده از ابزار SWISSQUAL

  • خانه
  • یادگیری
  • محاسبه پایلوت‌پلوشن در شبکه 3G با استفاده از ابزار SWISSQUAL
Breadcrumb Abstract Shape
Breadcrumb Abstract Shape
Breadcrumb Abstract Shape
یادگیری

محاسبه پایلوت‌پلوشن در شبکه 3G با استفاده از ابزار SWISSQUAL

  • 24 خرداد, 1403
  • نظرات 0
پایلوت پلوشن

ابتدا باید در مورد پایلوت‌پلوشن توضیح بدهم و در واقع اگر همه چیز را عمیقاً توضیح بدهم این مقاله را تا آخر نمی خوانید. پیش فرض من این است، اطلاعات اولیه در مورد شبکه های تلفن همراه، به ویژه شبکه های WCDMA را می دانید. اما من باید چند کلمه کلیدی را توضیح دهم. پس از آن، ما در مورد پایلوت‌پلوشن و تجزیه و تحلیل این پدیده خواهیم دانست.

همانطور که گفتم، من پش‌فرض را بر این قرار می ‌دهم که در مورد KPIهای اصلی WCDMA مانند RSCP که قدرت سیگنال شبکه را نشان می دهد و Ec/Io که کیفیت شبکه را نشان می دهد، می دانید و باید KPI های زیر را توضیح بدهم

سافت هندور(Soft Handover)

بر اساس دانش ما در مورد شبکه های تلفن همراه، در هر نوع شبکه تلفن همراه یک ویژگی وجود دارد که نام آن Handover است، اما در WCDMA، بر اساس ماهیت شبکه 3G، نوع دیگری از دست به دست کردن سرویس یا Handover وجود دارد که نام آن Soft-handover است. این ویژگی به شما امکان می دهد از سرویسی مانند WCDMA (صدا یا داده) هنگام حرکت استفاده کنید. این ویژگی سرویس شما را پایدار می کند و می توانید از 2 تا 3 سل(بر اساس تنظیمات شبکه می تواند 4 باشد، اما معمولاً آن را روی 3 سل تنظیم می کنند) به طور همزمان استفاده کنید تا منطقه را ترک کنید و شما را وصل کند به سل دیگر. و همچنین قانونی برای امتیاز دهی سلول ها (1، 2، 3) وجود دارد که شبکه آنها را بر اساس Ec/Io رتبه بندی می کند، بنابراین اگر 3 سل برای استفاده وجود داشته باشد، سل‌هایی که بیشترین EcNo را دشته باشند به مشترک سرویس میدهند که از آنها تحت عنوان Activeset نام می‌بریم و تجهیزات کاربران از اولین Activeset استفاده می کنند و در صورت ضعیف شدن ست های فعال دیگر از شما حمایت می کنند.
 
 
 
 

مانیتورست(Monitoset) و دیتکتدست(Detectedset)

بر اساس  روال شبکه WCDMA، Monitorset در مبحث همسایگی جای میگیرد و هدف از وجود همسایه این است که دستگاه شما بتواند در حین استفاده از یک سرویس، Soft-handover داشته باشد. وقتی پیکربندی بهینه همسایه‌ها را برای سل‌ها تنظیم نکنند، تلفن همراه شما نمی‌تواند به سل دیگر منتقل شود و سرویس شما قطع می‌شود. سل‌هایی را که بصورت بالقوه میتوانند به عنوان همسایه استفاده شوند ولی همسایه تعریف نشده‌اند Detectedset مینامیم . همچنین، می توانیم شش همسایه را همزمان ببینیم.

خب ما با برخی از توضیحات اولیه شبکه WCDMA مانند Activeset و همسایگی آشنا شدیم. برای محاسبه پایلوت‌پلوشن(Pilot-Pollution)، باید اختلاف بین قوی‌ترین همسایه و ضعیف‌ترین Activeste را محاسبه کنیم و باید فاصله معقولی بین آنها باشد که بر اساس تجربه باید 5 دسی بل یا بیشتر از آن باشد. اگر اختلاف بین آنها کمتر از 5 دسی‌بل باشد و Ec/Io همسایه در محدوده خوبی باشد، برای مثال بزرگترمساوی 14-، این همسایه بر دامنه سل تأثیر می‌گذارد و در نتیجه می‌توانیم تعداد زیادی soft-handover ناموفق در آن محدوده پیدا کنیم و همچنین باعث پایین آمدن شاخص  Ec/Io  میشود که از شاخص‌های نشان دهنده سرویس دهی بد در شبکه میباشد.
 
 
 
 

چگونه این کار را در پایگاه داده SWISSQUAL انجام دادم؟

برای بررسی وضعیت شبکه های تلفن همراه از دید کاربران، باید درایوتست در مناطقی که نیاز داریم انجام دهیم و ابزارهای زیادی برای انجام این تست وجود دارد. ابزاری وجود دارد که نام آن SWISSQUAL است و این ابزارها اطلاعات زیادی در مورد شبکه های تلفن همراه به ما می دهد. توجه: برای محاسبه Pilot-Pollution، دستگاه اسکن شبکه بهتر جواب میدهد چون تمام اطلاعات را از تمام کریرهای موجود در شبکه جمع‌آوری می‌کند، اما به دلیل محدودیت‌هایم، آزمایشی را با سناریوی زیر انجام دادم:

بر اساس مکانیسم SWISSQUAL، در مرحله بعد لاگ‌فایل ها را در یک سرور SQL بارگذاری کردم. من یک query روی پایگاه داده آماده کردم و نتیجه query همچین ساختاری دارد:

query structure

من از جداول زیر برای خروجی فیلدهای ضروری استفاده کردم: «Sessions»، «Position»، «FileList»، «WCDMANeighborSet»، «WCDMAActiveSet»، «NetworkInfo» و جداول مهم «WCDMAActiveSet» و «WCDMANeighborSet» بودند. همانطور که در جدول بالا می بینید، ما نمی توانیم برخی از KPI ها مانند RSCP یا Ec/Io هر Activesetو Monitorset را جداگانه ببینیم، بنابراین برای جدا کردن آنها، یک تابع در پایتون برای جداسازی آن نوشتم. که در این تابع، من از Ec/Io برای مرتب سازی Activesetها و همسایگان استفاده کردم و همچنین PSC هر Activeset و همسایه را متمایز کردم. در نهایت اختلاف سیگنال را محاسبه کردم و نقاط بحرانی را مشخص کردم. در زیر می توانید کد پایتون و نتیجه محاسبه من را  مشاهده کنید.

				
					def PilotPollution():
    querypath = os.getcwd() + '\PilotPollution'
    server_ip = input("please input server IP: ")
    dbname = input("please input Database name: ")

    conn_01 = connecttodb(server_ip, dbname)
    _query_3G_Voice = readtextfile(querypath + '\pp_query.sql')

    df_query_3G_Voice = pd.read_sql(_query_3G_Voice, conn_01)
    df_3G_Voice_Activesets_merged = pd.DataFrame(
        columns=['posid', 'latitude', 'longitude', 'UARFCN', 'Band', 'LAC', 'CId', 'Served_RSCP',
                 'Served_EcNo', 'RSCP_A1', 'RSCP_A2', 'RSCP_A3', 'EcNo_A1', 'EcNo_A2', 'EcNo_A3'
            , 'PSC_A1', 'PSC_A2', 'PSC_A3', 'RSCP_N1', 'RSCP_N2', 'RSCP_N3', 'RSCP_N4', 'RSCP_N5', 'RSCP_N6',
                 'EcNo_N1', 'EcNo_N2', 'EcNo_N3'
            , 'EcNo_N4', 'EcNo_N5', 'EcNo_N6', 'PSC_N1', 'PSC_N2', 'PSC_N3', 'PSC_N4', 'PSC_N5', 'PSC_N6',
                 'Diff_RSCP', 'Status'])

    _RSCP_avg = None
    _EcNo_avg = None
    _RSCP_A1 = None
    _RSCP_A2 = None
    _RSCP_A3 = None
    _EcNo_A1 = None
    _EcNo_A2 = None
    _EcNo_A3 = None
    _PSC_A1 = None
    _PSC_A2 = None
    _PSC_A3 = None
    _RSCP_N1 = None
    _RSCP_N2 = None
    _RSCP_N3 = None
    _RSCP_N4 = None
    _RSCP_N5 = None
    _RSCP_N6 = None
    _EcNo_N1 = None
    _EcNo_N2 = None
    _EcNo_N3 = None
    _EcNo_N4 = None
    _EcNo_N5 = None
    _EcNo_N6 = None
    _PSC_N1 = None
    _PSC_N2 = None
    _PSC_N3 = None
    _PSC_N4 = None
    _PSC_N5 = None
    _PSC_N6 = None

    _PosId = None
    _Latitude = None
    _Longitude = None
    _UARFCN = None
    _Band = None
    _LAC = None
    _CID = None
    status_pp = "Normal"
    Diff_RSCP_best_neighbor_first_activeset = None
    min_active_rscp = None

    WCDMA_posid = df_query_3G_Voice.groupby("PosId")
    for key, item in WCDMA_posid:
        RSCP_posid_RSCP = item.groupby("AvgEcIo")
        activesetnum = 0
        for key_rscp, item_rscp in RSCP_posid_RSCP:
            Activesets_RSCP = item_rscp.groupby("AggrEcIo_PSC")
            neighborstnum = 0
            for active_key_rscp, active_item_rscp in Activesets_RSCP:
                activesetnum += 1
                if activesetnum == 1:
                    _RSCP_avg = active_item_rscp.iloc[0]['AvgRSCP']
                    _EcNo_avg = active_item_rscp.iloc[0]['AvgEcIo']
                    _PosId = active_item_rscp.iloc[0]['PosId']
                    _Latitude = active_item_rscp.iloc[0]['Latitude']
                    _Longitude = active_item_rscp.iloc[0]['Longitude']
                    _UARFCN = active_item_rscp.iloc[0]['FreqDL']
                    _Band = active_item_rscp.iloc[0]['Technology']
                    _LAC = active_item_rscp.iloc[0]['LAC']
                    _CID = active_item_rscp.iloc[0]['CID']
                    _RSCP_A1 = active_item_rscp.iloc[0]['RSCP_PSC']
                    _EcNo_A1 = active_item_rscp.iloc[0]['AggrEcIo_PSC']
                    _PSC_A1 = active_item_rscp.iloc[0]['PSCCode']
                elif activesetnum == 2:
                    _RSCP_A2 = active_item_rscp.iloc[0]['RSCP_PSC']
                    _EcNo_A2 = active_item_rscp.iloc[0]['AggrEcIo_PSC']
                    _PSC_A2 = active_item_rscp.iloc[0]['PSCCode']
                elif activesetnum == 3:
                    _RSCP_A3 = active_item_rscp.iloc[0]['RSCP_PSC']
                    _EcNo_A3 = active_item_rscp.iloc[0]['AggrEcIo_PSC']
                    _PSC_A3 = active_item_rscp.iloc[0]['PSCCode']
                Neighbor_RSCP = active_item_rscp.groupby('neighbor_SC')
                for Neighbor_key_rscp, Neighbor_item_rscp in Neighbor_RSCP:
                    neighborstnum += 1
                    if neighborstnum == 1:
                        _RSCP_N1 = Neighbor_item_rscp['neighbor_RSCP'].mean()
                        _EcNo_N1 = Neighbor_item_rscp['neighbor_EcNo'].mean()
                        _PSC_N1 = Neighbor_item_rscp.iloc[0]['neighbor_SC']
                    elif neighborstnum == 2:
                        _RSCP_N2 = Neighbor_item_rscp['neighbor_RSCP'].mean()
                        _EcNo_N2 = Neighbor_item_rscp['neighbor_EcNo'].mean()
                        _PSC_N2 = Neighbor_item_rscp.iloc[0]['neighbor_SC']
                    elif neighborstnum == 3:
                        _RSCP_N3 = Neighbor_item_rscp['neighbor_RSCP'].mean()
                        _EcNo_N3 = Neighbor_item_rscp['neighbor_EcNo'].mean()
                        _PSC_N3 = Neighbor_item_rscp.iloc[0]['neighbor_SC']
                    elif neighborstnum == 4:
                        _RSCP_N4 = Neighbor_item_rscp['neighbor_RSCP'].mean()
                        _EcNo_N4 = Neighbor_item_rscp['neighbor_EcNo'].mean()
                        _PSC_N4 = Neighbor_item_rscp.iloc[0]['neighbor_SC']
                    elif neighborstnum == 5:
                        _RSCP_N5 = Neighbor_item_rscp['neighbor_RSCP'].mean()
                        _EcNo_N5 = Neighbor_item_rscp['neighbor_EcNo'].mean()
                        _PSC_N5 = Neighbor_item_rscp.iloc[0]['neighbor_SC']
                    elif neighborstnum == 6:
                        _RSCP_N6 = Neighbor_item_rscp['neighbor_RSCP'].mean()
                        _EcNo_N6 = Neighbor_item_rscp['neighbor_EcNo'].mean()
                        _PSC_N6 = Neighbor_item_rscp.iloc[0]['neighbor_SC']
        if _RSCP_A1 != None and _RSCP_A2 != None and _RSCP_A3 != None:
            min_active_rscp = min(_RSCP_A1, _RSCP_A2, _RSCP_A3)
        elif _RSCP_A1 != None and _RSCP_A2 != None:
            min_active_rscp = min(_RSCP_A1, _RSCP_A2)
        elif _RSCP_A1 != None:
            min_active_rscp = _RSCP_A1

        if _RSCP_N1 != None and _RSCP_N2 != None and _RSCP_N3 != None and _RSCP_N4 != None and _RSCP_N5 != None and _RSCP_N6 != None:
            Diff_RSCP_best_neighbor_first_activeset = max(_RSCP_N1, _RSCP_N2, _RSCP_N3, _RSCP_N4, _RSCP_N5,
                                                          _RSCP_N6) - min_active_rscp
            if Diff_RSCP_best_neighbor_first_activeset >= 5:
                status_pp = "Pilot Pollution"
        elif _RSCP_N1 != None and _RSCP_N2 != None and _RSCP_N3 != None and _RSCP_N4 != None and _RSCP_N5 != None:
            Diff_RSCP_best_neighbor_first_activeset = max(_RSCP_N1, _RSCP_N2, _RSCP_N3, _RSCP_N4,
                                                          _RSCP_N5) - min_active_rscp
            if Diff_RSCP_best_neighbor_first_activeset >= 5:
                status_pp = "Pilot Pollution"
        elif _RSCP_N1 != None and _RSCP_N2 != None and _RSCP_N3 != None and _RSCP_N4 != None:
            Diff_RSCP_best_neighbor_first_activeset = max(_RSCP_N1, _RSCP_N2, _RSCP_N3, _RSCP_N4) - min_active_rscp
            if Diff_RSCP_best_neighbor_first_activeset >= 5:
                status_pp = "Pilot Pollution"
        elif _RSCP_N1 != None and _RSCP_N2 != None and _RSCP_N3 != None:
            Diff_RSCP_best_neighbor_first_activeset = max(_RSCP_N1, _RSCP_N2, _RSCP_N3) - min_active_rscp
            if Diff_RSCP_best_neighbor_first_activeset >= 5:
                status_pp = "Pilot Pollution"
        elif _RSCP_N1 != None:
            Diff_RSCP_best_neighbor_first_activeset = _RSCP_N1 - min_active_rscp
            if Diff_RSCP_best_neighbor_first_activeset >= 5:
                status_pp = "Pilot Pollution"

        df_new_row = {'posid': _PosId,
                      'latitude': _Latitude,
                      'longitude': _Longitude,
                      'UARFCN': _UARFCN,
                      'Band': _Band, 'LAC': _LAC,
                      'CId': _CID,
                      'Served_RSCP': _RSCP_avg,
                      'Served_EcNo': _EcNo_avg,
                      'RSCP_A1': _RSCP_A1,
                      'RSCP_A2': _RSCP_A2,
                      'RSCP_A3': _RSCP_A3,
                      'EcNo_A1': _EcNo_A1,
                      'EcNo_A2': _EcNo_A2,
                      'EcNo_A3': _EcNo_A3,
                      'PSC_A1': _PSC_A1,
                      'PSC_A2': _PSC_A2,
                      'PSC_A3': _PSC_A3,
                      'RSCP_N1': _RSCP_N1,
                      'RSCP_N2': _RSCP_N2,
                      'RSCP_N3': _RSCP_N3,
                      'RSCP_N4': _RSCP_N4,
                      'RSCP_N5': _RSCP_N5,
                      'RSCP_N6': _RSCP_N6,
                      'EcNo_N1': _EcNo_N1,
                      'EcNo_N2': _EcNo_N2,
                      'EcNo_N3': _EcNo_N3,
                      'EcNo_N4': _EcNo_N4,
                      'EcNo_N5': _EcNo_N5,
                      'EcNo_N6': _EcNo_N6,
                      'PSC_N1': _PSC_N1,
                      'PSC_N2': _PSC_N2,
                      'PSC_N3': _PSC_N3,
                      'PSC_N4': _PSC_N1,
                      'PSC_N5': _PSC_N2,
                      'PSC_N6': _PSC_N3,
                      'Diff_RSCP_best_neighbor_first_activeset': Diff_RSCP_best_neighbor_first_activeset,
                      'Status': status_pp}
        df_3G_Voice_Activesets_merged = df_3G_Voice_Activesets_merged.append(df_new_row, ignore_index=True)
        _RSCP_avg = None
        _EcNo_avg = None
        _RSCP_A1 = None
        _RSCP_A2 = None
        _RSCP_A3 = None
        _EcNo_A1 = None
        _EcNo_A2 = None
        _EcNo_A3 = None
        _PSC_A1 = None
        _PSC_A2 = None
        _PSC_A3 = None
        _RSCP_N1 = None
        _RSCP_N2 = None
        _RSCP_N3 = None
        _RSCP_N4 = None
        _RSCP_N5 = None
        _RSCP_N6 = None
        _EcNo_N1 = None
        _EcNo_N2 = None
        _EcNo_N3 = None
        _EcNo_N4 = None
        _EcNo_N5 = None
        _EcNo_N6 = None
        _PSC_N1 = None
        _PSC_N2 = None
        _PSC_N3 = None
        _PSC_N4 = None
        _PSC_N5 = None
        _PSC_N6 = None
        _PosId = None
        _Latitude = None
        _Longitude = None
        _UARFCN = None
        _Band = None
        _LAC = None
        _CID = None
        status_pp = "Normal"
        min_active_rscp = None
        Diff_RSCP_best_neighbor_first_activeset = None
    df_3G_Voice_Activesets_merged.to_csv(dbname + '_df_3G_PilotPollution_merged.csv', index=False)
				
			
پایلوت پلوشن
اشتراک گذاری در:
آواتار کاربر
پیمان هوشمند

سلام امیدوارم حال همگی شما خوب باشه.من پیمان هوشمند هستم. مدرس برنامه نویسی و نرم افزارهای تحلیلی در حوزه مخابرات. خود من همیشه به عنوان یه دانش آموزش و دانش پژوه عاشق برنامه نویسی و کارهای آماری بودم و نقطه قوتم حتی در زمان تحصیل خودم هم مباحث برنامه نویسی بخصوص طراحی الگوریتم بوده. بنابراین این درس را خیلی مفهومی و عمیق یاد گرفتم. تفاوت عمیق من با دانشجویان در زمان تحصیلم این بود که در حوزه ای که تحصیل میکردم مشغول به کار بودم و این دلیل بر عمیق تر شدن در حوزه نرم افزار و مخابرات بود و از دانشگاه برای فهم بیشتر مبانی های کارم استفاده کردم. تا به امروز در اکثر سازمانهایی که کار کرده ام در کنار سمت اصلیم ، به عنوان سوپروایزر آموزشی هم فعالیت میکردم و متخصصینی در این حوزه آموزش داده ام و در بازار کار مشغول به کار هستند و در مدتی که کرونا باعث تعطیلی بسیاری از مراکز آموزش بود ، به صورت رایگان در خدمت دانشجویان نرم افزار از دانشگاه های مختلف بودم. همیشه در روش های آموزشیم بدنبال ابتکار و نوآوری هایی از قبیل گیمیفیکیشن و تکنیک های شناختی به جهت بهبود یادگیری بوده ام.

آیا استفاده از VPN در سرویس Volte تاثیر دارد؟
محاسبه پایلوت پلوشن LTE به صورت خودکار با استفاده از نرم افزار Tems Discovery

پاسخ دهید لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

جستجو

دسته بندی مقالات

  • آنالیز داده
  • دسته‌بندی نشده
  • کارگاهها
  • یادگیری
logo-dark

پست پروسس یار تخصصی ترین آکادمی آموزش حوزه مخابرات و کامپیوتر

تماس: 09937262668
ایمیل: info@postprocessyar.com

Icon-facebook Icon-linkedin2 Icon-instagram Icon-twitter

منو

  • خانه
  • بلاگ
  • درباره ما
  • تماس با ما

خبرنامه

برای دریافت جدیدترین اخبار ایمیل خود را وارد کنید

نماد اعتماد الکترونیکی logo-samandehi
کپی رایت 2025 پست پروسس یار | طراحی پست پروسس یار. تمامی حقوق محفوظ است
آکادمی پست پروسس یارآکادمی پست پروسس یار
ورودثبت نام

ورود

هنوز حساب ندارید؟ ثبت نام
رمز عبور خود را فراموش کرده اید؟

ثبت نام

در حال حاضر یک حساب کاربری دارید؟ ورود