From 5b1a81fb109df2ef0e7322d0c003fbe819a697c8 Mon Sep 17 00:00:00 2001 From: Josh Gao Date: Sun, 11 Jun 2023 10:35:01 +0800 Subject: [PATCH] update hexo-theme-next; change tex \vec to \boldsymbol --- _config.yml | 6 +- package-lock.json | 497 ++++++++++++------ package.json | 4 +- source/_posts/2023-04-18-josh-oap-part-1-1.md | 130 ++--- source/_posts/2023-04-20-josh-oap-part-1-2.md | 100 ++-- source/_posts/2023-04-20-josh-oap-part-1-3.md | 32 +- source/_posts/2023-04-22-josh-oap-part-1-4.md | 30 +- source/_posts/2023-04-24-josh-oap-part-1-5.md | 50 +- 8 files changed, 502 insertions(+), 347 deletions(-) diff --git a/_config.yml b/_config.yml index 4fe1d60..3dd107e 100644 --- a/_config.yml +++ b/_config.yml @@ -110,9 +110,9 @@ deploy: - type: git repo: josh@101.43.227.73:/home/josh/documents/josh-blog-deploy.git branch: master - # - type: git - # repo: josh@172.245.154.153:/home/josh/documents/josh-blog-deploy.git - # branch: master + - type: git + repo: josh@172.245.154.153:/home/josh/documents/josh-blog-deploy.git + branch: master - type: git repo: git@e.coding.net:josh-gao/josh-blog/josh-blog.git branch: master diff --git a/package-lock.json b/package-lock.json index c3f55f2..cea2813 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "hexo-site", "version": "0.0.0", "dependencies": { - "@next-theme/plugins": "^8.16.0", + "@next-theme/plugins": "^8.17.0", "hexo": "^6.3.0", "hexo-abbrlink": "^2.2.1", "hexo-deployer-git": "^4.0.0", @@ -29,79 +29,79 @@ "hexo-server": "^3.0.0", "hexo-tag-cloud": "2.1.*", "hexo-theme-landscape": "^1.0.0", - "hexo-theme-next": "^8.16.0", + "hexo-theme-next": "^8.17.0", "hexo-word-counter": "^0.1.0" } }, "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.0.tgz", - "integrity": "sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.1.tgz", + "integrity": "sha512-e91Jpu93X3t3mVdQwF3ZDjSFMFIfzSc+I76G4EX8nl9RYXgqcjframoL05VTjcD2YCsI18RIHAWVCBoCXVZnrw==", "dependencies": { - "@algolia/cache-common": "4.17.0" + "@algolia/cache-common": "4.17.1" } }, "node_modules/@algolia/cache-common": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.17.0.tgz", - "integrity": "sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ==" + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.17.1.tgz", + "integrity": "sha512-fvi1WT8aSiGAKrcTw8Qg3RYgcwW8GZMHcqEm4AyDBEy72JZlFBSY80cTQ75MslINjCHXLDT+9EN8AGI9WVY7uA==" }, "node_modules/@algolia/cache-in-memory": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.17.0.tgz", - "integrity": "sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.17.1.tgz", + "integrity": "sha512-NbBt6eBWlsXc5geSpfPRC5dkIB/0Ptthw8r0yM5Z7D3sPlYdnTZSO9y9XWXIptRMwmZe4cM8iBMN8y0tzbcBkA==", "dependencies": { - "@algolia/cache-common": "4.17.0" + "@algolia/cache-common": "4.17.1" } }, "node_modules/@algolia/client-account": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.17.0.tgz", - "integrity": "sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.17.1.tgz", + "integrity": "sha512-3rL/6ofJvyL+q8TiWM3qoM9tig+SY4gB1Vbsj+UeJPnJm8Khm+7OS+r+mFraqR6pTehYqN8yGYoE7x4diEn4aA==", "dependencies": { - "@algolia/client-common": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/client-common": "4.17.1", + "@algolia/client-search": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "node_modules/@algolia/client-analytics": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.17.0.tgz", - "integrity": "sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.17.1.tgz", + "integrity": "sha512-Bepr2w249vODqeBtM7i++tPmUsQ9B81aupUGbDWmjA/FX+jzQqOdhW8w1CFO5kWViNKTbz2WBIJ9U3x8hOa4bA==", "dependencies": { - "@algolia/client-common": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/client-common": "4.17.1", + "@algolia/client-search": "4.17.1", + "@algolia/requester-common": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "node_modules/@algolia/client-common": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.17.0.tgz", - "integrity": "sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.17.1.tgz", + "integrity": "sha512-+r7kg4EgbFnGsDnoGSVNtXZO8xvZ0vzf1WAOV7sqV9PMf1bp6cpJP/3IuPrSk4t5w2KVl+pC8jfTM7HcFlfBEQ==", "dependencies": { - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/requester-common": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "node_modules/@algolia/client-personalization": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.17.0.tgz", - "integrity": "sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.17.1.tgz", + "integrity": "sha512-gJku9DG/THJpfsSlG/az0a3QIn+VVff9kKh8PG8+7ZfxOHS+C+Y5YSeZVsC+c2cfoKLPo3CuHIiJ/p86erR3bA==", "dependencies": { - "@algolia/client-common": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/client-common": "4.17.1", + "@algolia/requester-common": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "node_modules/@algolia/client-search": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.17.0.tgz", - "integrity": "sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.17.1.tgz", + "integrity": "sha512-Q5YfT5gVkx60PZDQBqp/zH9aUbBdC7HVvxupiHUgnCKqRQsRZjOhLest7AI6FahepuZLBZS62COrO7v+JvKY7w==", "dependencies": { - "@algolia/client-common": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/client-common": "4.17.1", + "@algolia/requester-common": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "node_modules/@algolia/events": { @@ -110,47 +110,47 @@ "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" }, "node_modules/@algolia/logger-common": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.17.0.tgz", - "integrity": "sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw==" + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.17.1.tgz", + "integrity": "sha512-Us28Ot+fLEmX9M96sa65VZ8EyEEzhYPxfhV9aQyKDjfXbUdJlJxKt6wZpoEg9RAPSdO8IjK9nmuW2P8au3rRsg==" }, "node_modules/@algolia/logger-console": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.17.0.tgz", - "integrity": "sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.17.1.tgz", + "integrity": "sha512-iKGQTpOjHiE64W3JIOu6dmDvn+AfYIElI9jf/Nt6umRPmP/JI9rK+OHUoW4pKrBtdG0DPd62ppeNXzSnLxY6/g==", "dependencies": { - "@algolia/logger-common": "4.17.0" + "@algolia/logger-common": "4.17.1" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.0.tgz", - "integrity": "sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.1.tgz", + "integrity": "sha512-W5mGfGDsyfVR+r4pUFrYLGBEM18gs38+GNt5PE5uPULy4uVTSnnVSkJkWeRkmLBk9zEZ/Nld8m4zavK6dtEuYg==", "dependencies": { - "@algolia/requester-common": "4.17.0" + "@algolia/requester-common": "4.17.1" } }, "node_modules/@algolia/requester-common": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.17.0.tgz", - "integrity": "sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg==" + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.17.1.tgz", + "integrity": "sha512-HggXdjvVFQR0I5l7hM5WdHgQ1tqcRWeyXZz8apQ7zPWZhirmY2E9D6LVhDh/UnWQNEm7nBtM+eMFONJ3bZccIQ==" }, "node_modules/@algolia/requester-node-http": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.17.0.tgz", - "integrity": "sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.17.1.tgz", + "integrity": "sha512-NzFWecXT6d0PPsQY9L+/qoK2deF74OLcpvqCH+Vh3mh+QzPsFafcBExdguAjZsAWDn1R6JEeFW7/fo/p0SE57w==", "dependencies": { - "@algolia/requester-common": "4.17.0" + "@algolia/requester-common": "4.17.1" } }, "node_modules/@algolia/transporter": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.17.0.tgz", - "integrity": "sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.17.1.tgz", + "integrity": "sha512-ZM+qhX47Vh46mWH8/U9ihvy98HdTYpYQDSlqBD7IbiUbbyoCMke+qmdSX2MGhR2FCcXBSxejsJKKVAfbpaLVgg==", "dependencies": { - "@algolia/cache-common": "4.17.0", - "@algolia/logger-common": "4.17.0", - "@algolia/requester-common": "4.17.0" + "@algolia/cache-common": "4.17.1", + "@algolia/logger-common": "4.17.1", + "@algolia/requester-common": "4.17.1" } }, "node_modules/@algolia/ui-components-highlight-vdom": { @@ -168,9 +168,9 @@ "integrity": "sha512-a7mYHf/GVQfhAx/HRiMveKkFvHspQv/REdG+C/FIOosiSmNZxX7QebDwJkrGSmDWdXO12D0Qv1xn3AytFcEDlQ==" }, "node_modules/@babel/runtime": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", - "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -247,9 +247,9 @@ "integrity": "sha512-iRP+QKI2+oz3UAh4nPEq14CsEjrjD6a5+fuypjScisAh9kXKFvdJOZJDwk7kikLvWVLGEs9+kIUS4LPQV7VZVw==" }, "node_modules/@firebase/app": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.9.tgz", - "integrity": "sha512-8jzuHtQ/t9XqK+0IAQ/lpylVYzXGKIUKm6U3v7LWor+MGIm+9Ucn+hbrd2iBjH8qfmNrjnQnmf7sWBbdSa54oA==", + "version": "0.9.11", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.11.tgz", + "integrity": "sha512-b6OVXqn2qHXTASLstlu2aW8loHgB7gWcjVWbNKi6pZYZ9Tu3VE+xJuD8NH1br9gDh4ueVnrMBisfBTeZ0Hvlvg==", "dependencies": { "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", @@ -259,9 +259,9 @@ } }, "node_modules/@firebase/app-check": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.7.0.tgz", - "integrity": "sha512-y0raLJpEtiL+wonfInFMaSfBV/EDvr356ZHMWbpr5F7fR0/I3cC0h7U6SKpKhrbSHJ0fOYIe0xbih20KTlpcnA==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.8.0.tgz", + "integrity": "sha512-dRDnhkcaC2FspMiRK/Vbp+PfsOAEP6ZElGm9iGFJ9fDqHoPs0HOPn7dwpJ51lCFi1+2/7n5pRPGhqF/F03I97g==", "dependencies": { "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", @@ -273,11 +273,11 @@ } }, "node_modules/@firebase/app-check-compat": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.6.tgz", - "integrity": "sha512-azHAeHi9igoaIo04E6Yfuc7aIbWoWuBXuqjyYyWbeCc8Zz/NfJvIAgmXugN4LdxsHJ7XGlZTvwJ6YaYROdSa7A==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.7.tgz", + "integrity": "sha512-cW682AxsyP1G+Z0/P7pO/WT2CzYlNxoNe5QejVarW2o5ZxeWSSPAiVEwpEpQR/bUlUmdeWThYTMvBWaopdBsqw==", "dependencies": { - "@firebase/app-check": "0.7.0", + "@firebase/app-check": "0.8.0", "@firebase/app-check-types": "0.5.0", "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", @@ -289,9 +289,9 @@ } }, "node_modules/@firebase/app-check-interop-types": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.2.0.tgz", - "integrity": "sha512-+3PQIeX6/eiVK+x/yg8r6xTNR97fN7MahFDm+jiQmDjcyvSefoGuTTNQuuMScGyx3vYUBeZn+Cp9kC0yY/9uxQ==" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.0.tgz", + "integrity": "sha512-xAxHPZPIgFXnI+vb4sbBjZcde7ZluzPPaSK7Lx3/nmuVk4TjZvnL8ONnkd4ERQKL8WePQySU+pRcWkh8rDf5Sg==" }, "node_modules/@firebase/app-check-types": { "version": "0.5.0", @@ -299,11 +299,11 @@ "integrity": "sha512-uwSUj32Mlubybw7tedRzR24RP8M8JUVR3NPiMk3/Z4bCmgEKTlQBwMXrehDAZ2wF+TsBq0SN1c6ema71U/JPyQ==" }, "node_modules/@firebase/app-compat": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.9.tgz", - "integrity": "sha512-XdnkHNK3XdPrwChmuSJHDA6eYmo2KLAtaAG1SJLGMQ+n+S5/UcufmDkw9GvPh93H1xhPRAwd/vKdjHmE7xp3Zw==", + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.11.tgz", + "integrity": "sha512-IzjLh3Z9F4gPo+Ft7lNVxeKlYfKI6fseUmiLaySidcx/Sdro1vOzoBMOr+5OVVpVVMSib9BZ3QtBKZkPZk+Ucw==", "dependencies": { - "@firebase/app": "0.9.9", + "@firebase/app": "0.9.11", "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", "@firebase/util": "1.9.3", @@ -316,9 +316,9 @@ "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==" }, "node_modules/@firebase/auth": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.23.1.tgz", - "integrity": "sha512-QubckPA5Ad92HiY20szjdH7EnFxL8gsZzRLyNCmO2oqebVAVuh9pJp6Zb8EA+P/AuMQYMBo6rQ3oIHi9gUCstg==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.23.2.tgz", + "integrity": "sha512-dM9iJ0R6tI1JczuGSxXmQbXAgtYie0K4WvKcuyuSTCu9V8eEDiz4tfa1sO3txsfvwg7nOY3AjoCyMYEdqZ8hdg==", "dependencies": { "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", @@ -331,11 +331,11 @@ } }, "node_modules/@firebase/auth-compat": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.4.1.tgz", - "integrity": "sha512-wCw+6Jz7zCWzMA2bN8vphqEUmxuIFxHfBJiF3rKFTCEFPPXG4ulIcmMT98uuZVVq4xDPk/hxm105xwHBFAwBng==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.4.2.tgz", + "integrity": "sha512-Q30e77DWXFmXEt5dg5JbqEDpjw9y3/PcP9LslDPR7fARmAOTIY9MM6HXzm9KC+dlrKH/+p6l8g9ifJiam9mc4A==", "dependencies": { - "@firebase/auth": "0.23.1", + "@firebase/auth": "0.23.2", "@firebase/auth-types": "0.12.0", "@firebase/component": "0.6.4", "@firebase/util": "1.9.3", @@ -481,14 +481,14 @@ } }, "node_modules/@firebase/firestore": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.11.0.tgz", - "integrity": "sha512-r9qUbjuIKOXAVYwqZaamgXuUJBuV8I2X0Kao5PUxQAPueV2mRapdIlby6awYgjknE8kq1Tlys5Nf5/TV6WtnAg==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-3.12.1.tgz", + "integrity": "sha512-TgJup6AIAT9/u7MxdCeES/I96kJx7DLBTokOlW4FiiSCeOzyss9BYBrh1tkkXNIpFn9mUsvT44foZvFsOKp14Q==", "dependencies": { "@firebase/component": "0.6.4", "@firebase/logger": "0.4.0", "@firebase/util": "1.9.3", - "@firebase/webchannel-wrapper": "0.10.0", + "@firebase/webchannel-wrapper": "0.10.1", "@grpc/grpc-js": "~1.7.0", "@grpc/proto-loader": "^0.6.13", "node-fetch": "2.6.7", @@ -502,12 +502,12 @@ } }, "node_modules/@firebase/firestore-compat": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.8.tgz", - "integrity": "sha512-VrTckDEVBqFWFsHGVdQgCb0Tht/Rrg/nKFp2aat0FaIjr8A9t4Pfcuu32Py25SbiCnr98pyh3RmVYs0kbF/lCA==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.10.tgz", + "integrity": "sha512-mPxRwgi8riB0+EXVzwwOBssoBMCR1NtOz8uE0+vPlEzm3qCCDeyWK9Tqu8LBPs2uopWk6GJhy5esDHt0dnUd6A==", "dependencies": { "@firebase/component": "0.6.4", - "@firebase/firestore": "3.11.0", + "@firebase/firestore": "3.12.1", "@firebase/firestore-types": "2.5.1", "@firebase/util": "1.9.3", "tslib": "^2.1.0" @@ -564,11 +564,11 @@ } }, "node_modules/@firebase/functions": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.9.4.tgz", - "integrity": "sha512-3H2qh6U+q+nepO5Hds+Ddl6J0pS+zisuBLqqQMRBHv9XpWfu0PnDHklNmE8rZ+ccTEXvBj6zjkPfdxt6NisvlQ==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.10.0.tgz", + "integrity": "sha512-2U+fMNxTYhtwSpkkR6WbBcuNMOVaI7MaH3cZ6UAeNfj7AgEwHwMIFLPpC13YNZhno219F0lfxzTAA0N62ndWzA==", "dependencies": { - "@firebase/app-check-interop-types": "0.2.0", + "@firebase/app-check-interop-types": "0.3.0", "@firebase/auth-interop-types": "0.2.1", "@firebase/component": "0.6.4", "@firebase/messaging-interop-types": "0.2.0", @@ -581,12 +581,12 @@ } }, "node_modules/@firebase/functions-compat": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.4.tgz", - "integrity": "sha512-kxVxTGyLV1MBR3sp3mI+eQ6JBqz0G5bk310F8eX4HzDFk4xjk5xY0KdHktMH+edM2xs1BOg0vwvvsAHczIjB+w==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.5.tgz", + "integrity": "sha512-uD4jwgwVqdWf6uc3NRKF8cSZ0JwGqSlyhPgackyUPe+GAtnERpS4+Vr66g0b3Gge0ezG4iyHo/EXW/Hjx7QhHw==", "dependencies": { "@firebase/component": "0.6.4", - "@firebase/functions": "0.9.4", + "@firebase/functions": "0.10.0", "@firebase/functions-types": "0.6.0", "@firebase/util": "1.9.3", "tslib": "^2.1.0" @@ -885,9 +885,9 @@ } }, "node_modules/@firebase/webchannel-wrapper": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.10.0.tgz", - "integrity": "sha512-2I8y+vJVrPfPFJrnRGpao1Qc2Gu7wmYoo5ed2s5zK/DUGgcyY1Yr/xC0YdnKM4pi7rG3HqwW9ehAKUXoTMLdoA==" + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.10.1.tgz", + "integrity": "sha512-Dq5rYfEpdeel0bLVN+nfD1VWmzCkK+pJbSjIawGE+RY4+NIJqhbUDDQjvV0NUK84fMfwxvtFoCtEe70HfZjFcw==" }, "node_modules/@fortawesome/fontawesome-free": { "version": "6.4.0", @@ -1047,23 +1047,23 @@ "integrity": "sha512-oxJlvZUHVBfnt6dNrhso0jGIkDgj7CpoGStQIif6TNlU+qELXjWYNZONcsA1vCUZdYx0qDDQYI8YFkEQCIhu/g==" }, "node_modules/@next-theme/plugins": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/@next-theme/plugins/-/plugins-8.16.0.tgz", - "integrity": "sha512-M24QmCTTU6AAF/p4mZs3wu5TZknFuIempeCyQhwzgS8pSb/vUquoBjAHpq2Dvu0f2whR2BeqlCsBFaOXh7kJgg==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@next-theme/plugins/-/plugins-8.17.0.tgz", + "integrity": "sha512-K7u8wc9eA10DMOHQJYkFqwx3T2NPFnyEXMIS9MNpfm9y68QgCDcs+5pNOrP03FwDktQVJ62WflTS+6Ib5iXBEg==", "dependencies": { "@creativecommons/vocabulary": "2020.11.3", "@fancyapps/fancybox": "3.5.7", "@fortawesome/fontawesome-free": "6.4.0", "@next-theme/pjax": "0.6.0", - "algoliasearch": "4.17.0", + "algoliasearch": "4.17.1", "animate.css": "3.1.1", "animejs": "3.2.1", "disqusjs": "3.0.2", - "firebase": "9.21.0", + "firebase": "9.22.1", "gitalk": "1.8.0", "hexo-generator-searchdb": "1.4.1", - "instantsearch.js": "4.55.0", - "jquery": "3.6.4", + "instantsearch.js": "4.56.1", + "jquery": "3.7.0", "katex": "0.16.7", "lozad": "1.16.0", "mathjax": "3.2.2", @@ -1071,11 +1071,12 @@ "mermaid": "9.4.3", "pace-js": "1.2.4", "pangu": "4.0.7", - "pdfobject": "2.2.8", + "pdfobject": "2.2.11", "prism-themes": "1.9.0", "prismjs": "1.29.0", "quicklink": "2.3.0", - "ribbon.js": "1.0.2" + "ribbon.js": "1.0.2", + "wavedrom": "3.2.0" } }, "node_modules/@protobufjs/aspromise": { @@ -1165,9 +1166,9 @@ "integrity": "sha512-udCxb8DvjcDKfk1WTBzDsxFbLgYxmQGKrE/ricoMqHRNjSlSUCcamVTA5lIQqzY10mY5qCY0QDwBfFEwhfoDPw==" }, "node_modules/@types/google.maps": { - "version": "3.53.1", - "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.53.1.tgz", - "integrity": "sha512-+7JVpq+kFzTU3TweSz6huYuFedZ4s60WeABaXYU6rDZczdpfoQ5DuZNCDc/eAAcdFJpxMMDpzf3d9YTMNodBFg==" + "version": "3.53.4", + "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.53.4.tgz", + "integrity": "sha512-IiDAYTONQEKCBssPtoM0XqWF8YIIk2leba4NOf9qVQ/d8l5gLuS3QT87TrX6/u8rMonQAXC9KEDmM4q7sT6MWg==" }, "node_modules/@types/hogan.js": { "version": "3.0.1", @@ -1180,9 +1181,9 @@ "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "node_modules/@types/node": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.1.tgz", - "integrity": "sha512-DqJociPbZP1lbZ5SQPk4oag6W7AyaGMO6gSfRwq3PWl4PXTwJpRQJhDq4W0kzrg3w6tJ1SwlvGZ5uKFHY13LIg==" + "version": "20.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.0.tgz", + "integrity": "sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ==" }, "node_modules/@types/qs": { "version": "6.9.7", @@ -1291,24 +1292,24 @@ } }, "node_modules/algoliasearch": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.17.0.tgz", - "integrity": "sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.17.1.tgz", + "integrity": "sha512-4GDQ1RhP2qUR3x8PevFRbEdqZqIARNViZYjgTJmA1T7wRNtFA3W4Aqc/RsODqa1J8IO/QDla5x4tWuUS8NV8wA==", "dependencies": { - "@algolia/cache-browser-local-storage": "4.17.0", - "@algolia/cache-common": "4.17.0", - "@algolia/cache-in-memory": "4.17.0", - "@algolia/client-account": "4.17.0", - "@algolia/client-analytics": "4.17.0", - "@algolia/client-common": "4.17.0", - "@algolia/client-personalization": "4.17.0", - "@algolia/client-search": "4.17.0", - "@algolia/logger-common": "4.17.0", - "@algolia/logger-console": "4.17.0", - "@algolia/requester-browser-xhr": "4.17.0", - "@algolia/requester-common": "4.17.0", - "@algolia/requester-node-http": "4.17.0", - "@algolia/transporter": "4.17.0" + "@algolia/cache-browser-local-storage": "4.17.1", + "@algolia/cache-common": "4.17.1", + "@algolia/cache-in-memory": "4.17.1", + "@algolia/client-account": "4.17.1", + "@algolia/client-analytics": "4.17.1", + "@algolia/client-common": "4.17.1", + "@algolia/client-personalization": "4.17.1", + "@algolia/client-search": "4.17.1", + "@algolia/logger-common": "4.17.1", + "@algolia/logger-console": "4.17.1", + "@algolia/requester-browser-xhr": "4.17.1", + "@algolia/requester-common": "4.17.1", + "@algolia/requester-node-http": "4.17.1", + "@algolia/transporter": "4.17.1" } }, "node_modules/algoliasearch-helper": { @@ -1750,6 +1751,87 @@ "file-uri-to-path": "1.0.0" } }, + "node_modules/bit-field": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/bit-field/-/bit-field-1.8.0.tgz", + "integrity": "sha512-xChg+vwCPZckjT1s0bJU5KbGWVqA+LDsi4YOiXVFntl+yzlPpBMdyeDU/wTTqoKAZAdOMDfGjpOUyP+untdOWQ==", + "dependencies": { + "fs-extra": "^10.1.0", + "onml": "^2.1.0", + "tspan": "^0.4.0", + "yargs": "^17.6.2" + }, + "bin": { + "bitfield": "bin/bitfield.js" + } + }, + "node_modules/bit-field/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/bit-field/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bit-field/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bit-field/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/bit-field/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/bit-field/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, "node_modules/bl": { "version": "0.9.5", "resolved": "https://registry.npmmirror.com/bl/-/bl-0.9.5.tgz", @@ -4215,25 +4297,25 @@ } }, "node_modules/firebase": { - "version": "9.21.0", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.21.0.tgz", - "integrity": "sha512-kQpT+YjusVhqj8feSmb+9Fpmyfy7ayGSd6GVk2k0qJjt+AwYgHZ9tuHuIgFdEHGsvqxYRZJpu067ck9ZQwbqQw==", + "version": "9.22.1", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-9.22.1.tgz", + "integrity": "sha512-8x55ZZJwPlctKIhlfXL+KTOpdabp6dDpDwTEmuW1QNbfCkE1ZEuXHgjiQMfTkoeyQO9luV6YwVdgbgCt7yfYCg==", "dependencies": { "@firebase/analytics": "0.10.0", "@firebase/analytics-compat": "0.2.6", - "@firebase/app": "0.9.9", - "@firebase/app-check": "0.7.0", - "@firebase/app-check-compat": "0.3.6", - "@firebase/app-compat": "0.2.9", + "@firebase/app": "0.9.11", + "@firebase/app-check": "0.8.0", + "@firebase/app-check-compat": "0.3.7", + "@firebase/app-compat": "0.2.11", "@firebase/app-types": "0.9.0", - "@firebase/auth": "0.23.1", - "@firebase/auth-compat": "0.4.1", + "@firebase/auth": "0.23.2", + "@firebase/auth-compat": "0.4.2", "@firebase/database": "0.14.4", "@firebase/database-compat": "0.3.4", - "@firebase/firestore": "3.11.0", - "@firebase/firestore-compat": "0.3.8", - "@firebase/functions": "0.9.4", - "@firebase/functions-compat": "0.3.4", + "@firebase/firestore": "3.12.1", + "@firebase/firestore-compat": "0.3.10", + "@firebase/functions": "0.10.0", + "@firebase/functions-compat": "0.3.5", "@firebase/installations": "0.6.4", "@firebase/installations-compat": "0.2.4", "@firebase/messaging": "0.12.4", @@ -4406,6 +4488,27 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/fs-minipass": { "version": "1.2.7", "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-1.2.7.tgz", @@ -7328,9 +7431,9 @@ "integrity": "sha512-bWQJWMqQI78wWiJPQZq5pJBH20TM442ShCaHGRetuEgMraxH0OKxB3NTupJzNEkzEk8DV2yrdizkXdKN6i501A==" }, "node_modules/hexo-theme-next": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/hexo-theme-next/-/hexo-theme-next-8.16.0.tgz", - "integrity": "sha512-UPqJXDlAThsbqsthSgC0J2qzdW5HtTxTwMnHPevgo/292qlv4Yx5noIttRV+W0WUgrzTmIVuSGuL0Sok10UhRA==" + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/hexo-theme-next/-/hexo-theme-next-8.17.0.tgz", + "integrity": "sha512-J51XPF6wlxxgJ6MW7MXi7LweIhR7i/57CwFk7GHIncju4GHYcD78D678p2UAc9MQc8MFQuyz2pgGopnUEXZ9BQ==" }, "node_modules/hexo-util": { "version": "2.7.0", @@ -7770,9 +7873,9 @@ } }, "node_modules/instantsearch.js": { - "version": "4.55.0", - "resolved": "https://registry.npmjs.org/instantsearch.js/-/instantsearch.js-4.55.0.tgz", - "integrity": "sha512-jsxhPRgzL4C4cRjhkLm/AE9BO83o7bkL8GSHncSXu1sICBhy/6xxkv0x/bXI5PxYHhb9/PsEz5jblYn1lRwOLw==", + "version": "4.56.1", + "resolved": "https://registry.npmjs.org/instantsearch.js/-/instantsearch.js-4.56.1.tgz", + "integrity": "sha512-4BQdnMEDWP9IRF12xninO/yR1f7F+mE935X0eVKuhUqitZF7GvUsL93MysXxHyPJnrbC6o0Aofc3kNcTKteKWw==", "dependencies": { "@algolia/events": "^4.0.1", "@algolia/ui-components-highlight-vdom": "^1.2.1", @@ -7781,7 +7884,7 @@ "@types/google.maps": "^3.45.3", "@types/hogan.js": "^3.0.0", "@types/qs": "^6.5.3", - "algoliasearch-helper": "^3.11.3", + "algoliasearch-helper": "^3.13.0", "hogan.js": "^3.0.2", "htm": "^3.0.0", "preact": "^10.10.0", @@ -8351,9 +8454,9 @@ "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==" }, "node_modules/jquery": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz", - "integrity": "sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ==" + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz", + "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ==" }, "node_modules/js-tokens": { "version": "4.0.0", @@ -8439,6 +8542,25 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/jsonify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", @@ -8765,6 +8887,15 @@ "node": ">=0.8.0" } }, + "node_modules/logidrom": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/logidrom/-/logidrom-0.3.1.tgz", + "integrity": "sha512-B1Rjay3Ye/JcythUjMt+KLiLIwOjnMJN1M5BRbDgNMsJhmn7yApbx6n1rw7cT3Fi/NA77HDM+y3y1nXvKQVB9Q==", + "dependencies": { + "estraverse": "^5.1.0", + "tspan": "^0.4.0" + } + }, "node_modules/long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", @@ -10009,6 +10140,14 @@ "node": ">=4" } }, + "node_modules/onml": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/onml/-/onml-2.1.0.tgz", + "integrity": "sha512-fvaSZRzprpwLFge/mcwE0CItfniNisVNamDdMK1FQUjh4ArQZ8ZWSkDaJbZc3XaANKZHq0xIa8NJpZ2HSe3oXA==", + "dependencies": { + "sax": "^1.2.1" + } + }, "node_modules/open": { "version": "8.4.2", "resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz", @@ -10480,9 +10619,9 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/pdfobject": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/pdfobject/-/pdfobject-2.2.8.tgz", - "integrity": "sha512-dB/soWNMLtVGHfXERXnAtsKm0XwC6lyGVYegQcZxL4rw07rNOKvawc9kddBzlGr7TbiBZuGf4Drb3kyRbTf/QA==" + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/pdfobject/-/pdfobject-2.2.11.tgz", + "integrity": "sha512-vGHG1+APo9+FQnnQsf36oHnpL7orJDkt8V3jRTQdvuajgJXBs1PbjA+gKsoiU1BOSNe9aSQubYWnW1LhNqurGw==" }, "node_modules/performance-now": { "version": "2.1.0", @@ -12515,6 +12654,11 @@ "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.5.0.tgz", "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" }, + "node_modules/tspan": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/tspan/-/tspan-0.4.0.tgz", + "integrity": "sha512-0ELL9tpLpTqLliFyQySaxgCO43buCML+j3TI4E1LuSI8wkzITGEVhZCyMvv/A+3ek9KpgALhhgnZESRLTbN+iw==" + }, "node_modules/tunnel-agent": { "version": "0.4.3", "resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz", @@ -12977,6 +13121,17 @@ "loose-envify": "^1.0.0" } }, + "node_modules/wavedrom": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/wavedrom/-/wavedrom-3.2.0.tgz", + "integrity": "sha512-7U0JuNbYKD84Xwf3Ofxc9M0BRUOWJ/aNhGHtkuujiH012re5q3qoEUtJtSvQjMjY2E5w6Nz2fToW7JzM72kg6w==", + "dependencies": { + "bit-field": "^1.8.0", + "logidrom": "^0.3.1", + "onml": "^2.1.0", + "tspan": "^0.4.0" + } + }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz", diff --git a/package.json b/package.json index 40baf12..7d383f4 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "version": "6.3.0" }, "dependencies": { - "@next-theme/plugins": "^8.16.0", + "@next-theme/plugins": "^8.17.0", "hexo": "^6.3.0", "hexo-abbrlink": "^2.2.1", "hexo-deployer-git": "^4.0.0", @@ -33,7 +33,7 @@ "hexo-server": "^3.0.0", "hexo-tag-cloud": "2.1.*", "hexo-theme-landscape": "^1.0.0", - "hexo-theme-next": "^8.16.0", + "hexo-theme-next": "^8.17.0", "hexo-word-counter": "^0.1.0" } } diff --git a/source/_posts/2023-04-18-josh-oap-part-1-1.md b/source/_posts/2023-04-18-josh-oap-part-1-1.md index 782f346..8555eae 100644 --- a/source/_posts/2023-04-18-josh-oap-part-1-1.md +++ b/source/_posts/2023-04-18-josh-oap-part-1-1.md @@ -43,15 +43,15 @@ z &= r \cos\theta # 阵列的基本模型 -  本文分析一个阵列对外部信号场的响应。阵列由一组全向阵元组成,阵元的位置为 $\vec{p}_n$,如[图 1-1-2](#fig.1-1-2) 所示。阵元在位置 $\vec{p}_n : n = 0, 1, \cdots, N — 1$ 上对信号场进行空域采样。这产生了一组信号,表示为矢量 $\vec{f}\left(t, \vec{p}\right)$ +  本文分析一个阵列对外部信号场的响应。阵列由一组全向阵元组成,阵元的位置为 $\boldsymbol{p}_n$,如[图 1-1-2](#fig.1-1-2) 所示。阵元在位置 $\boldsymbol{p}_n : n = 0, 1, \cdots, N — 1$ 上对信号场进行空域采样。这产生了一组信号,表示为矢量 $\boldsymbol{f}\left(t, \boldsymbol{p}\right)$ $$\begin{equation} -\vec{f}(t, \vec{p}) = \left[ +\boldsymbol{f}(t, \boldsymbol{p}) = \left[ \begin{array}{c} - f\left(t, \vec{p}_0\right) \\ - f\left(t, \vec{p}_1\right) \\ + f\left(t, \boldsymbol{p}_0\right) \\ + f\left(t, \boldsymbol{p}_1\right) \\ \vdots \\ - f\left(t, \vec{p}_{N-1}\right) \\ + f\left(t, \boldsymbol{p}_{N-1}\right) \\ \end{array} \right] \end{equation}$$ @@ -69,7 +69,7 @@ $$\begin{equation}   对每个阵元的输出用一个线性时不变滤波器进行处理,该滤波器的冲激响应为 $h_n(\tau)$,并对所有输出求和,得到阵列的输出 $y(t)$,如[图 1-1-3](#fig.1-1-3) 所示。假设观察间隔足够长(可以考虑为无限长),则输出 $y(t)$ 可以写成卷积积分的形式: $$\begin{equation} -y(t) = \sum_{n=0}^{N-1} \int_{-\infty}^{\infty} h_n (t-\tau)f_n\left(\tau,\vec{p}_n\right) \mathrm{d} \tau +y(t) = \sum_{n=0}^{N-1} \int_{-\infty}^{\infty} h_n (t-\tau)f_n\left(\tau,\boldsymbol{p}_n\right) \mathrm{d} \tau \end{equation}$$ @@ -81,13 +81,13 @@ y(t) = \sum_{n=0}^{N-1} \int_{-\infty}^{\infty} h_n (t-\tau)f_n\left(\tau,\vec{p $$\begin{equation} \label{VectorFormOfLinearArrayOutputInTimeDomain} -y(t) = \int_{-\infty}^{\infty} \vec{h}^\mathrm{T} (t-\tau) \vec{f}\left(\tau,\vec{p}\right) \mathrm{d} \tau +y(t) = \int_{-\infty}^{\infty} \boldsymbol{h}^\mathrm{T} (t-\tau) \boldsymbol{f}\left(\tau,\boldsymbol{p}\right) \mathrm{d} \tau \end{equation}$$ 其中 $$\begin{equation} \label{ImpulseResponse} -\vec{h}(\tau) = \left[ \begin{array}{c} +\boldsymbol{h}(\tau) = \left[ \begin{array}{c} h_0(\tau) \\ h_1(\tau) \\ \vdots \\ @@ -101,25 +101,25 @@ $$\begin{equation} \label{ImpulseResponse} $$\begin{equation} \begin{aligned} Y(\omega) &= \int_{-\infty}^{\infty} y(t) e^{-j\omega t} \mathrm{d} t \\ - &= \vec{H}^\mathrm{T}(\omega) \vec{F}(\omega) + &= \boldsymbol{H}^\mathrm{T}(\omega) \boldsymbol{F}(\omega) \end{aligned} \end{equation}$$ 其中 $$\begin{equation} -\vec{H} (\omega) = \int_{-\infty}^{\infty} \vec{h}(t) e^{-j\omega t} \mathrm{d} t +\boldsymbol{H} (\omega) = \int_{-\infty}^{\infty} \boldsymbol{h}(t) e^{-j\omega t} \mathrm{d} t \end{equation}$$ $$\begin{equation} \label{SampleVectorInFreqDomain} -\vec{F} \left(\omega,\vec{p}\right) = \int_{-\infty}^{\infty} \vec{f}\left(\tau,\vec{p}\right) e^{-j\omega t} \mathrm{d} t +\boldsymbol{F} \left(\omega,\boldsymbol{p}\right) = \int_{-\infty}^{\infty} \boldsymbol{f}\left(\tau,\boldsymbol{p}\right) e^{-j\omega t} \mathrm{d} t \end{equation}$$ -在大多数情况下,可以去掉式 $\eqref{SampleVectorInFreqDomain}$ 中左边的 $\vec{p}$,直接使用 $\vec{F}(\omega)$ 。 +在大多数情况下,可以去掉式 $\eqref{SampleVectorInFreqDomain}$ 中左边的 $\boldsymbol{p}$,直接使用 $\boldsymbol{F}(\omega)$ 。 # 信号到达不同阵元的时延 -  下面考虑如[图 1-1-4](#fig.1-1-4) 所示的简单的波束形成操作。外部信号输入为传播方向为 $\vec{a}$,时域频率(弧度)为 $\omega$ 的平面波,则在时域上每个阵元的输入信号可以用两种等效的方式进行表示。 +  下面考虑如[图 1-1-4](#fig.1-1-4) 所示的简单的波束形成操作。外部信号输入为传播方向为 $\boldsymbol{a}$,时域频率(弧度)为 $\omega$ 的平面波,则在时域上每个阵元的输入信号可以用两种等效的方式进行表示。 @@ -128,7 +128,7 @@ $$\begin{equation} \label{SampleVectorInFreqDomain}   由于信号到达不同阵元的时间不同,因此第一种方式强调信号到达不同阵元的时间延时。设 $f(t)$ 是**在坐标系原点接收到的信号**,其在变换域表示为 $F (\omega)$,则 $$\begin{equation} \label{DelayedSignal} - \vec{f}(t, \vec{p}) = \left[ + \boldsymbol{f}(t, \boldsymbol{p}) = \left[ \begin{array}{c} f\left(t - \tau_0\right) \\ f\left(t - \tau_1\right) \\ @@ -141,20 +141,20 @@ $$\begin{equation} \label{DelayedSignal} 其中时延可表示为(距离除以速度得到时间) $$\begin{equation} \label{ExpressionOfDelayByDirection} - \tau_n = \frac{\vec{a}^\mathrm{T}\vec{p}_n}{c} + \tau_n = \frac{\boldsymbol{a}^\mathrm{T}\boldsymbol{p}_n}{c} \end{equation}$$ -其中 $c$ 是信号在介质中的传播速度,$\vec{a}$ 是一个单位矢量,可以表示为 +其中 $c$ 是信号在介质中的传播速度,$\boldsymbol{a}$ 是一个单位矢量,可以表示为 $$\begin{equation} - \vec{a} = \left[ \begin{array}{c} + \boldsymbol{a} = \left[ \begin{array}{c} -\sin\theta\cos\varphi \\ -\sin\theta\sin\varphi \\ -\cos\theta \end{array} \right] \end{equation}$$ -上式中的负号是考虑了 $\vec{a}$ 的方向。则 $\tau_n$ 可以进一步表示为: +上式中的负号是考虑了 $\boldsymbol{a}$ 的方向。则 $\tau_n$ 可以进一步表示为: $$\begin{equation} \label{RelativeDelay} \tau_n = -\frac{1}{c}\left(\sin\theta\cos\varphi \cot p_{x_n} + \sin\theta\sin\varphi \cdot p_{y_n} + \cos\theta \cdot p_{z_n} \right) @@ -171,16 +171,16 @@ $$\begin{align} 则有 $$\begin{equation} - \vec{u} = -\vec{a} + \boldsymbol{u} = -\boldsymbol{a} \end{equation}$$ 则式 $\eqref{RelativeDelay}$ 可以写成 $$\begin{equation} \label{RelativeDelayWithDirectionCosine} - \tau_n = -\frac{1}{c}\left(u_x p_{x_n} + u_y p_{y_n} + u_z p_{z_n} \right) = -\frac{\vec{u}^\mathrm{T}\vec{p}_n}{c} + \tau_n = -\frac{1}{c}\left(u_x p_{x_n} + u_y p_{y_n} + u_z p_{z_n} \right) = -\frac{\boldsymbol{u}^\mathrm{T}\boldsymbol{p}_n}{c} \end{equation}$$ -根据式 $\eqref{DelayedSignal}$,$\vec{F}(\omega)$ 的第 $n$ 个分量为(利用 Fourier 变换的时移性质) +根据式 $\eqref{DelayedSignal}$,$\boldsymbol{F}(\omega)$ 的第 $n$ 个分量为(利用 Fourier 变换的时移性质) $$\begin{equation} F_n(\omega) = \int_{-\infty}^{\infty} e^{j \omega t} f(t - \tau_n) \mathrm{d} t = e^{j \omega \tau_n} F (\omega) @@ -189,38 +189,38 @@ $$\begin{equation} 其中 $$\begin{equation} - \omega \tau_n = \frac{\omega}{c} \vec{a}^\mathrm{T}\vec{p}_n = -\frac{\omega}{c} \vec{u}^\mathrm{T}\vec{p}_n + \omega \tau_n = \frac{\omega}{c} \boldsymbol{a}^\mathrm{T}\boldsymbol{p}_n = -\frac{\omega}{c} \boldsymbol{u}^\mathrm{T}\boldsymbol{p}_n \end{equation}$$ -对于在局部均匀的介质(locally homogeneous medium)里传播的平面波,定义波数 $\vec{k}$ (在波传播的方向上单位长度内的周期数目)为 +对于在局部均匀的介质(locally homogeneous medium)里传播的平面波,定义波数 $\boldsymbol{k}$ (在波传播的方向上单位长度内的周期数目)为 $$\begin{equation} \label{DefinitionOfWavenumber} - \vec{k} = \frac{\omega}{c} \vec{a} = \frac{2\pi}{\lambda} \vec{a} + \boldsymbol{k} = \frac{\omega}{c} \boldsymbol{a} = \frac{2\pi}{\lambda} \boldsymbol{a} \end{equation}$$ 其中,$\lambda$ 是对应于频率 $\omega$ 的波长。等效地, $$\begin{equation} - \vec{k} = -\frac{2\pi}{\lambda} \left[ + \boldsymbol{k} = -\frac{2\pi}{\lambda} \left[ \begin{array}{c} \sin\theta\cos\varphi \\ \sin\theta\sin\varphi \\ \cos\theta \end{array} \right] - = -\frac{2\pi}{\lambda} \vec{u} + = -\frac{2\pi}{\lambda} \boldsymbol{u} \end{equation}$$ 且波数的幅度由波动方程限定 $$\begin{equation} \label{WaveEquation} - \left| \vec{k} \right| = \frac{\omega}{c} = \frac{2\pi}{\lambda} + \left| \boldsymbol{k} \right| = \frac{\omega}{c} = \frac{2\pi}{\lambda} \end{equation}$$ -所以,仅 $\vec{k}$ 的方向是变化的。比较式 $\eqref{ExpressionOfDelayByDirection}$ 和式 $\eqref{DefinitionOfWavenumber}$,可以看到 +所以,仅 $\boldsymbol{k}$ 的方向是变化的。比较式 $\eqref{ExpressionOfDelayByDirection}$ 和式 $\eqref{DefinitionOfWavenumber}$,可以看到 $$\begin{equation} - \omega \tau_n = \vec{k}^\mathrm{T}\vec{p}_n + \omega \tau_n = \boldsymbol{k}^\mathrm{T}\boldsymbol{p}_n \end{equation}$$ 定义 @@ -228,21 +228,21 @@ $$\begin{equation} $$\begin{equation} \label{DefinitionOfArrayManifoldVector} - \vec{v}_{\vec{k}}\left(\vec{k}\right) = \left[ \begin{array}{c} - e^{-j \vec{k}^\mathrm{T}\vec{p}_0} \\ - e^{-j \vec{k}^\mathrm{T}\vec{p}_1} \\ + \boldsymbol{v}_{\boldsymbol{k}}\left(\boldsymbol{k}\right) = \left[ \begin{array}{c} + e^{-j \boldsymbol{k}^\mathrm{T}\boldsymbol{p}_0} \\ + e^{-j \boldsymbol{k}^\mathrm{T}\boldsymbol{p}_1} \\ \vdots \\ - e^{-j \vec{k}^\mathrm{T}\vec{p}_{N-1}} \\ + e^{-j \boldsymbol{k}^\mathrm{T}\boldsymbol{p}_{N-1}} \\ \end{array} \right] \end{equation}$$ -则 $\vec{F}(\omega)$ 可写为 +则 $\boldsymbol{F}(\omega)$ 可写为 $$\begin{equation} - \vec{F}(\omega) = F(\omega) \vec{v}_{\vec{k}}\left(\vec{k}\right) + \boldsymbol{F}(\omega) = F(\omega) \boldsymbol{v}_{\boldsymbol{k}}\left(\boldsymbol{k}\right) \end{equation}$$ -矢量 $\vec{v}_{\vec{k}}\left(\vec{k}\right)$ 包含了阵列的所有空间特征,称为**{% label primary @阵列流形矢量(array manifold vector) %}**。在我们的讨论中,阵列流形矢量具有非常核心的作用。下标 $\vec{k}$ 表示参数属于 $\vec{k}$ 空间。这个下标的作用是把它和以后将在阵列流形矢量中使用的其他变量相区分。 +矢量 $\boldsymbol{v}_{\boldsymbol{k}}\left(\boldsymbol{k}\right)$ 包含了阵列的所有空间特征,称为**{% label primary @阵列流形矢量(array manifold vector) %}**。在我们的讨论中,阵列流形矢量具有非常核心的作用。下标 $\boldsymbol{k}$ 表示参数属于 $\boldsymbol{k}$ 空间。这个下标的作用是把它和以后将在阵列流形矢量中使用的其他变量相区分。   在这种情况下,把每个阵元的输入信号平移,使之在时间上对齐,然后把它们相加。这个操作过程如[图 1-1-5](#fig.1-1-5) 所示,其中包含了归一化因子 $1/N$,使得输出为 $f(t)$。在这里, @@ -262,75 +262,75 @@ $$\begin{equation}   这个处理器称为**{% label primary @延时求和波束形成器(delay-and-sum beamformer) %}**或**{% label primary @常规波束形成器(conventional beamformer) %}**。在实际中会在每个通道中加上一个共同的延时,使得[图 1-1-5](#fig.1-1-5) 中的操作是物理可实现的。 -  此外,还可以把式 $\eqref{DelayAndSumBeamformer}$ 在频域内写成简洁的矩阵形式。如果 $\vec{k}_\mathrm{s}$ 是我们所感兴趣的平面波信号的波数,则 +  此外,还可以把式 $\eqref{DelayAndSumBeamformer}$ 在频域内写成简洁的矩阵形式。如果 $\boldsymbol{k}_\mathrm{s}$ 是我们所感兴趣的平面波信号的波数,则 $$\begin{equation} - \vec{H}^\mathrm{T} (\omega) = \frac{1}{N} \vec{v}_{\vec{k}}^\mathrm{H} \left( \vec{k}_\mathrm{s} \right) + \boldsymbol{H}^\mathrm{T} (\omega) = \frac{1}{N} \boldsymbol{v}_{\boldsymbol{k}}^\mathrm{H} \left( \boldsymbol{k}_\mathrm{s} \right) \end{equation}$$ -其中 $\vec{v}_{\vec{k}}\left(\vec{k}\right)$ 在式 $\eqref{DefinitionOfArrayManifoldVector}$ 中定义。 +其中 $\boldsymbol{v}_{\boldsymbol{k}}\left(\boldsymbol{k}\right)$ 在式 $\eqref{DefinitionOfArrayManifoldVector}$ 中定义。 # 单位平面波模型 -  现在回到一般的问题,我们想要确定阵列对一个输入场 $\vec{f}(t, \vec{p})$ 的响应,这可以通过之前给出的卷积求和操作来实现,但更有用的方法是首先确定阵列对单位平面波(unit plane wave)的响应,响应为单位平面波时域(弧度)频率 $\omega$ 和波数 $\vec{k}$ 的函数。(利用叠加的复指数基函数对一个线性时不变系统进行分析的系统理论方法可以扩展到空时信号的情况。) +  现在回到一般的问题,我们想要确定阵列对一个输入场 $\boldsymbol{f}(t, \boldsymbol{p})$ 的响应,这可以通过之前给出的卷积求和操作来实现,但更有用的方法是首先确定阵列对单位平面波(unit plane wave)的响应,响应为单位平面波时域(弧度)频率 $\omega$ 和波数 $\boldsymbol{k}$ 的函数。(利用叠加的复指数基函数对一个线性时不变系统进行分析的系统理论方法可以扩展到空时信号的情况。) 这里的基函数形式为 $$\begin{equation} - f_n\left( t, \vec{p}_n \right) = \exp \left[ j \left( \omega t - \vec{k}^\mathrm{T} \vec{p}_n\right) \right], \, n = 0, 1, \cdots, N-1 + f_n\left( t, \boldsymbol{p}_n \right) = \exp \left[ j \left( \omega t - \boldsymbol{k}^\mathrm{T} \boldsymbol{p}_n\right) \right], \, n = 0, 1, \cdots, N-1 \end{equation}$$ 或 $$\begin{equation} - \vec{f} \left( t, \vec{p} \right) = e^{j\omega t} \vec{v}_{\vec{k}}\left(\vec{k}\right) + \boldsymbol{f} \left( t, \boldsymbol{p} \right) = e^{j\omega t} \boldsymbol{v}_{\boldsymbol{k}}\left(\boldsymbol{k}\right) \end{equation}$$ -其中 $\vec{v}_{\vec{k}}\left(\vec{k}\right)$ 在式 $\eqref{DefinitionOfArrayManifoldVector}$ 中定义。 +其中 $\boldsymbol{v}_{\boldsymbol{k}}\left(\boldsymbol{k}\right)$ 在式 $\eqref{DefinitionOfArrayManifoldVector}$ 中定义。   式 $\eqref{VectorFormOfLinearArrayOutputInTimeDomain}$ 中的阵列处理器对于一个平面波的响应为 $$\begin{equation} \label{ArrayResponseToUnitPlaneWaveInTimeDomain} - y \left( t, \vec{k} \right) = \vec{H}^\mathrm{T} (\omega) \vec{v}_{\vec{k}}\left(\vec{k}\right) e^{j\omega t} + y \left( t, \boldsymbol{k} \right) = \boldsymbol{H}^\mathrm{T} (\omega) \boldsymbol{v}_{\boldsymbol{k}}\left(\boldsymbol{k}\right) e^{j\omega t} \end{equation}$$ -其中 $\vec{H} (\omega)$ 是式 $\eqref{ImpulseResponse}$ 中 $\vec{h}(\tau)$ 的傅里叶变换。 +其中 $\boldsymbol{H} (\omega)$ 是式 $\eqref{ImpulseResponse}$ 中 $\boldsymbol{h}(\tau)$ 的傅里叶变换。 -  这里用了符号 $y \left( t, \vec{k} \right)$,以强调输出和输入波数 $\vec{k}$ 的关系。时域上的相关性体现在输出是一个复指数,和输入平面波具有相同的频率。在频域内,$\eqref{ArrayResponseToUnitPlaneWaveInTimeDomain}$ 可以写成下面的形式: +  这里用了符号 $y \left( t, \boldsymbol{k} \right)$,以强调输出和输入波数 $\boldsymbol{k}$ 的关系。时域上的相关性体现在输出是一个复指数,和输入平面波具有相同的频率。在频域内,$\eqref{ArrayResponseToUnitPlaneWaveInTimeDomain}$ 可以写成下面的形式: $$\begin{equation} \label{ArrayResponseToUnitPlaneWaveInFreqDomain} - Y \left( \omega, \vec{k} \right) = \vec{H}^\mathrm{T} (\omega) \vec{v}_{\vec{k}}\left(\vec{k}\right) + Y \left( \omega, \boldsymbol{k} \right) = \boldsymbol{H}^\mathrm{T} (\omega) \boldsymbol{v}_{\boldsymbol{k}}\left(\boldsymbol{k}\right) \end{equation}$$   注意,$\omega$ 是对应输入频率的单一频率。阵列的空时处理完全可以由式 $\eqref{ArrayResponseToUnitPlaneWaveInFreqDomain}$ 的右端描述。把这一项定义为 $$\begin{equation} \label{FrequencyWavenumberResponse} - \boxed{\vec{\varUpsilon} \left( \omega, \vec{k} \right) \triangleq \vec{H}^\mathrm{T} (\omega) \vec{v}_{\vec{k}}\left(\vec{k}\right)} + \boxed{\boldsymbol{\varUpsilon} \left( \omega, \boldsymbol{k} \right) \triangleq \boldsymbol{H}^\mathrm{T} (\omega) \boldsymbol{v}_{\boldsymbol{k}}\left(\boldsymbol{k}\right)} \end{equation}$$ -称之为阵列的**{% label primary @频率-波数响应函数(frequency-wavenumber response function) %}**。它描述了一个阵列对于波数为 $\vec{k}$、时域频率为 $\omega$ 的输入平面波的复增益,具有与线性、时不变系统的传递函数相同的解释(这里我们用了 $\vec{\varUpsilon} \left( \omega, \vec{k} \right)$, 是因为 $Y \left( \omega, \vec{k} \right)$ 在后面将要用于描述对任意输入的输出)。 $\vec{\varUpsilon} \left( \omega, \vec{k} \right)$ 是定义在整个 $\vec{k}$ 空间上的。$\eqref{FrequencyWavenumberResponse}$ 中的第二项 $\vec{v}_{\vec{k}}\left(\vec{k}\right)$ 是在式 $\eqref{DefinitionOfArrayManifoldVector}$ 中定义的阵列流形矢量。 +称之为阵列的**{% label primary @频率-波数响应函数(frequency-wavenumber response function) %}**。它描述了一个阵列对于波数为 $\boldsymbol{k}$、时域频率为 $\omega$ 的输入平面波的复增益,具有与线性、时不变系统的传递函数相同的解释(这里我们用了 $\boldsymbol{\varUpsilon} \left( \omega, \boldsymbol{k} \right)$, 是因为 $Y \left( \omega, \boldsymbol{k} \right)$ 在后面将要用于描述对任意输入的输出)。 $\boldsymbol{\varUpsilon} \left( \omega, \boldsymbol{k} \right)$ 是定义在整个 $\boldsymbol{k}$ 空间上的。$\eqref{FrequencyWavenumberResponse}$ 中的第二项 $\boldsymbol{v}_{\boldsymbol{k}}\left(\boldsymbol{k}\right)$ 是在式 $\eqref{DefinitionOfArrayManifoldVector}$ 中定义的阵列流形矢量。 -  频率-波数响应函数描述了阵列对任意一个平面波的响应。在大多数的实际物理应用中,时域频率 $\omega$ 和空域波数 $\vec{k}$ 通过平面波传播的波动方程形成了耦合关系。有时这是一个非常简单的关系,例如当一个平而波在均匀(且无限)的空间中传播时。在其他的情况下,可能是非常复杂的耦合关系,例如在水下声学和地震学中的分层介质模型中的情况。 +  频率-波数响应函数描述了阵列对任意一个平面波的响应。在大多数的实际物理应用中,时域频率 $\omega$ 和空域波数 $\boldsymbol{k}$ 通过平面波传播的波动方程形成了耦合关系。有时这是一个非常简单的关系,例如当一个平而波在均匀(且无限)的空间中传播时。在其他的情况下,可能是非常复杂的耦合关系,例如在水下声学和地震学中的分层介质模型中的情况。 -  一个阵列的**{% label primary @波束方向图(beam pattern) %}**定义的背景是平面波在局部均匀的介质中传播,约束的波动方程见式 $\eqref{WaveEquation}$。如式 $\eqref{WaveEquation}$ 所示,这约束了波数 $\vec{k}$ 的幅度。波束方向图是用入射方向表示的频率-波数响应函数,或者可以写成 +  一个阵列的**{% label primary @波束方向图(beam pattern) %}**定义的背景是平面波在局部均匀的介质中传播,约束的波动方程见式 $\eqref{WaveEquation}$。如式 $\eqref{WaveEquation}$ 所示,这约束了波数 $\boldsymbol{k}$ 的幅度。波束方向图是用入射方向表示的频率-波数响应函数,或者可以写成 $$\begin{equation} - B(\omega:\theta,\varphi) = \left. \vec{\varUpsilon} \left( \omega, \vec{k} \right) \right|_{\vec{k}=\frac{2\pi}{\lambda}\vec{a}(\theta,\varphi)} + B(\omega:\theta,\varphi) = \left. \boldsymbol{\varUpsilon} \left( \omega, \boldsymbol{k} \right) \right|_{\boldsymbol{k}=\frac{2\pi}{\lambda}\boldsymbol{a}(\theta,\varphi)} \end{equation}$$ -其中 $\vec{a}(\theta,\varphi)$ 是一个单位矢量,在球坐标系中对应的角度为 $\theta$ 和 $\varphi$。可以看到,**波束方向图是频率-波数响应在一个半径为 $2\pi /\lambda$ 的球上的值**。 +其中 $\boldsymbol{a}(\theta,\varphi)$ 是一个单位矢量,在球坐标系中对应的角度为 $\theta$ 和 $\varphi$。可以看到,**波束方向图是频率-波数响应在一个半径为 $2\pi /\lambda$ 的球上的值**。   阵列的波束方向图是确定阵列性能的关键要素。后续将会研究均匀加权线阵(uniformly weighted linear array)的波束方向图。 # 窄带假设 -  在这里中,我们强调 $f\left( t,\vec{p}_n \right)$ 是带通信号的情况,即 +  在这里中,我们强调 $f\left( t,\boldsymbol{p}_n \right)$ 是带通信号的情况,即 $$\begin{equation} \label{BandpassConstraint} - f\left( t,\vec{p}_n \right) = \sqrt{2} \Re\left\{ \tilde{f} \left( t,\vec{p}_n \right) e^{j \omega_c t}\right\}, \, n = 0, \cdots, N-1 + f\left( t,\boldsymbol{p}_n \right) = \sqrt{2} \Re\left\{ \tilde{f} \left( t,\boldsymbol{p}_n \right) e^{j \omega_c t}\right\}, \, n = 0, \cdots, N-1 \end{equation}$$ -其中,$\omega_c$ 是载波频率,$\tilde{f} \left( t,\vec{p}_n \right)$ 是复包络。假设复包络的带限区域为 +其中,$\omega_c$ 是载波频率,$\tilde{f} \left( t,\boldsymbol{p}_n \right)$ 是复包络。假设复包络的带限区域为 $$\begin{equation} \left| \omega_L \right| \leqslant 2\pi B_s /2 @@ -347,15 +347,15 @@ $$\begin{equation}   对于式 $\eqref{DelayedSignal}$ 中的平面波,式 $\eqref{BandpassConstraint}$ 成为 $$\begin{equation} \label{BandpassConstraintApproximation} - f\left( t,\vec{p}_n \right) = \sqrt{2} \Re\left\{ \tilde{f} \left( t - \tau_n \right) e^{j \omega_c \left( t - \tau_n \right)}\right\}, \, n = 0, \cdots, N-1 + f\left( t,\boldsymbol{p}_n \right) = \sqrt{2} \Re\left\{ \tilde{f} \left( t - \tau_n \right) e^{j \omega_c \left( t - \tau_n \right)}\right\}, \, n = 0, \cdots, N-1 \end{equation}$$ 其中,$\tau_n$ 由式 $\eqref{RelativeDelayWithDirectionCosine}$ 给出。 -  现在考虑信号跨越阵列传播的时间(the travel time across the array)。定义 $\Delta T_{nm} \left( \vec{u} \right)$ 为一个方向余弦为 $\vec{u}$ 的平面波在第 $n$ 个阵元和第 $m$ 个阵元之间的传播时间。则, +  现在考虑信号跨越阵列传播的时间(the travel time across the array)。定义 $\Delta T_{nm} \left( \boldsymbol{u} \right)$ 为一个方向余弦为 $\boldsymbol{u}$ 的平面波在第 $n$ 个阵元和第 $m$ 个阵元之间的传播时间。则, $$\begin{equation} - \Delta T_{\max} \triangleq \max_{n,m=0,\cdots,N-1;\vec{u}} \{\Delta T_{nm} \left( \vec{u} \right)\} + \Delta T_{\max} \triangleq \max_{n,m=0,\cdots,N-1;\boldsymbol{u}} \{\Delta T_{nm} \left( \boldsymbol{u} \right)\} \end{equation}$$ 是阵列的任意两个阵元之间的最大传播时间。对于一个线阵,这个最大值是当一个信号沿着阵列的轴线传播时(endfire),阵列两端阵元之间的传播时间。 @@ -363,7 +363,7 @@ $$\begin{equation}   假设原点位于阵列的重心,即 $$\begin{equation} - \sum_{n=0}^{N-1} \vec{p}_n = 0 + \sum_{n=0}^{N-1} \boldsymbol{p}_n = 0 \end{equation}$$ 则式 $\eqref{RelativeDelayWithDirectionCosine}$ 给出的所有 $\tau_n$ 均满足 @@ -387,7 +387,7 @@ $$\begin{equation} \label{NarrowBandConstraint} 定义复包络满足式 $\eqref{NarrowBandConstraint}$ 的带通信号为**{% label primary @窄带信号 %}**。后面我们会在有关最优处理器的内容中重新研究这个定义,并给出一个更好的量化的讨论。现在,直接采用式 $\eqref{NarrowBandConstraint}$ 。则式 $\eqref{BandpassConstraintApproximation}$ 简化为 $$\begin{equation} - f\left( t,\vec{p}_n \right) = \sqrt{2} \Re\left\{ \tilde{f} \left( t \right) e^{-j \omega_c \tau_n} e^{j \omega_c t } \right\} + f\left( t,\boldsymbol{p}_n \right) = \sqrt{2} \Re\left\{ \tilde{f} \left( t \right) e^{-j \omega_c \tau_n} e^{j \omega_c t } \right\} \end{equation}$$ 可以看到,在窄带的情况下,信号的延时可以用一个相移来近似。所以延时-求和波束形成器可以用一组移相器来代替延时线。结果得到的波束形成器在[图 1-1-6](#fig.1-1-6) 中给出。这种实现方式通常称为**{% label primary @相控阵 %}**,并在实际中得到了广泛的应用。 @@ -409,7 +409,7 @@ $$\begin{equation} $$\begin{equation} \label{ComplexWeightVector} - \vec{w}^\mathrm{H} = [w_0^\ast, w_1^\ast, \cdots, w_{N-1}^\ast] + \boldsymbol{w}^\mathrm{H} = [w_0^\ast, w_1^\ast, \cdots, w_{N-1}^\ast] \end{equation}$$ 则式 $\eqref{ArrayResponseToUnitPlaneWaveInTimeDomain}$ 成为 @@ -417,13 +417,13 @@ $$\begin{equation} \label{ComplexWeightVector} $$\begin{equation} - y\left( t,\vec{k} \right) = \vec{w}^\mathrm{H} \vec{v}_{\vec{k}}\left( \vec{k} \right) e^{j\omega t} + y\left( t,\boldsymbol{k} \right) = \boldsymbol{w}^\mathrm{H} \boldsymbol{v}_{\boldsymbol{k}}\left( \boldsymbol{k} \right) e^{j\omega t} \end{equation}$$ 且 $$\begin{equation} - \varUpsilon \left(\omega, \vec{k} \right) = \vec{w}^\mathrm{H} \vec{v}_{\vec{k}}\left( \vec{k} \right) + \varUpsilon \left(\omega, \boldsymbol{k} \right) = \boldsymbol{w}^\mathrm{H} \boldsymbol{v}_{\boldsymbol{k}}\left( \boldsymbol{k} \right) \end{equation}$$ 式 $\eqref{ComplexWeightVector}$ 中的定义等价于 @@ -431,7 +431,7 @@ $$\begin{equation} $$\begin{equation} - \vec{w}^\mathrm{H} = \vec{H}^\mathrm{T}(\omega_c) + \boldsymbol{w}^\mathrm{H} = \boldsymbol{H}^\mathrm{T}(\omega_c) \end{equation}$$ 这里主要关注的是窄带模型,对于宽带信号,一种处理方法是利用离散傅里叶变换(DFT)把信号分解到更窄的频率柜 (frequency bin),每个频率柜内的信号是满足窄带条件的,因此所有的窄带结果可以直接得到应用。 diff --git a/source/_posts/2023-04-20-josh-oap-part-1-2.md b/source/_posts/2023-04-20-josh-oap-part-1-2.md index 6256b97..cc4aaac 100644 --- a/source/_posts/2023-04-20-josh-oap-part-1-2.md +++ b/source/_posts/2023-04-20-josh-oap-part-1-2.md @@ -43,10 +43,10 @@ $$\begin{equation} \label{ElementLocation} , \, n = 0,1,\cdots,N-1 \end{equation}$$ -为了确定阵列流形矢量 $\vec{v}_{\vec{k}}\left(\vec{k}\right)$,把式 $\eqref{ElementLocation}$ 代入到[阵列流形矢量的定义][]中,得到 +为了确定阵列流形矢量 $\boldsymbol{v}_{\boldsymbol{k}}\left(\boldsymbol{k}\right)$,把式 $\eqref{ElementLocation}$ 代入到[阵列流形矢量的定义][]中,得到 $$\begin{equation} \label{ManifoldVectorOfULA} - \vec{v}_{\vec{k}}\left(k_z\right) = \left[\begin{array}{c} + \boldsymbol{v}_{\boldsymbol{k}}\left(k_z\right) = \left[\begin{array}{c} e^{j \left( \frac{N-1}{2} \right) k_z d} \\ e^{j \left( \frac{N-1}{2} - 1\right) k_z d} \\ \vdots \\ @@ -63,14 +63,14 @@ $$\begin{equation} 其中波数的幅度 $$\begin{equation} - k_0 \triangleq \left| \vec{k} \right| = \frac{2\pi}{\lambda} + k_0 \triangleq \left| \boldsymbol{k} \right| = \frac{2\pi}{\lambda} \end{equation}$$ 注意,线阵在 $\varphi$ 方向是没有分辨能力的。将[复权矢量][]和式 $\eqref{ManifoldVectorOfULA}$ 代入[用复权矢量表示的波数-频率响应函数][],得到 ULA 在角度域的频率-波数响应函数 $$\begin{equation} \label{FWRFOfULAInAngleDomain} \begin{aligned} - \vec{\varUpsilon}(\omega,k_z) &= \vec{w}^\mathrm{H}\vec{v}_{\vec{k}}\left(k_z\right) \\ + \boldsymbol{\varUpsilon}(\omega,k_z) &= \boldsymbol{w}^\mathrm{H}\boldsymbol{v}_{\boldsymbol{k}}\left(k_z\right) \\ &= \sum_{n=0}^{N-1} w_n^\ast e^{-j\left( n - \frac{N-1}{2} \right) k_z d} \end{aligned} \end{equation}$$ @@ -90,10 +90,10 @@ $$\begin{equation} 将式 $\eqref{DefinitionOfWavenumberDiffOfTwoElements}$ 代入式 $\eqref{FWRFOfULAInAngleDomain}$,得到**在 $\psi$ 空间的频率-波数函数(frequency-wavenumber function in $\psi$-space)** $$\begin{equation} \label{FWRFOfULAInWavenumberDomain} - \vec{\varUpsilon}_\psi(\psi) = e^{-j \frac{N-1}{2} \psi } \sum_{n=0}^{N-1} w_n^\ast e^{j n\psi} + \boldsymbol{\varUpsilon}_\psi(\psi) = e^{-j \frac{N-1}{2} \psi } \sum_{n=0}^{N-1} w_n^\ast e^{j n\psi} \end{equation}$$ -$\vec{\varUpsilon}(\omega,k_z)$ 和 $\vec{\varUpsilon}_\psi(\psi)$ 的定义域均为 $-\infty$ 到 $\infty$,但仅在区域 $0 \leqslant \theta \leqslant \pi$(或 $-1 \leqslant u_z \leqslant 1$ ) 内代表传播的信号,即有 $-\displaystyle\frac{2\pi d}{\lambda} \leqslant \psi \leqslant \frac{2\pi d}{\lambda}$,这个区域称为**{% label primary @可视区域(visible region) %}**。 +$\boldsymbol{\varUpsilon}(\omega,k_z)$ 和 $\boldsymbol{\varUpsilon}_\psi(\psi)$ 的定义域均为 $-\infty$ 到 $\infty$,但仅在区域 $0 \leqslant \theta \leqslant \pi$(或 $-1 \leqslant u_z \leqslant 1$ ) 内代表传播的信号,即有 $-\displaystyle\frac{2\pi d}{\lambda} \leqslant \psi \leqslant \frac{2\pi d}{\lambda}$,这个区域称为**{% label primary @可视区域(visible region) %}**。   可以观察到,若定义 @@ -102,13 +102,13 @@ $$\begin{equation} \end{equation}$$ $$\begin{equation} \label{FWRFOfULAInZDomain} - \vec{\varUpsilon}_z(z) = z^{- \frac{N-1}{2}} \sum_{n=0}^{N-1} w_n^\ast z^{n} + \boldsymbol{\varUpsilon}_z(z) = z^{- \frac{N-1}{2}} \sum_{n=0}^{N-1} w_n^\ast z^{n} \end{equation}$$ 则式 $\eqref{FWRFOfULAInZDomain}$ 可以写成 $$\begin{equation} - \vec{\varUpsilon}_z(z) = z^{- \frac{N-1}{2}} \left(\sum_{n=0}^{N-1} w_n z^{-n}\right)^\ast + \boldsymbol{\varUpsilon}_z(z) = z^{- \frac{N-1}{2}} \left(\sum_{n=0}^{N-1} w_n z^{-n}\right)^\ast \end{equation}$$ 其中 @@ -120,7 +120,7 @@ $$\begin{equation} 和 $z$ 变换的形式相似,且 $$\begin{equation} \label{FWRFOfULAInZDomainToWavenumberDomain} - \vec{\varUpsilon}_\psi(\psi) = \left. \vec{\varUpsilon}_z(z) \right|_{z=e^{j\psi}} = \left.\left(z^{- \frac{N-1}{2}} W^\ast(z)\right)\right|_{z=e^{j\psi}} + \boldsymbol{\varUpsilon}_\psi(\psi) = \left. \boldsymbol{\varUpsilon}_z(z) \right|_{z=e^{j\psi}} = \left.\left(z^{- \frac{N-1}{2}} W^\ast(z)\right)\right|_{z=e^{j\psi}} \end{equation}$$ 是在 $\psi$ 空间的频率-波数响应。我们在后面将利用这个关系。 @@ -130,27 +130,27 @@ $$\begin{equation} \label{FWRFOfULAInZDomainToWavenumberDomain}   在 $\theta$ 和 $u$ 空间定义出阵列流形也是有用的 $$\begin{equation} - \left[ \vec{v}_\theta(\theta) \right] = e^{j\left( n - \frac{N-1}{2} \right) \frac{2\pi d}{\lambda} \cos \theta}, \, n = 0,\cdots, N-1 + \left[ \boldsymbol{v}_\theta(\theta) \right] = e^{j\left( n - \frac{N-1}{2} \right) \frac{2\pi d}{\lambda} \cos \theta}, \, n = 0,\cdots, N-1 \end{equation}$$ $$\begin{equation} - \left[ \vec{v}_u(u) \right] = e^{j\left( n - \frac{N-1}{2} \right) \frac{2\pi d}{\lambda} u}, \, n = 0,\cdots, N-1 + \left[ \boldsymbol{v}_u(u) \right] = e^{j\left( n - \frac{N-1}{2} \right) \frac{2\pi d}{\lambda} u}, \, n = 0,\cdots, N-1 \end{equation}$$ 也可以用三种形式写出波束方向图。频率-波数函数和波束方向图的关键区别是波束方向图的参量受限于实际的物理角度 $\theta$,所以, $$\begin{equation} - B_\theta(\theta) = \vec{w}^\mathrm{H} \vec{v}_\theta(\theta) = e^{-j\left(\frac{N-1}{2} \right) \frac{2\pi d}{\lambda} \cos \theta} \sum_{n=0}^{N-1} w_n^\ast e^{j n \frac{2\pi d}{\lambda} \cos \theta}, \, 0 \leqslant \theta \leqslant \pi + B_\theta(\theta) = \boldsymbol{w}^\mathrm{H} \boldsymbol{v}_\theta(\theta) = e^{-j\left(\frac{N-1}{2} \right) \frac{2\pi d}{\lambda} \cos \theta} \sum_{n=0}^{N-1} w_n^\ast e^{j n \frac{2\pi d}{\lambda} \cos \theta}, \, 0 \leqslant \theta \leqslant \pi \end{equation}$$ $$\begin{equation} - B_u(u) = \vec{w}^\mathrm{H} \vec{v}_u(u) = e^{-j\left(\frac{N-1}{2} \right) \frac{2\pi d}{\lambda} u} \sum_{n=0}^{N-1} w_n^\ast e^{j n \frac{2\pi d}{\lambda} u}, \, -1 \leqslant u \leqslant 1 + B_u(u) = \boldsymbol{w}^\mathrm{H} \boldsymbol{v}_u(u) = e^{-j\left(\frac{N-1}{2} \right) \frac{2\pi d}{\lambda} u} \sum_{n=0}^{N-1} w_n^\ast e^{j n \frac{2\pi d}{\lambda} u}, \, -1 \leqslant u \leqslant 1 \end{equation}$$ $$\begin{equation} \label{BeamPatternInWavenumberDomain} - B_\psi(\psi) = \vec{w}^\mathrm{H} \vec{v}_\psi(\psi) = e^{-j\left(\frac{N-1}{2} \right) \psi} \sum_{n=0}^{N-1} w_n^\ast e^{j n \psi}, \, -\frac{2\pi d}{\lambda} \leqslant \psi \leqslant \frac{2\pi d}{\lambda} + B_\psi(\psi) = \boldsymbol{w}^\mathrm{H} \boldsymbol{v}_\psi(\psi) = e^{-j\left(\frac{N-1}{2} \right) \psi} \sum_{n=0}^{N-1} w_n^\ast e^{j n \psi}, \, -\frac{2\pi d}{\lambda} \leqslant \psi \leqslant \frac{2\pi d}{\lambda} \end{equation}$$ 当函数的变量很清楚时,我们将省略掉 $B(\,\cdot\,)$ 中的下标。 @@ -160,11 +160,11 @@ $$\begin{equation} \label{BeamPatternInWavenumberDomain}   对于均匀线阵,通常用 $\psi$ 表示阵列流形 $$\begin{equation} - \left[ \vec{v}_\psi(\psi) \right]_n = e^{j\left( n - \frac{N-1}{2} \right)\psi}, \, n = 0, 1, \cdots, N-1 + \left[ \boldsymbol{v}_\psi(\psi) \right]_n = e^{j\left( n - \frac{N-1}{2} \right)\psi}, \, n = 0, 1, \cdots, N-1 \end{equation}$$ $$\begin{equation} \label{ManifoldVecOfULAWithConjugateSymmetry} - \boxed{\vec{v}_\psi(\psi) = \left[ \begin{array}{c} + \boxed{\boldsymbol{v}_\psi(\psi) = \left[ \begin{array}{c} e^{-j\left(\frac{N-1}{2} \right)\psi} & e^{-j\left(\frac{N-3}{2} \right)\psi} & \cdots & @@ -178,12 +178,12 @@ $$\begin{equation} \label{ManifoldVecOfULAWithConjugateSymmetry} {% tabs 阵列流形矢量具有共扼对称性 %} -当 $N$ 为偶数时,如果定义一个 $N/2$ 维的矢量 $\vec{v}_{\psi_1}(\psi)$,对应 $\vec{v}_\psi(\psi)$ 的前 $N/2$ 个元素,则有 +当 $N$ 为偶数时,如果定义一个 $N/2$ 维的矢量 $\boldsymbol{v}_{\psi_1}(\psi)$,对应 $\boldsymbol{v}_\psi(\psi)$ 的前 $N/2$ 个元素,则有 $$\begin{equation} - \vec{v}_\psi(\psi) = \left[ \begin{array}{c} - \vec{v}_{\psi_1}(\psi) \\ - \vec{J}\vec{v}_{\psi_1}^\ast(\psi) + \boldsymbol{v}_\psi(\psi) = \left[ \begin{array}{c} + \boldsymbol{v}_{\psi_1}(\psi) \\ + \boldsymbol{J}\boldsymbol{v}_{\psi_1}^\ast(\psi) \end{array} \right] \end{equation}$$ @@ -191,13 +191,13 @@ $$\begin{equation} -当 $N$ 为奇数时,如果定义一个 $(N-1)/2$ 维的矢量 $\vec{v}_{\psi_1}(\psi)$,对应 $\vec{v}_\psi(\psi)$ 的前 $(N-1)/2$ 个元素,则有 +当 $N$ 为奇数时,如果定义一个 $(N-1)/2$ 维的矢量 $\boldsymbol{v}_{\psi_1}(\psi)$,对应 $\boldsymbol{v}_\psi(\psi)$ 的前 $(N-1)/2$ 个元素,则有 $$\begin{equation} - \vec{v}_\psi(\psi) = \left[ \begin{array}{c} - \vec{v}_{\psi_1}(\psi) \\ + \boldsymbol{v}_\psi(\psi) = \left[ \begin{array}{c} + \boldsymbol{v}_{\psi_1}(\psi) \\ 1 \\ - \vec{J}\vec{v}_{\psi_1}^\ast(\psi) + \boldsymbol{J}\boldsymbol{v}_{\psi_1}^\ast(\psi) \end{array} \right] \end{equation}$$ @@ -205,10 +205,10 @@ $$\begin{equation} {% endtabs %} -其中交换矩阵(exchange matrix) $\vec{J}$ +其中交换矩阵(exchange matrix) $\boldsymbol{J}$ $$\begin{equation} - \vec{J} = \left[ \begin{array}{c} + \boldsymbol{J} = \left[ \begin{array}{c} 0 & 0 & \cdots & 1 \\ \vdots & \vdots & & \vdots \\ 0 & 1 & \cdots & 0 \\ @@ -216,12 +216,12 @@ $$\begin{equation} \end{array} \right] \end{equation}$$ -在很多应用中,这种共轭对称性可以用于节省运算量和改进性能。例如,如果 $\vec{w}$ 也是共枙对称的,则当 $N$ 为偶数时,可以写成 +在很多应用中,这种共轭对称性可以用于节省运算量和改进性能。例如,如果 $\boldsymbol{w}$ 也是共枙对称的,则当 $N$ 为偶数时,可以写成 $$\begin{equation} \label{ConjugateSymmetry} - \vec{w} = \left[ \begin{array}{c} - \vec{w}_1 \\ - \vec{J}\vec{w}_1 + \boldsymbol{w} = \left[ \begin{array}{c} + \boldsymbol{w}_1 \\ + \boldsymbol{J}\boldsymbol{w}_1 \end{array} \right] \end{equation}$$ @@ -229,19 +229,19 @@ $$\begin{equation} \label{ConjugateSymmetry} $$\begin{equation} \begin{aligned} - B_\psi(\psi) &= \vec{w}^\mathrm{H}\vec{v}_\psi(\psi) \\ - &= \left[\begin{array}{c}\vec{w_1}^\mathrm{H} & \vec{w_1}^\mathrm{T}\vec{J}\end{array}\right] \left[\begin{array}{c}\vec{v}_{\psi_1}(\psi) \\ \vec{J}\vec{v}_{\psi_1}^\ast(\psi)\end{array}\right] \\ - &= \vec{w}_1^\mathrm{H} \vec{v}_{\psi_1}(\psi) + \vec{w_1}^\mathrm{T}\vec{v}_{\psi_1}^\ast(\psi) \\ - &= 2 \Re\left[ \vec{w}_1^\mathrm{H} \vec{v}_{\psi_1}(\psi) \right] + B_\psi(\psi) &= \boldsymbol{w}^\mathrm{H}\boldsymbol{v}_\psi(\psi) \\ + &= \left[\begin{array}{c}\boldsymbol{w_1}^\mathrm{H} & \boldsymbol{w_1}^\mathrm{T}\boldsymbol{J}\end{array}\right] \left[\begin{array}{c}\boldsymbol{v}_{\psi_1}(\psi) \\ \boldsymbol{J}\boldsymbol{v}_{\psi_1}^\ast(\psi)\end{array}\right] \\ + &= \boldsymbol{w}_1^\mathrm{H} \boldsymbol{v}_{\psi_1}(\psi) + \boldsymbol{w_1}^\mathrm{T}\boldsymbol{v}_{\psi_1}^\ast(\psi) \\ + &= 2 \Re\left[ \boldsymbol{w}_1^\mathrm{H} \boldsymbol{v}_{\psi_1}(\psi) \right] \end{aligned} \end{equation}$$ 所以波束方向图是一个实函数。注意到,实对称的权矢量同样能够满足式 $\eqref{ConjugateSymmetry}$;当 $N$ 为奇数时,也有类似的结果。我们将发现很多其他的阵列结构也具有共枙对称性质。 -  式 $\eqref{ManifoldVecOfULAWithConjugateSymmetry}$ 强调了 $\vec{v}_\psi(\psi)$ 的共枙对称性质。也可以把 $\vec{v}_\psi(\psi)$ 写成 +  式 $\eqref{ManifoldVecOfULAWithConjugateSymmetry}$ 强调了 $\boldsymbol{v}_\psi(\psi)$ 的共枙对称性质。也可以把 $\boldsymbol{v}_\psi(\psi)$ 写成 $$\begin{equation} - \vec{v}_\psi(\psi) = e^{-j\left(\frac{N-1}{2} \right)\psi} \left[ \begin{array}{c} + \boldsymbol{v}_\psi(\psi) = e^{-j\left(\frac{N-1}{2} \right)\psi} \left[ \begin{array}{c} 1 & e^{j\psi} & \cdots & @@ -249,52 +249,52 @@ $$\begin{equation} \end{array} \right]^\mathrm{T} \end{equation}$$ -这个形式强调了 $\vec{v}_\psi(\psi)$ 的 Vandermonde 结构。 +这个形式强调了 $\boldsymbol{v}_\psi(\psi)$ 的 Vandermonde 结构。 # 从波束方向图获得权矢量 -  下面讨论如何从特定的方向图 $B_\psi(\psi)$ 中获得权矢量 $\vec{w}$,我们从式 $\eqref{BeamPatternInWavenumberDomain}$ 中的关系开始 +  下面讨论如何从特定的方向图 $B_\psi(\psi)$ 中获得权矢量 $\boldsymbol{w}$,我们从式 $\eqref{BeamPatternInWavenumberDomain}$ 中的关系开始 $$\begin{equation} \label{ShortBeamPatternInWavenumberDomain} - B_\psi(\psi) = \vec{w}^\mathrm{H} \vec{v}_\psi(\psi) + B_\psi(\psi) = \boldsymbol{w}^\mathrm{H} \boldsymbol{v}_\psi(\psi) \end{equation}$$ -假设 $B_\psi(\psi)$ 是已知的,我们想确定产生这个 $B_\psi(\psi)$ 的 $\vec{w}$。由于 $\vec{w}^\mathrm{H}$ 是一个 $1 \times N$ 维的矢量,因此如果知道 $B_\psi(\psi)$ 在 $N$ 个 $\psi$ 值上的值,就可以确定 $\vec{w}$。 +假设 $B_\psi(\psi)$ 是已知的,我们想确定产生这个 $B_\psi(\psi)$ 的 $\boldsymbol{w}$。由于 $\boldsymbol{w}^\mathrm{H}$ 是一个 $1 \times N$ 维的矢量,因此如果知道 $B_\psi(\psi)$ 在 $N$ 个 $\psi$ 值上的值,就可以确定 $\boldsymbol{w}$。   对波束方向图在 $N$ 个 $\psi_i$ 上进行采样,这里要求 $\psi_i$ 必须是不同的,但不一定是等距的,记采样点处的波束方向图的值为 $B(\psi_i)$。根据式 $\eqref{ShortBeamPatternInWavenumberDomain}$,有 $$\begin{equation} \label{ElementOfShortBeamPatternInWavenumberDomain} - \vec{w}^\mathrm{H} \vec{v}(\psi_i) = B(\psi_i), \, i = 1, \cdots, N + \boldsymbol{w}^\mathrm{H} \boldsymbol{v}(\psi_i) = B(\psi_i), \, i = 1, \cdots, N \end{equation}$$ 定义一个 $N \times N$ 维的阵列流形矩阵 $$\begin{equation} - \vec{V}(\psi) \triangleq \left[ \begin{array}{c}\vec{v}(\psi_1) & \cdots & \vec{v}(\psi_N)\end{array}\right] + \boldsymbol{V}(\psi) \triangleq \left[ \begin{array}{c}\boldsymbol{v}(\psi_1) & \cdots & \boldsymbol{v}(\psi_N)\end{array}\right] \end{equation}$$ 和一个 $1 \times N$ 维的波束方向图矩阵 $$\begin{equation} - \vec{B} \triangleq \left[ \begin{array}{c}B(\psi_1) & \cdots & B(\psi_N)\end{array}\right] + \boldsymbol{B} \triangleq \left[ \begin{array}{c}B(\psi_1) & \cdots & B(\psi_N)\end{array}\right] \end{equation}$$ 则式 $\eqref{ElementOfShortBeamPatternInWavenumberDomain}$ 可以写成 $$\begin{matrix} - \vec{w}^\mathrm{H} \vec{V}(\psi) = \vec{B} + \boldsymbol{w}^\mathrm{H} \boldsymbol{V}(\psi) = \boldsymbol{B} \end{matrix}$$ 或 $$\begin{matrix} - \vec{V}^\mathrm{H}(\psi) \vec{w} = \vec{B}^\mathrm{H} + \boldsymbol{V}^\mathrm{H}(\psi) \boldsymbol{w} = \boldsymbol{B}^\mathrm{H} \end{matrix}$$ -由于 $\vec{V}^\mathrm{H}(\psi)$ 是满秩的,所以 +由于 $\boldsymbol{V}^\mathrm{H}(\psi)$ 是满秩的,所以 $$\begin{equation} \label{WeightVecCalculation} - \boxed{\vec{w} = \left[ \vec{V}^\mathrm{H}(\psi) \right]^{-1}\vec{B}^\mathrm{H}} + \boxed{\boldsymbol{w} = \left[ \boldsymbol{V}^\mathrm{H}(\psi) \right]^{-1}\boldsymbol{B}^\mathrm{H}} \end{equation}$$ 尽管 $\psi_i$ 可以任意选择,但如果它们相距太近,那么阵列流形矢量将接近于线性相关,在式 $\eqref{WeightVecCalculation}$ 中的求逆可能会有数值计算的问题。如果采用均匀间距 $2\pi/N$,那么后续将会推导一个高效的权值计算算法。 @@ -308,20 +308,20 @@ $$\begin{equation} 且 $\psi_2, \psi_3, \cdots, \psi_N$ 对应于零点的位置。假设期望方向的信号无失真通过,其他方向的信号全部抑制,则预期的归一化波束方向图为: $$\begin{matrix} - \vec{B} = \left[ \begin{array}{c} 1 & 0 & \cdots & 0 \end{array} \right] = \vec{e}_1^\mathrm{T} + \boldsymbol{B} = \left[ \begin{array}{c} 1 & 0 & \cdots & 0 \end{array} \right] = \boldsymbol{e}_1^\mathrm{T} \end{matrix}$$ 则式 $\eqref{WeightVecCalculation}$ 简化为 $$\begin{equation} \label{WeightVecCalculationWithAllZeroExceptMainAxis} - \boxed{\vec{w} = \left[ \vec{V}^\mathrm{H}(\psi) \right]^{-1}\vec{e}_1} + \boxed{\boldsymbol{w} = \left[ \boldsymbol{V}^\mathrm{H}(\psi) \right]^{-1}\boldsymbol{e}_1} \end{equation}$$ 后续将发现这些算法是非常有用的。 在式 $\eqref{WeightVecCalculation}$ 和式 $\eqref{WeightVecCalculationWithAllZeroExceptMainAxis}$ 中有两点需要强调: -1. 上述讨论已经假设 $B_\psi(\psi)$ 在式 $\eqref{ShortBeamPatternInWavenumberDomain}$ 中进行了定义,是由一个 $N \times 1$ 维复矢量 $\vec{w}$ 产生的。如果 $B_\psi(\psi)$ 是任意函数,且使用式 $\eqref{WeightVecCalculation}$,那么将产生一个方向图,和 $B(\psi_i), i = 1,\cdots,N$ 相匹配,但不一定和函数 $B_\psi(\psi)$ 相匹配。 +1. 上述讨论已经假设 $B_\psi(\psi)$ 在式 $\eqref{ShortBeamPatternInWavenumberDomain}$ 中进行了定义,是由一个 $N \times 1$ 维复矢量 $\boldsymbol{w}$ 产生的。如果 $B_\psi(\psi)$ 是任意函数,且使用式 $\eqref{WeightVecCalculation}$,那么将产生一个方向图,和 $B(\psi_i), i = 1,\cdots,N$ 相匹配,但不一定和函数 $B_\psi(\psi)$ 相匹配。 2. 我们是在一个均匀线阵的背景下介绍这个结果的。但是,这个推导过程适用于任意结构的 $N$ 阵元阵列。 diff --git a/source/_posts/2023-04-20-josh-oap-part-1-3.md b/source/_posts/2023-04-20-josh-oap-part-1-3.md index d732eaf..69617d6 100644 --- a/source/_posts/2023-04-20-josh-oap-part-1-3.md +++ b/source/_posts/2023-04-20-josh-oap-part-1-3.md @@ -34,14 +34,14 @@ $$\begin{equation} \end{equation}$$ $$\begin{equation} - \vec{w} = \frac{1}{N} \vec{1} + \boldsymbol{w} = \frac{1}{N} \boldsymbol{1} \end{equation}$$ -其中 $\vec{1}$ 是 $N \times 1$ 维的单位矢量,则在 $\psi$ 空间的频率-波数响应函数可以写成(利用等比级数的求和公式) +其中 $\boldsymbol{1}$ 是 $N \times 1$ 维的单位矢量,则在 $\psi$ 空间的频率-波数响应函数可以写成(利用等比级数的求和公式) $$\begin{equation} \begin{aligned} - \vec{\varUpsilon}_\psi(\psi) &= \frac{1}{N} \sum_{n=0}^{N-1} e^{j \left(n - \frac{N-1}{2}\right)\psi} \\ + \boldsymbol{\varUpsilon}_\psi(\psi) &= \frac{1}{N} \sum_{n=0}^{N-1} e^{j \left(n - \frac{N-1}{2}\right)\psi} \\ &= \frac{1}{N} e^{-j \left(\frac{N-1}{2}\right)\psi} \sum_{n=0}^{N-1} e^{j n \psi} \\ &= \frac{1}{N} e^{-j \left(\frac{N-1}{2}\right)\psi} \left[ \frac{1-e^{jN\psi}}{1-e^{j\psi}} \right] \end{aligned} @@ -50,40 +50,40 @@ $$\begin{equation} 或(利用欧拉公式) $$\begin{equation} - \vec{\varUpsilon}_\psi(\psi) = \frac{1}{N} \frac{\sin\left( N \frac{\psi}{2} \right)}{\sin\frac{\psi}{2}} + \boldsymbol{\varUpsilon}_\psi(\psi) = \frac{1}{N} \frac{\sin\left( N \frac{\psi}{2} \right)}{\sin\frac{\psi}{2}} \end{equation}$$ 可以观察到: -- 当 $N$ 是奇数时,$\vec{\varUpsilon}_\psi(\psi)$ 是周期函数,周期为 $2\pi$; +- 当 $N$ 是奇数时,$\boldsymbol{\varUpsilon}_\psi(\psi)$ 是周期函数,周期为 $2\pi$; - 当 $N$ 为偶数时,波瓣在 $\pm 2 \pi$、$\pm 6 \pi$ 处的值为负值,周期为 $4 \pi$; -- 对任意的 $N$,$\left|\vec{\varUpsilon}_\psi(\psi)\right|$ 的周期为 $2 \pi$。 +- 对任意的 $N$,$\left|\boldsymbol{\varUpsilon}_\psi(\psi)\right|$ 的周期为 $2 \pi$。 -当 $N = 11$ 时, $\vec{\varUpsilon}_\psi(\psi)$ 和 $\psi$ 的关系在[图 1-3-1](#fig.1-3-1) 中给出。[图 1-3-2](#fig.1-3-2) 给出了 $\left|\vec{\varUpsilon}_\psi(\psi)\right|$,单位为 dB,其中 +当 $N = 11$ 时, $\boldsymbol{\varUpsilon}_\psi(\psi)$ 和 $\psi$ 的关系在[图 1-3-1](#fig.1-3-1) 中给出。[图 1-3-2](#fig.1-3-2) 给出了 $\left|\boldsymbol{\varUpsilon}_\psi(\psi)\right|$,单位为 dB,其中 $$\begin{equation} - \vec{\varUpsilon}_\mathrm{dB}(\psi) = 10 \log_{10} \left|\vec{\varUpsilon}(\psi)\right|^2 + \boldsymbol{\varUpsilon}_\mathrm{dB}(\psi) = 10 \log_{10} \left|\boldsymbol{\varUpsilon}(\psi)\right|^2 \end{equation}$$ -![图 1-3-1 $\vec{\varUpsilon}(\psi): \psi = \frac{2\pi}{\lambda} d \cos\theta, N=11$](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-20-josh-oap-part-1-3/2023-04-20-josh-oap-part-1-3-010-FrequencyWavenumberResponseFunction.svg){width=1000px} +![图 1-3-1 $\boldsymbol{\varUpsilon}(\psi): \psi = \frac{2\pi}{\lambda} d \cos\theta, N=11$](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-20-josh-oap-part-1-3/2023-04-20-josh-oap-part-1-3-010-FrequencyWavenumberResponseFunction.svg){width=1000px} -![图 1-3-2 用 dB 表示 $\left|\vec{\varUpsilon}(\psi)\right|$](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-20-josh-oap-part-1-3/2023-04-20-josh-oap-part-1-3-020-FrequencyWavenumberResponseFunctionInDB.svg){width=1000px} +![图 1-3-2 用 dB 表示 $\left|\boldsymbol{\varUpsilon}(\psi)\right|$](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-20-josh-oap-part-1-3/2023-04-20-josh-oap-part-1-3-020-FrequencyWavenumberResponseFunctionInDB.svg){width=1000px} -若不指定 $\vec{w}$ 的类型,则 $\vec{\varUpsilon}_\psi(\psi)$ 是复数,所以相位也应该画出来。但是,均匀加权线阵具有对称性,因此得到的频率-波数响应是实函数。 +若不指定 $\boldsymbol{w}$ 的类型,则 $\boldsymbol{\varUpsilon}_\psi(\psi)$ 是复数,所以相位也应该画出来。但是,均匀加权线阵具有对称性,因此得到的频率-波数响应是实函数。   也可以用 $k_z$ 来表示频率-波数响应 $$\begin{equation} - \vec{\varUpsilon}(\omega:k_z) = \frac{1}{N} \frac{\sin\left( N k_z \frac{d}{2} \right)}{\sin \left(k_z\frac{d}{2}\right)} + \boldsymbol{\varUpsilon}(\omega:k_z) = \frac{1}{N} \frac{\sin\left( N k_z \frac{d}{2} \right)}{\sin \left(k_z\frac{d}{2}\right)} \end{equation}$$ -这里 $\vec{\varUpsilon}(\omega:k_z)$ 是周期函数,周期为 $2\pi/d$。 +这里 $\boldsymbol{\varUpsilon}(\omega:k_z)$ 是周期函数,周期为 $2\pi/d$。 {% note warning %} @@ -123,7 +123,7 @@ $$\begin{equation} -![图 1-3-4 $d = \lambda/2, N=10$,线阵的 $\left|\vec{\varUpsilon}_\psi(\psi)\right|$](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-20-josh-oap-part-1-3/2023-04-20-josh-oap-part-1-3-040-AbsOfFWRFForALinearArray.svg){width=1000px} +![图 1-3-4 $d = \lambda/2, N=10$,线阵的 $\left|\boldsymbol{\varUpsilon}_\psi(\psi)\right|$](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-20-josh-oap-part-1-3/2023-04-20-josh-oap-part-1-3-040-AbsOfFWRFForALinearArray.svg){width=1000px} {% note info %} @@ -295,7 +295,7 @@ $$\begin{equation} ![图 1-3-6 阵元间距对波束方向图的影响:(a) $d=\lambda/4$;(b) $d=\lambda/2$;(c) $d=\lambda$](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2023-04-20-josh-oap-part-1-3/2023-04-20-josh-oap-part-1-3-060-%20EffectOfElementSpacingOnBeamPattern.svg){width=1000px} -  在[图 1-3-6](#fig.1-3-6) 中,针对多种 $d/\lambda$ 的值,画出了 $\left| \vec{\varUpsilon}_u(u) \right|$。图中说明了“栅瓣”这个重要的概念,即和主波束一样高的波瓣。栅瓣发生在当波束方向图 $B_\psi(\psi)$(式 $\eqref{BeamPatternOfUWLAInWaveNumberDomain}$)中的分子和分母均为零的时候。栅瓣出现的间隔为 +  在[图 1-3-6](#fig.1-3-6) 中,针对多种 $d/\lambda$ 的值,画出了 $\left| \boldsymbol{\varUpsilon}_u(u) \right|$。图中说明了“栅瓣”这个重要的概念,即和主波束一样高的波瓣。栅瓣发生在当波束方向图 $B_\psi(\psi)$(式 $\eqref{BeamPatternOfUWLAInWaveNumberDomain}$)中的分子和分母均为零的时候。栅瓣出现的间隔为 $$\begin{equation} \frac{\psi}{2} = m \cdot \pi @@ -315,7 +315,7 @@ $$\begin{equation}   如果阵列的间距大于 $\lambda$,则栅瓣的峰值出现在信号传播区域以内,即在 $\left| u \right| \leqslant 1$ 的区域以内。这里就会出现峰值响应模糊的问题,只有当我们对信号的入射方向有先验信息的时候,才可能解决这个问题。 -  下一节将讨论阵列调向的问题,阵列调向使得在 $u$ 空间的频率-波数响应函数 $\left| \vec{\varUpsilon}_u(u) \right|$ 发生平移,这种平移导致栅瓣进入了可视区域以内。我们发现,如果阵列需要的调向范围为 $0^\circ \leqslant \theta \leqslant 180^\circ$ 则需要 +  下一节将讨论阵列调向的问题,阵列调向使得在 $u$ 空间的频率-波数响应函数 $\left| \boldsymbol{\varUpsilon}_u(u) \right|$ 发生平移,这种平移导致栅瓣进入了可视区域以内。我们发现,如果阵列需要的调向范围为 $0^\circ \leqslant \theta \leqslant 180^\circ$ 则需要 $$\begin{equation} \frac{d}{\lambda} \leqslant \frac{1}{2} diff --git a/source/_posts/2023-04-22-josh-oap-part-1-4.md b/source/_posts/2023-04-22-josh-oap-part-1-4.md index 10ac47e..2fbe76e 100644 --- a/source/_posts/2023-04-22-josh-oap-part-1-4.md +++ b/source/_posts/2023-04-22-josh-oap-part-1-4.md @@ -42,43 +42,43 @@ date: 2023-04-22 18:17:52   [1.2 节][]开头的简单例子说明了把阵列调向某个特定方向的主要思想,调向在波数空间的影响是很直接的。考虑[图 1-4-1](#fig.1-4-1) 中的处理器,输入到调向环节的基函数为 $$\begin{equation} - f\left( t, \vec{p}\right) = e^{j\omega t} \vec{v}_{\vec{k}}\left(\vec{k}\right) + f\left( t, \boldsymbol{p}\right) = e^{j\omega t} \boldsymbol{v}_{\boldsymbol{k}}\left(\boldsymbol{k}\right) \end{equation}$$ 我们希望当波数等于“目标”的波数时,即 $$\begin{equation} - \vec{k} = \vec{k}_\mathrm{T} + \boldsymbol{k} = \boldsymbol{k}_\mathrm{T} \end{equation}$$ -输出是对齐的。我们把 $\vec{k}_\mathrm{T}$ 称为**{% label primary @所调方向(steering direction) %}**或在 $k$ 空间的**{% label primary @主响应轴(main response axis) %}**。可以使用一个 $N \times N$ 的对角调向矩阵(diagonal steering matrix)来完成这个操作 +输出是对齐的。我们把 $\boldsymbol{k}_\mathrm{T}$ 称为**{% label primary @所调方向(steering direction) %}**或在 $k$ 空间的**{% label primary @主响应轴(main response axis) %}**。可以使用一个 $N \times N$ 的对角调向矩阵(diagonal steering matrix)来完成这个操作 $$\begin{equation} - \vec{I}_\mathrm{s}\left(\vec{k}_\mathrm{T}\right) = \left[ \begin{matrix} - e^{j \vec{k}^\mathrm{T}_\mathrm{T}\vec{p}_1} & 0 & \cdots & 0 \\ - 0 & e^{j \vec{k}^\mathrm{T}_\mathrm{T}\vec{p}_2} & \cdots & 0 \\ + \boldsymbol{I}_\mathrm{s}\left(\boldsymbol{k}_\mathrm{T}\right) = \left[ \begin{matrix} + e^{j \boldsymbol{k}^\mathrm{T}_\mathrm{T}\boldsymbol{p}_1} & 0 & \cdots & 0 \\ + 0 & e^{j \boldsymbol{k}^\mathrm{T}_\mathrm{T}\boldsymbol{p}_2} & \cdots & 0 \\ \vdots & \vdots & & \vdots \\ - 0 & 0 & \cdots & e^{j \vec{k}^\mathrm{T}_\mathrm{T}\vec{p}_N} + 0 & 0 & \cdots & e^{j \boldsymbol{k}^\mathrm{T}_\mathrm{T}\boldsymbol{p}_N} \end{matrix} \right] \end{equation}$$ 得到的输出为 $$\begin{equation} - f_\mathrm{s}\left( t, \vec{p}\right) = e^{j\omega t} \vec{v}_{\vec{k}}\left(\vec{k} - \vec{k}_\mathrm{T}\right) + f_\mathrm{s}\left( t, \boldsymbol{p}\right) = e^{j\omega t} \boldsymbol{v}_{\boldsymbol{k}}\left(\boldsymbol{k} - \boldsymbol{k}_\mathrm{T}\right) \end{equation}$$ 总的频率-波数响应为 $$\begin{equation} - \vec{\varUpsilon} \left(\left. \omega, \vec{k} \right| \vec{k}_\mathrm{T} \right) = \vec{\varUpsilon} \left( \omega, \vec{k} - \vec{k}_\mathrm{T} \right) + \boldsymbol{\varUpsilon} \left(\left. \omega, \boldsymbol{k} \right| \boldsymbol{k}_\mathrm{T} \right) = \boldsymbol{\varUpsilon} \left( \omega, \boldsymbol{k} - \boldsymbol{k}_\mathrm{T} \right) \end{equation}$$ {% note info %} -阵列的响应函数仅是简单地平移到 $\vec{k}_\mathrm{T}$ 的位置,这是利用波数空间来解释阵列响应函数的好处之一。如果在波数空间考虑波束方向图,也会得到一个简单的平移关系。 +阵列的响应函数仅是简单地平移到 $\boldsymbol{k}_\mathrm{T}$ 的位置,这是利用波数空间来解释阵列响应函数的好处之一。如果在波数空间考虑波束方向图,也会得到一个简单的平移关系。 {% endnote %} @@ -87,27 +87,27 @@ $$\begin{equation}   当采用均匀幅度加权时,在[图 1-4-1](#fig.1-4-1) 中的两步的过程是不必要的。令 $$\begin{equation} - \vec{w} = \frac{1}{N} \vec{v}_{\vec{k}}\left(\vec{k}_\mathrm{T}\right) + \boldsymbol{w} = \frac{1}{N} \boldsymbol{v}_{\boldsymbol{k}}\left(\boldsymbol{k}_\mathrm{T}\right) \end{equation}$$ 则有 $$\begin{equation} - B_\mathrm{c} \left( \vec{k}, \vec{k}_\mathrm{T} \right) = \frac{1}{N} \vec{v}_{\vec{k}}^\mathrm{H} \left(\vec{k}_\mathrm{T}\right) \vec{v}_{\vec{k}}\left(\vec{k}\right) + B_\mathrm{c} \left( \boldsymbol{k}, \boldsymbol{k}_\mathrm{T} \right) = \frac{1}{N} \boldsymbol{v}_{\boldsymbol{k}}^\mathrm{H} \left(\boldsymbol{k}_\mathrm{T}\right) \boldsymbol{v}_{\boldsymbol{k}}\left(\boldsymbol{k}\right) \end{equation}$$ -称 $B_c \left( \vec{k}, \vec{k}_\mathrm{T} \right)$ 为**{% label primary @常规波束方向图(conventional beam pattern) %}**。我们将发现常规波束方向图是后面要讨论的很多最优处理内容的基础。 +称 $B_c \left( \boldsymbol{k}, \boldsymbol{k}_\mathrm{T} \right)$ 为**{% label primary @常规波束方向图(conventional beam pattern) %}**。我们将发现常规波束方向图是后面要讨论的很多最优处理内容的基础。 # 均匀线性阵列的调向   线性阵列的常规波束方向图为 $$\begin{equation} - B_{\psi\mathrm{c}}\left( \psi : \psi_\mathrm{T} \right) = \frac{1}{N} \vec{v}_\psi^\mathrm{H} \left(\psi_\mathrm{T}\right) \vec{v}_\psi\left(\psi\right) + B_{\psi\mathrm{c}}\left( \psi : \psi_\mathrm{T} \right) = \frac{1}{N} \boldsymbol{v}_\psi^\mathrm{H} \left(\psi_\mathrm{T}\right) \boldsymbol{v}_\psi\left(\psi\right) \end{equation}$$ $$\begin{equation} - B_{u\mathrm{c}}\left( u : u_\mathrm{T} \right) = \frac{1}{N} \vec{v}_u^\mathrm{H} \left(u_\mathrm{T}\right) \vec{v}_u\left(u\right) + B_{u\mathrm{c}}\left( u : u_\mathrm{T} \right) = \frac{1}{N} \boldsymbol{v}_u^\mathrm{H} \left(u_\mathrm{T}\right) \boldsymbol{v}_u\left(u\right) \end{equation}$$ 对于均匀线性阵列(阵元间距相同),有 diff --git a/source/_posts/2023-04-24-josh-oap-part-1-5.md b/source/_posts/2023-04-24-josh-oap-part-1-5.md index 6844ee6..350e11a 100644 --- a/source/_posts/2023-04-24-josh-oap-part-1-5.md +++ b/source/_posts/2023-04-24-josh-oap-part-1-5.md @@ -100,25 +100,25 @@ $$\begin{equation} \label{ElementOfSincMatrix} [对角调向矩阵][] 在 $u$ 空间的表示形式为 $$\begin{equation} - \vec{I}_{\mathrm{s}u} = \mathrm{diag}\left( 1, e^{j \frac{2\pi d}{\lambda}u_\mathrm{T}} , e^{j \frac{2\pi d}{\lambda} 2u_\mathrm{T}}, \cdots, , e^{j \frac{2\pi d}{\lambda}(N-1)u_\mathrm{T}} \right) + \boldsymbol{I}_{\mathrm{s}u} = \mathrm{diag}\left( 1, e^{j \frac{2\pi d}{\lambda}u_\mathrm{T}} , e^{j \frac{2\pi d}{\lambda} 2u_\mathrm{T}}, \cdots, , e^{j \frac{2\pi d}{\lambda}(N-1)u_\mathrm{T}} \right) \end{equation}$$ 则 $$\begin{equation} - D = \vec{I}_{\mathrm{s}u} \vec{w}^\mathrm{H} \left[ \overrightarrow{\mathrm{sinc}} \right] \vec{w} \vec{I}_{\mathrm{s}u}^\mathrm{H} + D = \boldsymbol{I}_{\mathrm{s}u} \boldsymbol{w}^\mathrm{H} \left[ \overrightarrow{\mathrm{sinc}} \right] \boldsymbol{w} \boldsymbol{I}_{\mathrm{s}u}^\mathrm{H} \end{equation}$$ 通常,调向运算在权值矢量中包含[^1] $$\begin{equation} - \vec{w}_\mathrm{s} = \vec{w}\vec{I}_{\mathrm{s}u}^\mathrm{H} + \boldsymbol{w}_\mathrm{s} = \boldsymbol{w}\boldsymbol{I}_{\mathrm{s}u}^\mathrm{H} \end{equation}$$ 则 $$\begin{equation} - D = \vec{w}_\mathrm{s}^\mathrm{H} \left[ \overrightarrow{\mathrm{sinc}} \right] \vec{w}_\mathrm{s} + D = \boldsymbol{w}_\mathrm{s}^\mathrm{H} \left[ \overrightarrow{\mathrm{sinc}} \right] \boldsymbol{w}_\mathrm{s} \end{equation}$$ ## 标准线阵的情况 @@ -132,16 +132,16 @@ $$\begin{equation} \label{IntermediateResultOfDirectivityInDirectionCosineSpaceO 当 $m = n$ 时,$\mathrm{sinc}$ 函数等于 1,当 $m \ne n$ 时,$\mathrm{sinc}$ 函数等于 0。所以式 $\eqref{IntermediateResultOfDirectivityInDirectionCosineSpaceOfLA}$ 简化为 $$\begin{equation} - D = \left\{ \sum_{n=0}^{N-1} \left| w_n \right|^2 \right\} = \left( \vec{w}^\mathrm{H}\vec{w} \right)^{-2} = \left\{ \left\| \vec{w} \right \|^2 \right\}^{-1} + D = \left\{ \sum_{n=0}^{N-1} \left| w_n \right|^2 \right\} = \left( \boldsymbol{w}^\mathrm{H}\boldsymbol{w} \right)^{-2} = \left\{ \left\| \boldsymbol{w} \right \|^2 \right\}^{-1} \end{equation}$$ 其中 $$\begin{equation} \label{SimplifiedResultOfDirectivityInDirectionCosineSpaceOfLA} - \left\| \vec{w} \right \| = \left( \vec{w}^\mathrm{H}\vec{w} \right)^{\frac{1}{2}} + \left\| \boldsymbol{w} \right \| = \left( \boldsymbol{w}^\mathrm{H}\boldsymbol{w} \right)^{\frac{1}{2}} \end{equation}$$ -是矢量 $\vec{w}$ 的 2-模。 +是矢量 $\boldsymbol{w}$ 的 2-模。   所以一个标准线阵的方向性是权值矢量幅度平方的倒数。方向性不依赖于阵列的指向。当阵列指向从阵列的正侧向移开时,波束变宽,但是 $\varphi$ 的积分范围减小了 @@ -214,7 +214,7 @@ $$\begin{equation} 可以把 $DI$ 写成 $$\begin{equation} - DI = 10 \log_{10} N + 10 \log_{10}(g(\vec{w})) + DI = 10 \log_{10} N + 10 \log_{10}(g(\boldsymbol{w})) \end{equation}$$ 其中的第二项是权值的函数。对于任意的非均匀加权($w_n \ne N^{-1}$),$DI$ 将会减小。 @@ -240,7 +240,7 @@ $$\begin{equation} \label{InputSNRAtCertainFreq}   为了确定由信号和噪声产生的输出,我们需要一个用于描述输出谱的表达式,该式用波束形成器的权值和输入谱矩阵表示。根据[阵列输出的向量形式][]的表达式, 有 $$\begin{equation} \label{ArrayOutput} -y(t) = \int_{-\infty}^{\infty} \vec{h}^\mathrm{T} (\tau) \vec{x}\left(t - \tau\right) \mathrm{d} \tau +y(t) = \int_{-\infty}^{\infty} \boldsymbol{h}^\mathrm{T} (\tau) \boldsymbol{x}\left(t - \tau\right) \mathrm{d} \tau \end{equation}$$ 假设 $x(t)$ 是零均值宽平稳的。输出 $y(t)$ 的相关函数为 @@ -258,46 +258,46 @@ $$\begin{equation} \label{SpectrumOfArrayOutput} 根据式 $\eqref{ArrayOutput}$、$\eqref{CorrelationOfArrayOutput}$ 和 $\eqref{SpectrumOfArrayOutput}$,有 $$\begin{equation} - S_y (\omega) = \int_{-\infty}^{\infty} e^{-j\omega\tau} \, \mathrm{d} \tau \int_{-\infty}^{\infty} \vec{h}^\mathrm{T} (\alpha) \, \mathrm{d} \alpha \int_{-\infty}^{\infty} E \left[ \vec{x} (t-\alpha) \vec{x}^\mathrm{H} (t-\tau-\beta)\right] \vec{h}^\ast(\beta) \, \mathrm{d} \beta + S_y (\omega) = \int_{-\infty}^{\infty} e^{-j\omega\tau} \, \mathrm{d} \tau \int_{-\infty}^{\infty} \boldsymbol{h}^\mathrm{T} (\alpha) \, \mathrm{d} \alpha \int_{-\infty}^{\infty} E \left[ \boldsymbol{x} (t-\alpha) \boldsymbol{x}^\mathrm{H} (t-\tau-\beta)\right] \boldsymbol{h}^\ast(\beta) \, \mathrm{d} \beta \end{equation}$$ 也即 $$\begin{equation} - S_y (\omega) = \int_{-\infty}^{\infty} \vec{h}^\mathrm{T} (\alpha) e^{-j\omega\alpha} \, \mathrm{d} \alpha \int_{-\infty}^{\infty} e^{-jk\omega z} \vec{R}_x (z) \, \mathrm{d} z \int_{-\infty}^{\infty} e^{j\omega \beta} \vec{h}^\ast(\beta) \, \mathrm{d} \beta + S_y (\omega) = \int_{-\infty}^{\infty} \boldsymbol{h}^\mathrm{T} (\alpha) e^{-j\omega\alpha} \, \mathrm{d} \alpha \int_{-\infty}^{\infty} e^{-jk\omega z} \boldsymbol{R}_x (z) \, \mathrm{d} z \int_{-\infty}^{\infty} e^{j\omega \beta} \boldsymbol{h}^\ast(\beta) \, \mathrm{d} \beta \end{equation}$$ 可以进一步简化为 $$\begin{equation} \label{SimplifiedSpectrumOfArrayOutput} - S_y (\omega) = \vec{H}^\mathrm{T} (\omega) \vec{S}_x(\omega) \vec{H} ^\ast (\omega) + S_y (\omega) = \boldsymbol{H}^\mathrm{T} (\omega) \boldsymbol{S}_x(\omega) \boldsymbol{H} ^\ast (\omega) \end{equation}$$ 对于窄带波束形成器,在式 $\eqref{SimplifiedSpectrumOfArrayOutput}$ 中利用[窄带假设下的复加权的表达式][],可得到想要的结果: $$\begin{equation} - S_y (\omega) = \vec{w}^\mathrm{H} \vec{S}_x(\omega) \vec{w} + S_y (\omega) = \boldsymbol{w}^\mathrm{H} \boldsymbol{S}_x(\omega) \boldsymbol{w} \end{equation}$$ -为了计算由于信号而产生的输出,对 $\vec{w}$ 施加约束条件, +为了计算由于信号而产生的输出,对 $\boldsymbol{w}$ 施加约束条件, $$\begin{equation} \label{DistortionlessConstraint} - \vec{w}^\mathrm{H} \vec{v}_{\vec{k}} \left( \vec{k}_\mathrm{s} \right) = 1 + \boldsymbol{w}^\mathrm{H} \boldsymbol{v}_{\boldsymbol{k}} \left( \boldsymbol{k}_\mathrm{s} \right) = 1 \end{equation}$$ -在式 $\eqref{DistortionlessConstraint}$ 中的约束条件意味着从 $\vec{k}_\mathrm{s}$ 入射的任意信号将无畸变地通过波束形成器。我们把式 $\eqref{DistortionlessConstraint}$ 中的约束条件称为**{% label primary @无畸变约束( distortionless constraint) %}**。在后续的讨论中这个条件经常使用。 +在式 $\eqref{DistortionlessConstraint}$ 中的约束条件意味着从 $\boldsymbol{k}_\mathrm{s}$ 入射的任意信号将无畸变地通过波束形成器。我们把式 $\eqref{DistortionlessConstraint}$ 中的约束条件称为**{% label primary @无畸变约束( distortionless constraint) %}**。在后续的讨论中这个条件经常使用。   可以把输入信号谱写成 $$\begin{equation} \label{SpectrumOfArrayInput} - \vec{S}_{\vec{f}}(\omega) = \vec{v}_{\vec{k}} \left( \vec{k}_\mathrm{s} \right) S_f(\omega) \vec{v}_{\vec{k}}^\mathrm{H} \left( \vec{k}_\mathrm{s} \right) + \boldsymbol{S}_{\boldsymbol{f}}(\omega) = \boldsymbol{v}_{\boldsymbol{k}} \left( \boldsymbol{k}_\mathrm{s} \right) S_f(\omega) \boldsymbol{v}_{\boldsymbol{k}}^\mathrm{H} \left( \boldsymbol{k}_\mathrm{s} \right) \end{equation}$$ 将式 $\eqref{SpectrumOfArrayInput}$ 代入利用式 $\eqref{SimplifiedSpectrumOfArrayOutput}$,得到的输出信号谱为 $$\begin{equation} \begin{aligned} - S_{y_\mathrm{s}} &= \vec{w}^\mathrm{H} \vec{v}_{\vec{k}} \left( \vec{k}_\mathrm{s} \right) S_f (\omega) \vec{v}_{\vec{k}}^\mathrm{H} \left( \vec{k}_\mathrm{s} \right) \vec{w} \\ + S_{y_\mathrm{s}} &= \boldsymbol{w}^\mathrm{H} \boldsymbol{v}_{\boldsymbol{k}} \left( \boldsymbol{k}_\mathrm{s} \right) S_f (\omega) \boldsymbol{v}_{\boldsymbol{k}}^\mathrm{H} \left( \boldsymbol{k}_\mathrm{s} \right) \boldsymbol{w} \\ &= S_f(\omega) \end{aligned} \end{equation}$$ @@ -305,19 +305,19 @@ $$\begin{equation} 由于噪声而产生的输出谱为 $$\begin{equation} - S_{y_\mathrm{n}} = \vec{w}^\mathrm{H} \vec{S_{\vec{n}}} (\omega) \vec{w} + S_{y_\mathrm{n}} = \boldsymbol{w}^\mathrm{H} \boldsymbol{S_{\boldsymbol{n}}} (\omega) \boldsymbol{w} \end{equation}$$ -其中 $\vec{S_{\vec{n}}} (\omega)$ 是输入噪声过程的谱矩阵。对于空域白噪声,且各传感器的噪声谱相同的特殊情况,有 +其中 $\boldsymbol{S_{\boldsymbol{n}}} (\omega)$ 是输入噪声过程的谱矩阵。对于空域白噪声,且各传感器的噪声谱相同的特殊情况,有 $$\begin{equation} - S_{y_\mathrm{n}} = S_n (\omega) \vec{I} + S_{y_\mathrm{n}} = S_n (\omega) \boldsymbol{I} \end{equation}$$ 和 $$\begin{equation} - S_{y_n} = \left\| \vec{w} \right\|^2 S_n(w) = \sum_{n=0}^{N-1} \left| \omega_n \right|^2 S_n(\omega) + S_{y_n} = \left\| \boldsymbol{w} \right\|^2 S_n(w) = \sum_{n=0}^{N-1} \left| \omega_n \right|^2 S_n(\omega) \end{equation}$$ 所以 @@ -337,7 +337,7 @@ $$\begin{equation} 或 $$\begin{equation} \label{DefinitionOfArrayGain} - A_w = \left( \sum_{n=0}^{N-1} \frac{1}{\left| \omega_n \right|^2} \right) ^{-1} = \left\| \vec{w} \right\| ^{-2} + A_w = \left( \sum_{n=0}^{N-1} \frac{1}{\left| \omega_n \right|^2} \right) ^{-1} = \left\| \boldsymbol{w} \right\| ^{-2} \end{equation}$$ 对于式 $\eqref{DefinitionOfArrayGain}$,可以观察到下面三个有用的结果: @@ -345,7 +345,7 @@ $$\begin{equation} \label{DefinitionOfArrayGain} 1. 只要满足 $$\begin{equation} - \left| \vec{w}^\mathrm{H}\vec{v}_{\vec{k}} \left( \vec{k}_\mathrm{s} \right) \right|^2 = 1 + \left| \boldsymbol{w}^\mathrm{H}\boldsymbol{v}_{\boldsymbol{k}} \left( \boldsymbol{k}_\mathrm{s} \right) \right|^2 = 1 \end{equation}$$ 这个结果就适用于任意的阵列结构。 @@ -360,4 +360,4 @@ $$\begin{equation} \label{DefinitionOfArrayGain} [阵列输出的向量形式]: https://josh-gao.top/posts/8b61f5a7.html#VectorFormOfLinearArrayOutputInTimeDomain [窄带假设下的复加权的表达式]: https://josh-gao.top/posts/8b61f5a7.html#NarrowBandComplexWeightVector -[^1]: 在大多数情况下,我们去掉下标 “$s$”,因为假设 $\vec{w}$ 是包含调向的。 +[^1]: 在大多数情况下,我们去掉下标 “$s$”,因为假设 $\boldsymbol{w}$ 是包含调向的。