การหลีกเลี่ยงช่องสัญญาณ Coex ผ่าน Wi-Fi/เซลลูลาร์

ฟีเจอร์การหลีกเลี่ยงช่องสัญญาณ Wi-Fi/เซลลูลาร์ coex ที่เปิดตัวใน Android 12 ระบุและหลีกเลี่ยงการใช้ช่องสัญญาณ Wi-Fi ที่ไม่ปลอดภัย ในกรณีที่อาจมีการรบกวนจาก/ไปยังช่องสัญญาณเซลลูลาร์ ซึ่งรวมถึงอินเทอร์เฟซเช่น STA, SoftAp, Wi-Fi Direct (P2P), Wi-Fi Aware (NAN)

หน้านี้กล่าวถึงสิ่งต่อไปนี้:

  • ข้อมูลที่โมเด็มเซลลูลาร์ต้องรายงานไปยังเฟรมเวิร์ก Android
  • อัลกอริทึมที่เฟรมเวิร์ก Wi-Fi ใช้ในการคำนวณช่อง Wi-Fi ที่ควรหลีกเลี่ยง
  • ตารางการกำหนดค่าที่ผู้ผลิตอุปกรณ์ต้องจัดเตรียมสำหรับเฟรมเวิร์ก Wi-Fi
  • API ระบบ การกำหนดค่า และ HAL API ที่เกี่ยวข้องกับคุณลักษณะการหลีกเลี่ยงช่องทาง
  • พฤติกรรมกรอบการจัดการการหลีกเลี่ยงช่องทาง
  • พฤติกรรมของผู้จำหน่ายชิปในการจัดการการหลีกเลี่ยงช่องทาง
  • รายละเอียดการดำเนินการเพื่อหลีกเลี่ยงช่องทาง
  • การทดสอบเพื่อตรวจสอบพฤติกรรมการหลีกเลี่ยงช่องสัญญาณ

พื้นหลัง

สำหรับอุปกรณ์ที่มีเทคโนโลยีเซลลูลาร์ เช่น LTE, 5G NR และ Licensed Assisted Access (LAA) ช่องเซลลูลาร์ที่ใช้งานอยู่อาจรบกวนช่อง Wi-Fi ที่ใช้งานอยู่ สิ่งนี้เกิดขึ้นเมื่อช่องสัญญาณเซลลูลาร์และ Wi-Fi อยู่ภายในการแยกความถี่สั้นๆ (ช่องสัญญาณข้างเคียง) หรือเมื่อมีการรบกวนฮาร์โมนิกและอินเตอร์โมดูเลชั่น

การรบกวนประเภทนี้จะกลายเป็นปัญหาเมื่อมีการส่งสัญญาณเสาอากาศหนึ่งและอีกเสาอากาศหนึ่งรับในเวลาเดียวกัน ในกรณีนี้ เสาอากาศส่งสัญญาณจะทำให้เสาอากาศรับสัญญาณท่วม ซึ่งส่งผลต่อคุณภาพการรับสัญญาณ

เอกสารนี้อ้างถึงเครื่องส่งที่รบกวนในฐานะ ผู้รุกราน และผู้รับที่ประสบปัญหาการรบกวนใน ฐานะเหยื่อ ช่องสัญญาณ Wi-Fi ที่เป็นทั้งผู้รุกรานหรือเหยื่อเรียกว่า ช่องสัญญาณ ที่ไม่ปลอดภัย

คุณลักษณะการหลีกเลี่ยงช่องสัญญาณ Wi-Fi/เซลลูลาร์ coex ให้แนวทางที่สอดคล้องกันสำหรับการหลีกเลี่ยงช่องสัญญาณ ซึ่งช่วยลดความจำเป็นในการใช้รหัสที่เป็นกรรมสิทธิ์ซึ่งแตกต่างจากกรอบงาน Wi-Fi นอกจากนี้ คุณสมบัตินี้ยังช่วยให้ผู้ผลิตอุปกรณ์สามารถกำหนดค่า เปิดใช้งานและปิดใช้งาน และแทนที่คุณสมบัติดังกล่าวได้

คุณลักษณะนี้จะทำการหลีกเลี่ยงช่องสัญญาณโดยการควบคุมช่องสัญญาณ Wi-Fi รูปแบบการหลีกเลี่ยงช่องสัญญาณ Wi-Fi สามารถอธิบายได้เป็นชุดของขั้นตอนนามธรรมสี่ขั้นตอน:

  1. โมเด็มรายงานการเปลี่ยนแปลงความถี่เซลลูลาร์
  2. อัลกอริทึมการหลีกเลี่ยง Coex คำนวณช่องสัญญาณ Wi-Fi ที่ไม่ปลอดภัย
  3. อัลกอริธึมการหลีกเลี่ยง Coex แจ้งบริการ Wi-Fi
  4. กรอบงานหรือไดรเวอร์ดำเนินการ Wi-Fi ที่เหมาะสม

รูปแบบการหลีกเลี่ยงช่อง

รูปที่ 1 รูป แบบการหลีกเลี่ยงช่องสัญญาณ

รายงานการเปลี่ยนแปลงความถี่เซลลูลาร์

บริการโทรศัพท์รายงานช่องสัญญาณเซลลูล่าร์ที่ใช้งานอยู่ในปัจจุบัน เมื่อความถี่เซลลูลาร์ที่ใช้งานเปลี่ยนแปลง โมเด็มจะรายงานข้อมูลนี้ไปยังบริการโทรศัพท์ผ่าน IRadio::PhysicalChannelConfig ข้อมูลนี้ประกอบด้วยข้อบ่งชี้สำหรับ Licensed Assisted Access (LAA) และ Carrier Aggregation (CA)

จาก Android 12 ช่องต่อไปนี้ใน 1.6 IRadio::PhysicalChannelConfig จะให้ข้อมูลที่จำเป็นสำหรับสูตร coex ที่โมเด็มต้องเติม

struct PhysicalChannelConfig {
    /** Connection status for cell. Valid values are PRIMARY_SERVING and SECONDARY_SERVING */
    CellConnectionStatus status;

    /** The radio technology for this physical channel */
    RadioTechnology rat;

    /** Downlink Absolute Radio Frequency Channel Number */
    int32_t channelNumberDownlink;

    /** Uplink Absolute Radio Frequency Channel Number */
    int32_t channelNumberUplink;

    /** Downlink cell bandwidth, in kHz */
    int32_t cellBandwidthDownlink;hte

    /** Uplink cell bandwidth, in kHz */
    int32_t cellBandwidthUplink;
}

กำลังคำนวณช่อง Wi-Fi ที่ไม่ปลอดภัย

เมื่อโมเด็มรายงานการเปลี่ยนแปลงความถี่มือถือ อัลกอริธึมช่องสัญญาณ coex จะคำนวณการรบกวนระหว่างช่องสัญญาณมือถือและ Wi-Fi และกำหนดว่าช่องสัญญาณ Wi-Fi ชุดใดที่ไม่ปลอดภัย

การรบกวนมีหลายประเภทซึ่งต้องใช้สูตรที่แตกต่างกัน: บริเวณใกล้เคียง และ ฮาร์มอนิก/อินเตอร์โมดูเลชัน เนื่องจากความแตกต่างทางกายภาพของเสาอากาศและรูปแบบระหว่างอุปกรณ์ รูปแบบของการรบกวนที่อยู่ใกล้เคียงและการรบกวนฮาร์มอนิก/อินเตอร์โมดูเลชั่นสำหรับแต่ละอุปกรณ์จึงแตกต่างกัน เพื่อคำนึงถึงสิ่งนี้ ผู้ผลิตอุปกรณ์จะต้องจัดเตรียม ตารางการค้นหา เพื่อเสียบพารามิเตอร์เข้ากับสูตรทั่วไปสำหรับการรบกวนทั้งสองประเภท พารามิเตอร์เหล่านี้ถูกกำหนดไว้สำหรับแต่ละแบนด์ของเซลล์ และอ้างอิงโดยแบนด์ของช่องเซลล์ที่ใช้งานอยู่

สามารถกำหนด ขีดจำกัดพลังงานสูงสุด ได้ในตารางค้นหา หากมีการกำหนดการจำกัดพลังงานสูงสุด ช่องสัญญาณที่ไม่ปลอดภัยจะถูกส่งด้วยการจำกัดพลังงานที่ให้มา ถ้าไม่มีการจำกัดพลังงาน ช่องสัญญาณจะส่งสัญญาณเต็มกำลัง

โดยทั่วไป คุณลักษณะการหลีกเลี่ยงช่องสัญญาณจะใช้ความพยายามอย่างดีที่สุดเพื่อหลีกเลี่ยงช่องสัญญาณ Wi-Fi ที่ไม่ปลอดภัยเพื่อเพิ่มประสิทธิภาพการทำงาน แต่ในบางกรณี (เช่น เนื่องจากข้อกำหนดของผู้ให้บริการ) อินเทอร์เฟซบางอย่างจึงจำเป็นต้องหลีกเลี่ยงช่องสัญญาณที่ไม่ปลอดภัยสำหรับแบนด์เซลลูลาร์บางแบนด์ ในกรณีเช่นนี้ ข้อจำกัดบังคับ จะแสดงเป็นบิตมาสก์ที่มีค่าว่าจะห้ามบางช่องสัญญาณ เช่น Wi-Fi Direct (P2P), SoftAp และ Wi-Fi Aware (NAN) หรือไม่ แม้ว่าช่องทางที่ไม่ปลอดภัยจะทำหน้าที่เป็นข้อแนะนำไม่ให้ใช้ช่องทางนั้นกับกรณีการใช้งานทั้งหมด ข้อจำกัดบังคับจะทำเครื่องหมายกรณีการใช้งานเฉพาะเพื่อหลีกเลี่ยงการบังคับ

หากทุกช่องสัญญาณของแถบความถี่ 2.4 GHz หรือ 5 GHz ถูกทำเครื่องหมายว่าไม่ปลอดภัย ตารางการค้นหาสามารถกำหนดช่องสัญญาณเริ่มต้น 2.4 GHz หรือช่องสัญญาณเริ่มต้น 5 GHz ต่อแถบความถี่ของเซลล์ที่รบกวนเป็นตัวเลือกที่ปลอดภัยที่สุด ช่องเริ่มต้นเหล่านี้จะไม่ถูกรายงานว่าเป็นช่องที่ไม่ปลอดภัย เมื่อช่องที่เหลือถูกรายงานว่าไม่ปลอดภัย

แทนที่รายการ

วิธีการแบบสูตรถูกจำกัดในกรณีที่การรบกวนขึ้นอยู่กับแบนด์วิธอย่างมาก (และดังนั้นช่องที่มีแบนด์วิดท์ใหญ่กว่าอาจไม่ปลอดภัย แต่ไม่ใช่ช่องที่มีแบนด์วิดท์น้อยกว่า) ในกรณี เช่น กับ LAA การข้ามการคำนวณและใช้รายการช่องทางที่ไม่ปลอดภัยที่ระบุจะเป็นประโยชน์

ในการดำเนินการนี้ คุณสามารถระบุ รายการแทนที่ ช่องที่ไม่ปลอดภัยในตารางค้นหาสำหรับบางรายการได้ รายการแทนที่ในรายการตารางแสดงว่าการคำนวณสำหรับช่องเซลล์นั้นถูกข้ามไป และช่อง Wi-Fi ที่ไม่ปลอดภัยสำหรับช่องเซลล์ที่ตรงกันนั้นถูกระบุโดยรายการแทนที่

สำหรับกรณีที่ไวต่อแบนด์วิดท์ คุณสามารถเลือกหลีกเลี่ยงแบนด์วิดท์บางอย่างได้โดยการระบุช่องสัญญาณบางช่องด้วยแบนด์วิธบางอย่างในรายการแทนที่ เนื่องจากหมายเลขช่องสัญญาณ Wi-Fi แต่ละหมายเลขสอดคล้องกับแบนด์วิธที่ระบุ

รายการแทนที่จะแสดงด้วยรายการหมายเลขช่องหรือคำสำคัญหมวดหมู่ที่กำหนดไว้ล่วงหน้าสำหรับแต่ละแบนด์ Wi-Fi:

หมวดหมู่ 2g:

  • all (ทั้งย่านความถี่ 2.4 GHz)

หมวดหมู่ 5g:

  • all (ทั้งย่านความถี่ 5 GHz)
  • 20mhz (ช่อง 5 GHz 20 MHz)
  • 40mhz (ช่อง 5 GHz 40 MHz)
  • 80mhz (ช่อง 5 GHz 80 MHz)
  • 160mhz (ช่อง 5 GHz 160 MHz)

การรบกวนช่องสัญญาณใกล้เคียง

เพื่อระบุสัญญาณรบกวนข้างเคียง อัลกอริธึมการหลีกเลี่ยง coex ทำให้แน่ใจว่าระยะห่าง ΔF ระหว่างช่องสัญญาณผู้รุกรานและเหยื่อไม่อยู่ภายใต้ เกณฑ์ ที่กำหนด

การรบกวนช่องสัญญาณ

รูปที่ 2 ระยะห่างระหว่างช่องทางผู้รุกรานและเหยื่อ

เกณฑ์ที่กำหนดจะกำหนดโดยการกำหนดค่าทางกายภาพของอุปกรณ์และค่าเกณฑ์ที่ระบุในรายการตารางการค้นหาต่อแบนด์ที่รบกวน แบนด์ที่ถือว่าไม่รบกวนจะไม่มีรายการในตารางและไม่จำเป็นต้องคำนวณช่องสัญญาณที่ไม่ปลอดภัย (ซึ่งเป็นส่วนใหญ่)

พารามิเตอร์การรบกวนใกล้เคียง

  • wifiVictimMhz : เกณฑ์ระยะทาง MHz สำหรับผู้ใช้ Wi-Fi (อัปลิงก์ของเซลล์)
  • cellVictimMhz : เกณฑ์ระยะทาง MHz สำหรับเซลล์เหยื่อ (เซลล์ดาวน์ลิงก์)

อัลกอริทึมจะทำงานดังนี้สำหรับแต่ละช่องเซลล์ที่ใช้งานอยู่:

  1. สำหรับวงดนตรีของช่อง พยายามค้นหารายการในตารางการค้นหา หากไม่พบรายการตาราง ให้ส่งคืนโดยไม่มีช่องสัญญาณที่ไม่ปลอดภัยสำหรับช่องเซลล์นั้น
  2. โดยขึ้นอยู่กับแบนด์เซลลูลาร์ ระบุว่าแบนด์ Wi-Fi ใดที่มีความเสี่ยง และการรบกวนนั้นมาจากด้านใดของแบนด์ (เช่น ช่อง 2.4 GHz ต่ำกว่า, ช่อง 2.4 GHz สูงกว่า, ช่อง 5 GHz ต่ำกว่า)
  3. หากมี wifiVictimMhz และช่องสัญญาณมือถือมีอัปลิงค์และ

    1. หากส่วนล่างของย่านความถี่ Wi-Fi ตกอยู่ในความเสี่ยง

      1. ค้นหาขีดจำกัดสูงสุดของช่องสัญญาณที่ไม่ปลอดภัยโดยเพิ่ม wifiVictimMhz ให้กับความถี่สูงสุดของการอัปลิงก์ของเซลล์
      2. ค้นหาช่องสัญญาณ Wi-Fi 20 Mhz แรกซึ่งมีขอบล่างซ้อนทับขีดจำกัด
      3. ทำเครื่องหมายช่อง Wi-Fi, ช่องแบนด์วิธขนาดใหญ่ทุกช่องที่มีอยู่ (เช่น 40 Mhz, 80 Mhz) และช่องด้านล่างทุกช่องของแบนด์วิธเดียวกันเป็นช่องที่ไม่ปลอดภัย
    2. หากส่วนบนของแบนด์ Wi-Fi มีความเสี่ยง

      1. ค้นหาขีดจำกัดล่างของช่องสัญญาณที่ไม่ปลอดภัยโดยการลบ wifiVictimMhz เข้ากับความถี่ต่ำสุดของการอัปลิงก์ของเซลล์
      2. ค้นหาช่อง Wi-Fi แรกที่ขอบด้านบนซ้อนทับขีดจำกัด
      3. ทำเครื่องหมายช่อง Wi-Fi ทุกช่องขนาดใหญ่ที่มีอยู่ (เช่น 40M hz, 80 Mhz) และทุกช่องที่สูงกว่าของแบนด์เดียวกันเป็นช่องที่ไม่ปลอดภัย
  4. หากมี cellVictimMhz และช่องเซลล์มีดาวน์ลิงก์

    1. ดำเนินการขั้นตอนที่ 3 โดยใช้ cellVictimMhz เป็นเกณฑ์ และเปรียบเทียบกับเซลล์ดาวน์ลิงก์แทนเซลล์อัปลิงก์
  5. ใช้การจำกัดพลังงานของรายการตารางกับช่องทางที่ไม่ปลอดภัยที่คำนวณได้

การคำนวณช่องสัญญาณที่ไม่ปลอดภัย

รูปที่ 3 การคำนวณช่องสัญญาณที่ไม่ปลอดภัยสำหรับการรบกวนช่องสัญญาณข้างเคียง

การบิดเบือนฮาร์มอนิก/อินเตอร์โมดูเลชัน

สำหรับการบิดเบือนฮาร์โมนิค/อินเทอร์โมดูเลชัน เครื่องยนต์ coex จะคำนวณช่วงของสัญญาณฮาร์มอนิก/อินเทอร์โมดูเลชัน และประเมินเปอร์เซ็นต์ที่ทับซ้อนกันที่มีกับช่องสัญญาณของเหยื่อที่อาจเกิดขึ้น หากการทับซ้อนเกินเกณฑ์การทับซ้อน อัลกอริทึมจะถือว่านี่เป็นสถานการณ์ที่ไม่ปลอดภัย การคำนวณเปอร์เซ็นต์การทับซ้อนกันของการบิดเบือนฮาร์มอนิก/อินเทอร์โมดูเลชันบนช่องสัญญาณของเหยื่อจะดำเนินการโดยใช้สมการต่อไปนี้:

$$ overlap = \frac{min(distortion_{high}, victim_{high}) - max(distortion_{low}, victim_{low})}{victim_{bandwidth}} $$

ในกรณีความผิดเพี้ยนของฮาร์มอนิก อัลกอริธึมจะพิจารณาความผิดเพี้ยนของฮาร์โมนิคของช่องอัปลิงก์ของเซลล์ที่ตกเป็นเหยื่อช่องสัญญาณ Wi-Fi จากนั้นจะแทนที่ค่าความผิดเพี้ยนสูงและความผิดเพี้ยนต่ำด้วยค่าฮาร์มอนิกตามความถี่อัปลิงก์ของเซลล์และระดับฮาร์มอนิก $ N $

$$ harmonic_{high} = N * uplink_{high} $$
$$ harmonic_{low} = N * uplink_{low} $$

การคำนวณช่องสัญญาณที่ไม่ปลอดภัย ความเพี้ยนฮาร์มอนิก

รูปที่ 4 การคำนวณช่องสัญญาณที่ไม่ปลอดภัยสำหรับการบิดเบือนฮาร์มอนิก

ในกรณีการอินเตอร์โมดูเลชัน อัลกอริธึมจะพิจารณาการบิดเบือนของการอัปลิงก์ของเซลล์และช่องสัญญาณ Wi-Fi ที่ตกเป็นเหยื่อของช่องสัญญาณดาวน์ลิงก์ของเซลล์ จากนั้นจะแทนที่ค่าความผิดเพี้ยนสูงและความผิดเพี้ยนต่ำด้วยค่าระหว่างการปรับตามความถี่อัปลิงก์ของเซลล์ ความถี่ Wi-Fi และค่าสัมประสิทธิ์ระหว่างการปรับสองค่า $ M $, $ N $

$$ intermod_{high} = |M*wifi_{high} + N*uplink_{high}| $$
$$ intermod_{low} = |M*wifi_{low} + N*uplink_{low}| $$

การคำนวณช่องสัญญาณที่ไม่ปลอดภัย การบิดเบือนระหว่างการปรับสัญญาณ

รูปที่ 5 การคำนวณช่องสัญญาณที่ไม่ปลอดภัยสำหรับการบิดเบือนระหว่างการปรับสัญญาณ

คุณสามารถระบุ $ M $, $ N $ และค่าที่ทับซ้อนกันในตารางค้นหาตามแถบเซลล์ที่รบกวน ถ้าไม่มีการรบกวนสำหรับแบนด์ ค่าจะถูกละเว้นจากตารางสำหรับรายการแบนด์นั้น ค่าเหล่านี้สองชุดสำหรับย่านความถี่ Wi-Fi 2.4 GHz และ 5 GHz สามารถกำหนดค่าได้อย่างอิสระ

คล้ายกับอัลกอริธึมการรบกวนที่อยู่ใกล้เคียง อัลกอริธึมจะนำค่าการจำกัดพลังงานเดิมที่กำหนดไว้ต่อแถบความถี่ของเซลล์ที่รบกวนมาใช้ซ้ำ

อัลกอริทึมจะทำงานดังนี้สำหรับแต่ละช่องเซลล์ที่ใช้งานอยู่:

  1. สำหรับแบนด์ของช่องสัญญาณเซลล์ จะพยายามค้นหารายการตารางการค้นหา หากไม่พบรายการตาราง ให้ส่งคืนโดยไม่มีช่องที่ไม่ปลอดภัยสำหรับช่องนี้
  2. ค้นหาช่องสัญญาณ 2.4 GHz ที่ไม่ปลอดภัยจากฮาร์โมนิค หากมีการกำหนดพารามิเตอร์ไว้

    1. ค้นหาระดับฮาร์มอนิก N สำหรับ 2.4 GHz
    2. คำนวณความถี่สูงฮาร์มอนิกและความถี่ต่ำฮาร์มอนิกโดยยึดตาม N และอัปลิงก์ของเซลล์
    3. ค้นหาช่องสัญญาณ Wi-Fi 20 MHz แรกที่อยู่ภายในขอบเขตล่างของฮาร์โมนิคที่มาจากด้านล่าง
    4. คำนวณการทับซ้อนของฮาร์มอนิกเหนือช่องสัญญาณ Wi-Fi และทำเครื่องหมายช่องว่าไม่ปลอดภัย หากการทับซ้อนเกินเกณฑ์การทับซ้อนของ Wi-Fi 2.4 GHz
    5. ค้นหาช่องสัญญาณ Wi-Fi 20 MHz แรกที่อยู่ภายในขอบเขตด้านบนของฮาร์มอนิกที่มาจากด้านบน
    6. คำนวณการทับซ้อนของฮาร์มอนิกเหนือช่องสัญญาณ Wi-Fi และทำเครื่องหมายช่องว่าไม่ปลอดภัย หากการทับซ้อนเกินเกณฑ์การทับซ้อนของ Wi-Fi 2.4 GHz
    7. ทำเครื่องหมายทุกช่อง 20 MHz ที่เป็นช่องสัญญาณที่ไม่ปลอดภัย
  3. ค้นหาช่องสัญญาณ 5 GHz ที่ไม่ปลอดภัยจากฮาร์โมนิคหากมีการกำหนดพารามิเตอร์ไว้

    1. ค้นหาระดับฮาร์มอนิก N สำหรับ 5 GHz ถ้า N เป็น 0 ให้ข้ามไปยังขั้นตอนที่ 5
    2. คำนวณความถี่สูงฮาร์มอนิกและความถี่ต่ำฮาร์มอนิกโดยยึดตาม N และอัปลิงก์ของเซลล์
    3. ค้นหาช่อง 20 Mhz ที่ไม่ปลอดภัย

      1. ค้นหาช่องสัญญาณ Wi-Fi 20 MHz แรกที่อยู่ภายในขอบเขตล่างของฮาร์โมนิคที่มาจากด้านล่าง
      2. คำนวณการทับซ้อนของฮาร์มอนิกเหนือช่องสัญญาณ Wi-Fi และทำเครื่องหมายช่องว่าไม่ปลอดภัย หากการทับซ้อนเกินเกณฑ์การทับซ้อนของ Wi-Fi 2.4 GHz
      3. ค้นหาช่องสัญญาณ Wi-Fi 20 MHz แรกที่อยู่ภายในขอบเขตด้านบนของฮาร์มอนิกที่มาจากด้านบน
      4. คำนวณการทับซ้อนของฮาร์มอนิกเหนือช่องสัญญาณ Wi-Fi และทำเครื่องหมายช่องว่าไม่ปลอดภัย หากการทับซ้อนเกินเกณฑ์การทับซ้อนของ Wi-Fi 2.4 GHz
      5. ทำเครื่องหมายทุกช่อง 20 MHz ที่เป็นช่องสัญญาณที่ไม่ปลอดภัยพร้อมการจำกัดพลังงานที่ระบุ
    4. ค้นหาช่องสัญญาณ 40 MHz, 80 MHz, 160 MHz ที่ไม่ปลอดภัย

      1. ทำซ้ำขั้นตอน 3a แต่ด้วย 40 MHz, 80 MHz, 160 MHz
      2. แทนที่จะคำนวณการทับซ้อนของช่องสัญญาณบนขอบฮาร์มอนิก ให้นำการทับซ้อนที่คำนวณได้จากช่องที่มีส่วนประกอบน้อยกว่ากลับมาใช้ใหม่ (เช่น หากช่อง 20 Mhz สองช่องสร้างช่อง 40 Mhz และมีการทับซ้อนกัน 30% และ 90% ดังนั้นค่าเฉลี่ยจะอยู่ที่ 60 % ที่ทับซ้อนกันสำหรับช่อง 40 Mhz)
  4. ค้นหาช่องสัญญาณ 2.4 GHz ที่ไม่ปลอดภัยจากอินเตอร์โมดูเลชั่น หากมีการกำหนดพารามิเตอร์ไว้

    1. ค้นหาสัมประสิทธิ์อินเตอร์โมดูเลชัน N, M สำหรับ 2.4 GHz
    2. สำหรับแต่ละช่องสัญญาณ Wi-Fi 2.4 GHz:

      1. คำนวณความถี่ต่ำระหว่างมอดูเลชันและความถี่สูงระหว่างมอดูเลชั่นโดยอิงตาม N, M, อัปลิงก์ของเซลล์ และช่องสัญญาณ Wi-Fi
      2. คำนวณการทับซ้อนของอินเตอร์โมดูเลชันบนดาวน์ลิงก์ของเซลล์ และทำเครื่องหมายช่องสัญญาณว่าไม่ปลอดภัย หากการทับซ้อนเกินเกณฑ์การทับซ้อนของเซลล์ 2.4 GHz
  5. ค้นหาช่องสัญญาณ 5 GHz ที่ไม่ปลอดภัยจากอินเตอร์โมดูเลชั่น หากมีการกำหนดพารามิเตอร์ไว้

    1. ทำซ้ำขั้นตอนที่ 4 โดยใช้ช่องสัญญาณ Wi-Fi 5 GHz และเกณฑ์การทับซ้อนของเซลล์ 5 GHz
  6. ใช้การจำกัดพลังงานของรายการตารางกับช่องทางที่ไม่ปลอดภัยที่คำนวณได้

ผลลัพธ์สุดท้าย

หลังจากคำนวณช่องสัญญาณที่ไม่ปลอดภัยทั้งสองชุดจากการรบกวนข้างเคียงและการรบกวนฮาร์มอนิกแล้ว ชุดสุดท้ายจะถูกคำนวณโดยการรวมกันของทั้งสองชุด (และเลือกการจำกัดกำลังที่ต่ำกว่าหากมีการชนกัน) และลบช่องสัญญาณเริ่มต้นออกจากชุดหากมีการชนกัน ไม่มีข้อจำกัดบังคับ

อัลกอริทึมมีลักษณะดังนี้:

  1. หากช่องสัญญาณ Wi-Fi 2.4 GHz ทุกช่องถูกทำเครื่องหมายว่าเป็นช่องสัญญาณที่ไม่ปลอดภัย ให้ลบช่องสัญญาณ Wi-Fi 2.4 GHz เริ่มต้นออกจากชุด
  2. หากช่องสัญญาณ Wi-Fi 5 GHz ทุกช่องถูกทำเครื่องหมายว่าเป็นช่องสัญญาณที่ไม่ปลอดภัย ให้ลบช่องสัญญาณ Wi-Fi 5 GHz เริ่มต้นออกจากชุด
  3. ส่งคืนช่องสัญญาณที่ไม่ปลอดภัยชุดสุดท้าย

รูปแบบตารางการค้นหา

ตารางการค้นหาแสดงในไฟล์ XML ที่อยู่ในสตริงการกำหนดค่าที่ซ้อนทับได้ config_wifiCoexTableFilepath และถูกกำหนดโดย XSD ต่อไปนี้


<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            version="1.0">

  <xsd:element name="table">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="entry" minOccurs="1" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="entry">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="rat" type="ratType"/>
        <xsd:element name="band" type="xsd:int"/>
        <xsd:element name="powerCapDbm" type="xsd:int" minOccurs="0"/>
        <xsd:choice>
          <xsd:element ref="params"/>
          <xsd:element ref="override"/>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:simpleType name="ratType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="LTE"/>
      <xsd:enumeration value="NR"/>
    </xsd:restriction>
  </xsd:simpleType>

  <!-- Define coex algorithm parameters -->
  <xsd:element name="params">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="neighborThresholds" minOccurs="0"/>
        <xsd:element name="harmonicParams2g" type="harmonicParams" minOccurs="0"/>
        <xsd:element name="harmonicParams5g" type="harmonicParams" minOccurs="0"/>
        <xsd:element name="intermodParams2g" type="intermodParams" minOccurs="0"/>
        <xsd:element name="intermodParams5g" type="intermodParams" minOccurs="0"/>
        <xsd:element ref="defaultChannels" minOccurs="0"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="neighborThresholds">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="wifiVictimMhz" type="xsd:int" minOccurs="0"/>
        <xsd:element name="cellVictimMhz" type="xsd:int" minOccurs="0"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:complexType name="harmonicParams">
    <xsd:sequence>
      <xsd:element name="N" type="xsd:int"/>
      <xsd:element name="overlap" type="xsd:int"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="intermodParams">
    <xsd:sequence>
      <xsd:element name="N" type="xsd:int"/>
      <xsd:element name="M" type="xsd:int"/>
      <xsd:element name="overlap" type="xsd:int"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:element name="defaultChannels">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="default2g" type="xsd:int" minOccurs="0"/>
        <xsd:element name="default5g" type="xsd:int" minOccurs="0"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <!-- Define algorithm override lists -->
  <xsd:element name="override">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="override2g" minOccurs="0"/>
        <xsd:element ref="override5g" minOccurs="0"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="override2g">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="category" type="overrideCategory2g" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="channel" type="xsd:int" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="override5g">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="category" type="overrideCategory5g" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="channel" type="xsd:int" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:simpleType name="overrideCategory2g">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="all"/>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:simpleType name="overrideCategory5g">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="all"/>
      <xsd:enumeration value="20Mhz"/>
      <xsd:enumeration value="40Mhz"/>
      <xsd:enumeration value="80Mhz"/>
      <xsd:enumeration value="160Mhz"/>
    </xsd:restriction>
  </xsd:simpleType>
</xsd:schema>

ตัวอย่างตาราง XML

ต่อไปนี้คือตัวอย่างตารางการค้นหา XML:


<table>
  <!-- Entry using algorithm parameters -->
  <entry>
    <rat>LTE</rat>
    <band>40</band>
    <powerCapDbm>50</powerCapDbm>
    <params>
      <neighborThresholds>
        <wifiVictimMhz>25</wifiVictimMhz>
        <cellVictimMhz>40</cellVictimMhz>
      </neighborThresholds>

      <harmonicParams2g>
        <N>3</N>
        <overlap>50</overlap>
      </harmonicParams2g>

      <harmonicParams5g>
        <N>3</N>
        <overlap>50</overlap>
      </harmonicParams5g>

      <intermodParams2g>
        <N>-2</N>
        <M>1</M>
        <overlap>75</overlap>
      </intermodParams2g>

      <intermodParams5g>
        <N>-2</N>
        <M>1</M>
        <overlap>75</overlap>
      </intermodParams5g>

      <defaultChannels>
        <default2g>6</default2g>
        <default5g>36</default5g>
      </defaultChannels>
    </params>
  </entry>
  <!-- Entry using the override list -->
  <entry>
    <rat>LTE</rat>
    <band>41</band>
    <powerCapDbm>50</powerCapDbm>
    <override>
      <override2g>
        <channel>6</channel>
        <channel>11</channel>
        ...
      </override2g>
      <override5g>
        <category>40Mhz</category>
        <channel>34</channel>
        ...
      </override5g>
    </override>
  </entry>
</table>

การรวมตัวของผู้ให้บริการ

สำหรับการรวมตัวของผู้ให้บริการ (CA) ช่วงฮาร์มอนิก/อินเทอร์โมดูเลชันสำหรับอัปลิงค์/ดาวน์ลิงก์แต่ละรายการอาจไม่สร้างการทับซ้อนเพียงพอที่จะทำให้เกิดการรบกวนอย่างอิสระ แต่อาจสร้างการทับซ้อนกันที่เพียงพอเมื่อรวมกัน อัลกอริธึมจะพิจารณาช่วงฮาร์โมนิค/อินเทอร์โมดูเลชันแต่ละช่วงอย่างเป็นอิสระต่อกัน และรับการรวมช่องสัญญาณที่ไม่ปลอดภัยที่ส่งคืนมา สำหรับกรณีอินเตอร์โมดูเลชั่น หมายถึงการประเมินช่วงอินเตอร์โมดูเลชั่นของ UL ทุกตัวไปยัง DL ทุกตัว

อัลกอริทึมไม่มีความแตกต่างระหว่าง PCELL/PSCELL/SCELL และถือว่าพวกมันเท่าเทียมกัน

สิทธิ์การเข้าถึงที่ได้รับความช่วยเหลือ

License Assisted Access (LAA) ถูกระบุเป็นแบนด์ #46 อัลกอริธึมถือว่าแบนด์นี้เหมือนกับแบนด์อื่น ในกรณีนี้ สามารถตั้งค่าช่องสัญญาณ 5 Ghz ทั้งหมดเป็นรายการแทนที่ในตารางการค้นหาได้

อัลกอริธึมการหลีกเลี่ยงช่องสัญญาณจะกำหนดข้อจำกัดบังคับบน SoftAP และ Wi-Fi Direct (P2P) สำหรับย่านความถี่ Wi-Fi 5 GHz ทั้งหมด ทั้งนี้ขึ้นอยู่กับข้อกำหนดของผู้ให้บริการ เพื่อให้อัลกอริทึมจัดการกับกรณีการใช้งานนี้ ต้องกำหนดค่าการกำหนดค่าของผู้ให้บริการ restrict_5g_softap_wifi_direct_for_laa หากช่องสัญญาณมือถืออยู่บน LAA และ restrict_5g_softap_wifi_direct_for_laa เป็น true อัลกอริธึมจะส่งคืนชุดช่องสัญญาณที่ไม่ปลอดภัยที่มีแบนด์ 5 Ghz ทั้งหมด และตั้งค่าแฟล็กข้อจำกัดบังคับสำหรับ SoftAP และ Wi-Fi Direct (P2P)

แจ้งการให้บริการ Wi-Fi

หลังจากที่อัลกอริธึมช่อง coex คำนวณช่องสัญญาณที่ไม่ปลอดภัยแล้ว เพื่อให้แอประบบของคุณมีช่องสัญญาณที่ไม่ปลอดภัยและข้อจำกัด ให้ใช้โครงสร้างข้อมูล @SystemApi ต่อไปนี้ที่กำหนดไว้ในกรอบงาน Android

public final class CoexUnsafeChannel {
  public static final int POWER_CAP_NONE
  public @WifiAnnotations.WifiBandBasic int getBand();
  public int getChannel();
  // Returns the specified power cap in dBm, or POWER_CAP_NONE if not specified.
  public int getPowerCapDbm();
}

ใช้เมธอด WifiManager @SystemApi ต่อไปนี้และโทรกลับเพื่อเปิดใช้งานแอปเพื่อรับค่าที่อัปเดตเมื่อช่องที่ไม่ปลอดภัยเปลี่ยนไป

public static final int COEX_RESTRICTION_WIFI_DIRECT;
public static final int COEX_RESTRICTION_SOFTAP;
public static final int COEX_RESTRICTION_WIFI_AWARE;

// Register a CoexCallback to listen on onCoexUnsafeChannelsChanged callbacks. The callback will be called whenever the unsafe channels change, as well as immediately after registering to get the current values.
public void registerCoexCallback(Executor executor, CoexCallback callback);
public void unregisterCoexCallback(CoexCallback callback);

public abstract static class CoexCallback {
  //Gets called whenever getCoexUnsafeChannels()/getCoexRestrictions() have updated values
  public void onCoexUnsafeChannelsChanged(List<CoexUnsafeChannels> unsafeChannels, int restrictions);
}

กำลังดำเนินการ Wi-Fi

เมื่อบริการ Wi-Fi ได้รับข้อมูลเกี่ยวกับชุดช่องสัญญาณที่ไม่ปลอดภัย บริการจะดำเนินการที่เหมาะสมเพื่อให้แน่ใจว่าช่องเหล่านั้นจะถูกหลีกเลี่ยง ส่วนนี้จะอธิบายลักษณะการทำงานของบริการ Wi-Fi ในสถานการณ์ต่างๆ

การแจ้งให้ผู้ขับขี่ทราบ

เนื่องจากไดรเวอร์มีบทบาทสำคัญในการหลีกเลี่ยงช่องสัญญาณ จึงจำเป็นอย่างยิ่งที่จะต้องถ่ายทอดช่องสัญญาณที่ไม่ปลอดภัยไปยังไดรเวอร์และเฟิร์มแวร์ เมื่อต้องการทำเช่นนี้ ให้ใช้ IWifiChip HAL API ต่อไปนี้

สำหรับโรคเอดส์:

void setCoexUnsafeChannels(in CoexUnsafeChannel[] unsafeChannels,
  in int restrictions)

สำหรับ HIDL (1.5 หรือสูงกว่า):

setCoexUnsafeChannels(vec<CoexUnsafeChannel> unsafeChannels,
  bitfield<IfaceType> restrictions);

ซอฟท์เอพี

SoftAP เป็นกรณีการใช้งานหลักสำหรับการหลีกเลี่ยงช่องทางที่ไม่ปลอดภัย ส่วนต่อไปนี้จะสรุปสถานการณ์ SoftAp ที่สำคัญซึ่งการหลีกเลี่ยงช่องสัญญาณสามารถนำไปใช้กับ ACS ได้ สถานการณ์จำลองจะอธิบายลักษณะการทำงานของอัลกอริธึมการหลีกเลี่ยงช่องสัญญาณและไดรเวอร์หรือเฟิร์มแวร์

การเริ่มต้น SoftAP โดยเปิดใช้งาน ACS (ยังไม่มี SoftAP)

  1. หากช่องสัญญาณไม่ปลอดภัยและมีข้อจำกัดของ SoftAP

    1. กรอบงานจะลบช่องสัญญาณที่ไม่ปลอดภัยออกจากรายการ ACS
    2. หากรายการว่างเปล่า กรอบงานจะหยุด SoftAP
  2. หากช่องไม่ปลอดภัยและไม่มีข้อจำกัด

    1. ไดรเวอร์/เฟิร์มแวร์ของผู้จำหน่ายให้ความสำคัญกับช่องทางที่ปลอดภัยมากกว่าช่องทางที่ไม่ปลอดภัย

SoftAP ขึ้นอยู่กับการเปิดใช้งาน ACS และช่องสัญญาณที่ไม่ปลอดภัยได้รับการอัปเดต

  1. หากช่อง SoftAP ไม่ปลอดภัยและมีข้อจำกัดของ SoftAP

    1. กรอบงานปรับปรุงรายการ ACS โดยการลบช่องทางที่ไม่ปลอดภัย
    2. หากรายการว่างเปล่า กรอบงานจะปิด SoftAP
  2. หากช่อง SoftAP ไม่ปลอดภัยและไม่มีข้อจำกัด

    1. กรอบงานไม่มีการดำเนินการใดๆ ไดรเวอร์/เฟิร์มแวร์ของผู้จำหน่ายจะจัดการเพื่อหลีกเลี่ยงช่องสัญญาณที่ไม่ปลอดภัยหรือใช้การจำกัดพลังงานหากไม่สามารถหลีกเลี่ยงได้

Wi-Fi ตรง (P2P)

  1. หากมีช่องสัญญาณที่ไม่ปลอดภัยที่มีข้อจำกัด Wi-Fi Direct (P2P)

    1. กรอบงานร้องขอ wpa_supplicant เพื่อหลีกเลี่ยงช่องทางที่ไม่ปลอดภัยโดยใช้วิธี HAL ISupplicantP2pIface::setDisallowedFrequencies()
  2. หากมีช่องทางที่ไม่ปลอดภัยไม่มีข้อจำกัด

    1. ไดรเวอร์/เฟิร์มแวร์ของผู้จำหน่ายจะใช้การจำกัดพลังงานหากใช้ช่องสัญญาณที่ไม่ปลอดภัยโดยไม่มีข้อจำกัด Wi-Fi Direct (P2P)

การรับรู้ Wi-Fi (NAN)

เฟรมเวิร์กไม่เกี่ยวข้องกับการเลือกช่องสัญญาณสำหรับ Wi-Fi Aware (NAN) และไม่มีการดำเนินการใดๆ กับเฟรมเวิร์ก ไดรเวอร์/เฟิร์มแวร์ของผู้จำหน่ายมีหน้าที่รับผิดชอบในการหลีกเลี่ยงช่องสัญญาณ Wi-Fi Aware (NAN)

ปิดการใช้งานอัลกอริทึม

หากคุณต้องการปิดการใช้งานการใช้อัลกอริทึมเริ่มต้นและส่งรายการช่องทางที่ไม่ปลอดภัยของคุณเองเพื่อหลีกเลี่ยง ให้กำหนดค่าโอเวอร์เลย์ config_wifiDefaultCoexAlgorithmEnabled หากตั้งค่าการซ้อนทับเป็นเท็จ อัลกอริธึมเริ่มต้นจะถูกปิดใช้งาน จากนั้นคุณสามารถใช้อัลกอริธึมที่เป็นกรรมสิทธิ์นอกแบนด์ของคุณเองเพื่อสร้างรายการช่องทางที่ไม่ปลอดภัยเพื่อนำไปใช้กับเฟรมเวิร์กโดยใช้ API ระบบต่อไปนี้

public void setCoexUnsafeChannels(Set<CoexUnsafeChannel> coexUnsafeChannels,
  int coexRestrictions);

การตรวจสอบความถูกต้องของการดำเนินการ

หากต้องการตรวจสอบการใช้งานฟีเจอร์การหลีกเลี่ยงช่องสัญญาณ Wi-Fi/เซลลูลาร์ coex ให้ใช้การทดสอบต่อไปนี้

การทดสอบซีทีเอส

  • WifiManagerTest.java

    • testCoexMethodsShouldFailNoPermission()
    • testListenOnCoexUnsafeChannels()

การทดสอบพระราชบัญญัติ

  • WifiManagerTest.py

    • test_set_get_coex_unsafe_channels()

การทดสอบวีทีเอส

  • หากมีการใช้งาน AIDL: wifi_chip_aidl_test.cpp

    • TEST_P(WifiChipAidlTest, SetCoexUnsafeChannels)
  • หากมีการใช้งาน HIDL: wifi_chip_hidl_test.cpp

    • TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)