Phased Array Microphone (2023)
(benwang.dev)- 192-चैनल phased array microphone रिकॉर्डिंग के बाद भी directional response बदल सकता है या एक साथ लाखों बिंदुओं पर focus कर सकता है, जिससे sound source localization और visualization संभव होता है, जो सामान्य directional microphone के लिए कठिन है
- हार्डवेयर radial microphone arms और एक central hub से बना है, और लगभग $700 की लागत में 192 MEMS microphones, Colorlight i5 FPGA card, और Gigabit Ethernet ट्रांसमिशन संरचना का उपयोग करता है
- FPGA जटिल preprocessing के बजाय raw PDM data transmission पर केंद्रित है, 3.125MHz input को संभालता है, और लगभग 715Mbps पर Gigabit Ethernet bandwidth का लगभग 70% उपयोग करता है
- सॉफ्टवेयर CIC filter, FFT-आधारित calibration, GPU optimization, और Triton beamforming को मिलाकर 3D near-field और 2D far-field sound source localization को real-time visualization के साथ दिखाता है
- UDP packets को
tcpdumpसे capture करके replay किया जा सकता है, लेकिन raw storage 87.5MB/s तक पहुँचती है, इसलिए 1 घंटे की रिकॉर्डिंग के लिए 315GB चाहिए
192-चैनल phased array microphone की संरचना
- 192-चैनल phased array microphone में FPGA data acquisition और GPU-आधारित beamforming·visualization को जोड़ा गया है
- सामान्य directional microphone के विपरीत, phased array रिकॉर्डिंग के बाद भी directionality बदल सकता है और real time में एक साथ लाखों बिंदुओं पर focus कर सकता है
- पूरा डिज़ाइन open source के रूप में सार्वजनिक है
हार्डवेयर डिज़ाइन
-
array संरचना और लागत
- कई microphones को चौड़े spacing distribution में रखकर phased array बनाया गया है
- linear arrays में broadband signal के लिए microphones के बीच exponential spacing को optimal माना जाता है
- 2D array में symmetric linear array arms को radial रूप से रखा गया है ताकि central hub board छोटा रहे
- पूरे array की लागत लगभग $700 है
-
arm board
- हर arm की लंबाई PCB manufacturing·assembly limits के अनुसार तय की गई, और JLCPCB की 4-layer PCB manufacturing·assembly की अधिकतम लंबाई 570mm थी
- microphones के लिए प्रति unit लगभग $0.5 वाले low-cost digital-output MEMS microphones इस्तेमाल किए गए
- इस price range में microphones के बीच performance difference बहुत बड़ा नहीं है
- ज़्यादातर 10kHz तक ठीक प्रदर्शन दिखाते हैं, लेकिन phase delay और volume matching स्पष्ट रूप से specified नहीं हैं
- microphones PDM(pulse density modulation) तरीके से data output करते हैं
- वे audible range से काफी ऊपर, अधिकतम 4MHz frequency पर 1-bit output देते हैं
- high sampling rate quantization noise की भरपाई करती है
- clock के rising·falling edge पर data latch करने वाला DDR support होने से दो microphones को एक लाइन पर multiplex किया जा सकता है
- हर arm में 8 microphones और 4 output lines हैं, और clock input line पर output buffer रखा गया है
- डिज़ाइन ऐसा है कि सैकड़ों microphones एक ही clock signal share करें तब भी rise time व्यावहारिक सीमा में रहे
- arm PCB yield अच्छी नहीं थी, और शुरुआती हालत में काम करने वाले boards लगभग 50% थे
- सबसे आम failure clock line का 3V3 या GND से short होना था
- short ठीक करने के लिए microphones को एक-एक करके हटाने वाला trial and error करना पड़ा
- कुछ microphones rework के बाद भी गलत data देते थे, इसलिए code में उन microphones को masking करके बाहर रखा गया
- अगले डिज़ाइन में clock line series resistor, बेहतर panelization, और बेहतर solder paste stencil से rework कम किया जा सकता है
-
hub board
- data acquisition के लिए बहुत सारे low-latency I/O और Gigabit Ethernet जैसे high-speed interfaces की ज़रूरत होती है, इसलिए FPGA इस्तेमाल किया गया
- खास तौर पर Colorlight i5 card चुना गया
- कारण थे पर्याप्त I/O, कम कीमत, आसान उपलब्धता, और integrated Ethernet PHY 2 का होना
- इस project में Ethernet PHY में से सिर्फ एक का उपयोग हुआ
- यह card मूल रूप से LED panel के लिए Ethernet interface है, लेकिन पूरी तरह reverse engineered किया जा चुका है
- लगभग 100 GPIO DDR2 connector पर exposed हैं, जिससे मूल FPGA के BGA की तुलना में fanout आसान हो जाता है
- hub में FPGA के अलावा simple power management circuit, arm boards के connectors, और integrated magnetics वाला Ethernet connector शामिल है
-
mechanical डिज़ाइन
- arms को PCB-mounted standoffs·nuts और M3 screws से hub पर लगाया गया है
- arm और hub के बीच connection 8-pin 2mm pitch connector से होता है
- शुरुआती डिज़ाइन में arm PCB के slots और circumferential structural PCB को interlock किया गया था, लेकिन arm की torsional stiffness कम होने से पूरी संरचना आसानी से deform हो जाती थी
- अंतिम डिज़ाइन में array के बाहरी हिस्से पर laser-cut 1/4-inch MDF piece रखा गया और हर arm को cable tie से MDF पर fixed किया गया
- microphone array दीवार पर mounted है और reflections के प्रति संवेदनशील है, इसलिए calibration आसान करने के लिए acoustic foam से reflections कम की गईं
FPGA gateware
-
डिज़ाइन लक्ष्य
- gateware का मुख्य लक्ष्य एकत्रित raw data को बिना loss के स्थिर रूप से कंप्यूटर तक भेजना है
- FPGA में decimation और filtering करने से data rate कम की जा सकती है, लेकिन raw PDM data भी Gigabit Ethernet से भेजा जा सकता है
- raw data भेजने से FPGA code complexity कम होती है और iterative development तेज़ होता है
- code compilation place·route की तुलना में तेज़ है, और सामान्य code में debugger इस्तेमाल करना gateware debugging से आसान है
-
PDM interface
- PDM input module 50MHz system clock को 16 से divide करके 3.125MHz PDM clock output करता है
- हर clock edge के बाद 96 input pins latch किए जाते हैं, और हर clock cycle में 32-bit data shift होता है
- हर 192-bit data chunk पर 32-bit incrementing integer header जोड़ा जाता है
- PDM interface input data rate 3.125MHz × 96 input pins × DDR 2 = 600Mbps है
- header सहित output data rate 700Mbps है, और 32-bit output data path utilization लगभग 40% है
-
packetization और UDP transmission
- packetization module एक special input interface वाले FIFO buffer जैसा है
- क्योंकि Ethernet interface PDM output से तेज़ है, इसलिए standard FIFO की तरह सिर्फ एक item होते ही output देने पर request से छोटे packets बन सकते हैं
- packetization module queue में एक packet भर data जमा होने तक इंतज़ार करता है और फिर transmission शुरू करता है, जिससे fixed-size packets सुनिश्चित होते हैं
- हर packet में 224-bit PDM output blocks के 48 blocks होते हैं
- एक block में 192-bit data और 32-bit header होता है
- प्रति packet data 1344 bytes है
- इसमें 20-byte IPv4 header और 8-byte UDP header जुड़ते हैं
- packet rate लगभग 65kpps है, और परिणामस्वरूप line rate 715Mbps है, यानी Gigabit Ethernet utilization लगभग 70%
- UDP streaming के लिए LiteEth का उपयोग किया गया
- यह UDP/IP encapsulation, ARP table जैसी निचले स्तर की जटिलताओं को abstract करता है
- यह FIFO को UDP stream से जोड़ने के लिए आसान interface देता है
- बीच-बीच की latency packetization FIFO के buffer margin में absorb हो जाती है
-
FPGA resource usage
- Colorlight i5 का FPGA
LFE5U-25F-6BG381Cहै और इसमें 25k LUT हैं - डिज़ाइन को open source Project Trellis toolchain से place·route किया गया
- gateware को सरल रखा गया, इसलिए resource utilization कम है और अतिरिक्त features की काफी गुंजाइश है
- DP16KD: 16/56, 28%
- TRELLIS_FF: 1950/24288, 8%
- TRELLIS_COMB: 3701/24288, 15%
- अधिकतम clock 50MHz target के मुकाबले 73.17MHz पर pass हुई
- Ethernet RX clock की timing warning LiteEth के gray counter से जुड़ा false positive है
- Colorlight i5 का FPGA
software processing pipeline
-
CIC filter
- हर microphone 3.125MHz 1-bit signal output करता है, जिसे आगे की processing के लिए कम sampling rate और bit depth में बदलना पड़ता है
- इसके लिए कम arithmetic cost वाला CIC filter इस्तेमाल किया गया
- Tom Verbeure की Moving Average and CIC Filters series का संदर्भ लिया गया
- अंतिम चयन 4-stage, 16x decimation CIC filter था
- इससे sampling rate घटकर 195kHz हो जाती है
- output 32-bit है
- 3.125MHz data को स्वीकार करने के लिए एक sample bundle को 320ns के भीतर process करना पड़ता है
- साधारण Rust implementation single core पर पर्याप्त तेज़ नहीं थी, इसलिए abstraction कम करके auto-vectorization को बेहतर तरीके से प्रेरित करने वाली implementation अपनाई गई
- SIMD intrinsic implementation बहुत तेज़ थी, लेकिन बाकी code के साथ इस्तेमाल करने पर alignment issues आए
- benchmark परिणाम:
bench_cic: 574ns/iter, 41MB/sbench_fast_cic: 181ns/iter, 132MB/sbench_simd_cic: 36ns/iter, 666MB/s
-
calibration
- array calibration के लिए कमरे में array के सामने white noise चलाने वाले speaker को घुमाया गया
- सभी microphone pairs के बीच FFT-आधारित cross-correlation की गणना करके relative delay निकाला गया
- microphone pairs 18,000 से अधिक हैं, इसलिए computation बहुत भारी है
- 16k~64k window size पर FFT memory bottleneck बनता है, इसलिए IFFT और peak search को मिलाकर result को memory में लिखने से बचा गया, और 15x speedup मिला
- Ryzen 7950X पर यह प्रक्रिया real time में चलती है
- इसके बाद हर समय बिंदु पर sound source position और हर microphone position को gradient descent से optimize किया गया
- loss function measured correlation और ideal correlation के अंतर को कम करता है
- microphone positions शुरुआती positions से बहुत दूर न जाएँ, यह भी सुनिश्चित किया गया
- sound source trajectory का jerk भी कम किया गया
- calibration प्रक्रिया में sound speed को भी optimization parameter में शामिल किया गया, जिससे पूरी प्रक्रिया एक बहुत जटिल thermometer जैसी बन गई
- सैकड़ों iterations के बाद sound source position, microphone position, और sound speed जैसी constants एक उचित solution पर converge हो गईं
- यह समस्या GPU vectorization के लिए उपयुक्त थी और कुछ ही सेकंड में converge हो गई
- अंतिम average position error लगभग 1mm स्तर की थी
- कम structural stiffness से उत्पन्न बड़े systematic distortion, जैसे concavity, भी calibrate कर लिए गए
- डिज़ाइन positions और calibrated positions के बीच अधिकतम error लगभग 5mm थी
- 10kHz ध्वनि की wavelength लगभग 3.4cm होती है, इसलिए calibration न होने पर high frequency पर meaningful phase error हो सकती है
beamforming और visualization
-
beamforming तरीका
- beamforming वह प्रक्रिया है जिसमें raw microphone inputs को process करके directional response बनाया जाता है
- लागू किया गया तरीका सबसे सरल delay-and-sum, यानी DAS है
- हर signal को sound source तक की distance difference के अनुसार delay करके sum किया जाता है
- इस project में beamforming frequency domain में की जाती है
- frequency domain में delay को आवश्यक delay के अनुपात में linear phase term और signal की complex multiplication से लागू किया जाता है
- sampling period के integer multiple न होने वाले delays भी स्वाभाविक रूप से संभाले जाते हैं
- मूल array के कई overlapping subarrays को frequency range के अनुसार उपयोग किया गया
- हर frequency पर हर microphone के साथ beamforming करना ज़रूरी नहीं, इससे throughput कम होता है और सभी frequencies पर beamforming gain को match करने में भी मदद मिलती है
-
Triton-आधारित GPU implementation
- beamformer को Triton kernel के रूप में implement किया गया
- Triton एक Python DSL है जो Nvidia GPU पर चलने के लिए compile होता है
- लाखों बिंदुओं पर beamforming करते समय GPU की massive parallelism real-time results संभव बनाती है
- Triton language में shared memory array indexing support से जुड़ी मौजूदा सीमा के कारण performance थोड़ी suboptimal है, लेकिन CUDA C++ लिखने का विकल्प नहीं चुना गया
-
near-field 3D beamforming
- near-field 3D beamforming 5cm voxel grid पर की जाती है
- grid size 64×64×64 है
- RTX 4090 पर 12Hz update rate हासिल हुई
- इससे ज़्यादा speed छोटे work units में CPU-GPU synchronization के non-optimal overhead से सीमित है
- voxel grid को OpenGL-आधारित high-performance visualization library VisPy से visualise किया गया
- 2.5 लाख translucent voxels render करना आधुनिक games के polygon count की तुलना में interactive framerate पर समस्या नहीं है
-
far-field 2D beamforming
- far-field sound sources में wavefront लगभग flat होती है, इसलिए source कितनी दूर है इससे array signal में बड़ा बदलाव नहीं आता
- पास के sources में wavefront curvature अधिक होती है, इसलिए 3D position निर्धारित की जा सकती है
- far-field beamforming में depth dimension नहीं होती, इसलिए इसे अधिक resolution पर चलाया जा सकता है
- 512×512 pixel grid उपयोग की गई, और वही 12Hz update rate हासिल हुई
- far-field beamforming में वास्तविक plane-wave assumption के बजाय points को बहुत दूर रखने वाला approximation उपयोग किया गया
- कमरे के reflections और multipath अधिक होने के कारण 2D visualization demo acoustic environment से प्रभावित होती है
-
directional audio
- ऊपर की दोनों beamforming implementations हर position पर sound energy की गणना करती हैं, लेकिन memory में beamformed audio नहीं बनातीं
- directional audio recording के लिए time-domain delay-and-sum beamformer implement किया गया
- यह array center के सापेक्ष 3D coordinates input लेता है
- यह audio samples output करता है
- यह beamformer output के संदर्भ में position के लिए differentiable है
- audio source position को differentiable loss function के रूप में optimize किया जा सकता है
- multi-party transcription में forced alignment model का उपयोग करके हर speaker की physical position खोजने जैसे applications संभव हो सकते हैं
- प्रभाव की तुलना के लिए, एक speaker array के सामने audio चलाता है और दूसरा speaker array center से लगभग 45 डिग्री दूर, समान दूरी पर white noise चलाता है
- single-microphone raw audio और beamformed audio की तुलना beamforming के प्रभाव को दिखाती है
recording तरीका और सीमाएँ
- microphone array data UDP packets है, इसलिए
tcpdumpजैसे tools से record किया जा सकता है - packet capture files को पढ़कर listener में packets फिर से inject किए जा सकते हैं
- ऊपर के programs real-time operation के लिए डिज़ाइन किए गए थे, लेकिन इस तरीके से recorded data पर भी चल सकते हैं
- कमी यह है कि raw data को ज्यों का त्यों store किया जाता है, इसलिए output data rate बहुत अधिक है
- quantization noise तक faithfully store होती है
- data rate 87.5MB/s है
- 1 घंटे की recording के लिए 315GB चाहिए
- अधिक optimized implementation compression लागू कर सकती है, या CIC filter के बाद कम sampling rate पर recording कर सकती है
संभावित विस्तार
- project व्यावहारिक रूप से पूरा हो चुका है, और निकट भविष्य में आगे काम करने की योजना नहीं है
- फिर भी जो लोग इसे खुद बनाना चाहते हैं, उनके लिए विस्तार की गुंजाइश है
- DAMAS जैसे अधिक उन्नत beamforming algorithms का उपयोग
- मौजूदा functions को जोड़कर बेहतर GUI, जैसे आवाज़ कहाँ से आ रही है यह देखना और वहीं से audio record करना
- differentiable beamforming और neural network model को जोड़ना, जैसे forced alignment उदाहरण जैसी applications
1 टिप्पणियां
Hacker News की राय
यह बात दिलचस्प है कि calibration प्रक्रिया में ध्वनि की गति भी सिस्टम का सबसे अच्छा मॉडल पाने के लिए optimize किया जाने वाला parameter है, इसलिए पूरी प्रक्रिया एक बेतुके ढंग से over-engineered thermometer जैसी काम करती है
इलेक्ट्रॉनिक्स की कहावत “हर sensor temperature sensor होता है, और कुछ sensor कुछ और भी मापते हैं” याद आती है
बाद में पता चला कि उसी तरीके से temperature भी मापा जा सकता है, और graph को extrapolate करके absolute zero भी निकाला जा सकता था
याद है कि result करीब 20K तक चूक गया था, लेकिन हाई स्कूल के garage project के हिसाब से मुझे वह काफी अच्छा लगता है
खास तौर पर यह उदाहरण पसंद है कि पर्याप्त सटीक inertial measurement unit (IMU), Coriolis effect का उपयोग करके longitude की अपेक्षाकृत सटीक माप तक कर सकता है
https://youtu.be/zsA3X40nz9w?si=oGg2wdUlLXSDxpsN
मैंने पहले एक project किया था जिसमें बड़े Y आकार में जमीन पर लगाए गए 4 microphones के array से चमगादड़ों की multilateration की जाती थी
चार microphones तक पहुंचने के time difference का उपयोग करके array के ऊपर उड़ने वाले हर चमगादड़ की position निकाली जा सकती थी और species भी पहचानी जा सकती थी
इसका उपयोग wind turbine installation के environmental impact का आकलन करने वाली research में हुआ था, और यह काफी मजेदार था
यह छोटे laser pulses से मच्छरों को track करके मारने के लिए विकसित device था
मच्छर की spatial position को बहुत सटीक पकड़ना पड़ता था, इसलिए side effect के तौर पर wingbeat frequency के अंतर को detect करके sex और species के हिसाब से targets को अलग किया जा सकता था
स्वाभाविक रूप से hardware और software skills कम थीं, इसलिए TDOA algorithm को भी सबसे naive रूप में implement किया और cross-correlation से time difference estimate करने का तरीका भी बहुत inefficient था
फिर भी बहुत कुछ सीखा, और अंत में यह SAR systems में PhD तक ले गया
मेरे हिसाब से SAR असल में array के बजाय platform की movement का उपयोग करने वाले beamformer जैसा है
मैंने सुना है कि चमगादड़ों के lungs इतने sensitive होते हैं कि बड़े turbines के pressure difference के आर-पार उड़ने पर capillaries लगभग फट जाती हैं
शुरुआत कहाँ से करूँ, इसके लिए कोई reference material मिल जाए तो अच्छा होगा
उन्होंने scorpion के नीचे microphone array रखा और दिखाया कि चमगादड़ scorpion को scan करने के लिए अपनी ultrasonic beam को कैसे move करता है
सच में कमाल का result था [0]
[0]: https://www.youtube.com/watch?v=57ScSPWhGqU
जिज्ञासा है कि array में TDM I2S microphones के बजाय PDM क्यों इस्तेमाल किया गया
ICS-52000 अपेक्षाकृत सस्ता है, 100 units पर करीब 2 डॉलर का पड़ता है, 4 microphones वाला breakout board भी है, और मेरी समझ में 8 या 16 तक chain में जोड़े जा सकते हैं
https://www.cdiweb.com/datasheets/notwired/ds-nw-aud-ics5200...
Jetson या I2S-capable DSP/GPU वाले hardware का उपयोग करें तो प्रति I2S port 16 microphones chain में जोड़ सकते हैं, इसलिए यह FPGA configuration की तुलना में assemble और program करने में काफी आसान लगता है
192 microphones हों तो 2 डॉलर/पीस और 0.5 डॉलर/पीस का अंतर काफी बड़ा हो जाता है
16-device daisy chain करने पर भी पर्याप्त I2S interfaces वाला device ढूंढना मुश्किल है, और ज्यादातर devices में जितनी जरूरत है उतने interfaces नहीं होते
FPGA और custom hardware अपने-आप में भी मजे का हिस्सा थे
leaking gas की hiss आवाज या electric arc की corona discharge सुनने के लिए higher frequencies उपयोगी होती हैं
Orin में internally 6 I2S ports हैं, इसलिए 16*6 = 96 microphones तक संभव लगता है और यह काफी अच्छा number है
हालांकि व्यवहार में शायद केवल 3 ही board के बाहर expose हैं और अलग-अलग development board connectors पर लगते हैं [1]
design में हमेशा details ही समस्या बनती हैं, इसलिए अगर 96 से ज्यादा चाहिए तो FPGA configure करना आसान हो सकता है
मेरे notes में रखे parts थे: ICS-52000 $3.50 20kHz, ICS-41350 $1.05 40kHz, SPH0641LU4H-1 $1.45 80kHz+
[1] https://docs.nvidia.com/jetson/archives/r34.1/DeveloperGuide...
I2S सबसे अच्छा विकल्प न होने के लगभग दो कारण हैं
I2S को PDM के 2 pins के बजाय 3 pins चाहिए होते हैं
हालांकि अगर आपके दिए datasheet की तरह microphones को daisy-chain किया जा सके तो यह काफी बढ़िया है, और भले ही standard I2S न हो, यह argument खत्म हो जाता है
PDM में बहुत higher sampling rate तक पहुंचा जा सकता है, जिससे delay-and-sum operation में delay चुनने की flexibility बढ़ती है
उदाहरण के लिए अगर PDM clock 2MHz है, तो theoretically 0.5µs precision से delay किया जा सकता है
असल में शायद lower precision से करेंगे, लेकिन I2S clock आमतौर पर maximum 192kHz के आसपास होता है
PDM microphones सस्ते भी होते हैं
YouTube पर acoustic camera खोजें तो उसकी performance दिखाने वाले काफ़ी प्रभावशाली demos मिलते हैं
जिन कंपनियों को मैं कुछ समय से देख रहा था, उनमें से एक यह है, और लगता है FLIR जैसे बड़े खिलाड़ी भी इसमें आ रहे हैं: https://www.youtube.com/@gfaitechgmbh
एक दिलचस्प लेकिन डरावना use case यह है कि सार्वजनिक जगहों को रिकॉर्ड करके बाद में कुछ खास लोगों के बीच हुई बातचीत पर ‘zoom in’ किया जाए
cochlear implant इस्तेमाल करने वाले एक दोस्त से बात करने पर लगा कि अगर इसके साथ सही signal processing हो, तो सुनने में बहुत मदद मिल सकती है
फिर से graduate student बनकर ultrasound speaker arrays के साथ जोड़कर medical applications आज़माना चाहूँगा
मूल रूप से यह real-time feedback वाला बहुत शक्तिशाली HIFU (high-intensity focused ultrasound) जैसा है
https://en.wikipedia.org/wiki/Focused_ultrasound
frequencies बहुत अधिक होती हैं, इसलिए 40kHz नहीं बल्कि लगभग 1~10MHz सोचना पड़ता है, और सामान्य electronics असल में काम के नहीं रहते
बात करना चाहें तो profile email पर संपर्क कर सकते हैं
अच्छा होगा अगर यह तकनीक अच्छी तरह packaged रूप में कई mobile devices में आ जाए
मेरे हिसाब से assistant, universal translator जैसी चीज़ों के अटकने की एक वजह खराब audio quality है
noise घटाना और direction detect कर पाना बहुत मददगार साबित हो सकता है
जैसे, dining table के चारों ओर बैठी group conversation का real-time translation करना चाहूँगा
शुरुआत में phone और headphones अपने-अपने microphones को combine करके इस काम के लिए इस्तेमाल कर सकें, तो अच्छा होगा
आगे चलकर, अगर आसपास के सभी phones मिलकर high-quality directional audio दे सकें तो कैसा रहेगा
बेशक, यह इस शर्त पर है कि privacy issues हल किए जा सकें
यह जीवन बदल सकता है
Android का Live Transcribe अभी बहुत अच्छा है, लेकिन कौन-सा शब्द किस speaker से आया, इसे अलग करने की कोशिश भी नहीं करता
इससे पता चलता है कि शोरगुल वाले कमरे में कोई हमसे क्या कह रहा है, यह समझने के लिए हमारा brain जबरदस्त processing करता है
https://en.wikipedia.org/wiki/Cocktail_party_effect?wprov=sf...
मोटे तौर पर जिस highest acoustic frequency को collect करना है, उसके 10 गुना के स्तर पर, यानी सेकंड के दसियों-हज़ारवें हिस्से के भीतर
साथ ही अगर array microphone positions कोई line, circle या दूसरी simple geometry नहीं हैं, तो improved signal निकालने वाला code, यानी mathematics, बहुत कठिन हो जाता है
Boeing ने ऐसे device का spherical version बनाया था और 787 prototype में soundproofing material candidates खोजने के लिए इस्तेमाल किया था
कहा जाता है कि airplane जैसे noisy environment में auditory illusions की वजह से sound असली जगह से अलग जगह से आती हुई महसूस हो सकती है
अगर soundproofing material के लिए weight budget तय हो, तो 80/20 point सही पकड़ना महत्वपूर्ण हो जाता है
अगर Zynq 7010 के साथ प्रयोग करना चाहते हैं, तो EBAZ4205 board देखने लायक है
AliExpress पर 20~30 euro में मिल सकता है, और यह पहले Bitcoin mining controller था
कुछ लोगों ने इसे पूरी तरह reverse engineer करके GitHub पर डाल दिया है, और GPIO access के लिए adapter board भी है
कम complexity से शुरू करना हो तो GoWin FPGA इस्तेमाल करने वाले “Sipeed” boards जैसे Chinese FPGAs भी हैं
वे काफ़ी काम के हैं और IDE भी free है
कल रात research करते हुए मैं इसी page पर पहुँचा
सोच रहा हूँ कि क्या किसी को room में microphones लगाकर किसी खास area का ही audio record करने का तरीका पता है
मेरा use case sofa side को record करना है, ताकि online friends के साथ TV देखते समय friends की आवाज़ों और broadcast noise को audio से हटाया जा सके
लगता है microphone array बनाकर beam steering इस्तेमाल करने से यह संभव होगा, लेकिन GitHub पर real-time चलने वाले code examples बहुत नहीं मिले
https://obsproject.com/
https://voicemeeter.com/
आपको microphone या beamforming technology नहीं, बल्कि वही echo cancellation चाहिए जो सभी video conferencing software इस्तेमाल करते हैं
broadcast audio और friends audio को input में देकर, हर एक पर echo cancellation apply कर दें
एक point, यानी sofa, से हर microphone तक की दूरी मापें, फिर sofa से microphone तक sound को पहुँचने में जितना समय लगता है उतना signal को time domain में delay करें और फिर जोड़ दें
बुनियादी तौर पर इसका मकसद यह है कि अलग-अलग distances पर होने के बावजूद microphones ने sofa signal को जैसे एक ही समय पर receive किया हो, वैसे align किया जाए
इस तरीके के असरदार होने के लिए microphone distance difference पर्याप्त होना चाहिए