|
7 | 7 | <meta name="description" content="整理 BPSK-R / GPS C/A 码扩频基带信号仿真中的采样索引、floor+1、C/A 码周期重复、sinc^2 理论功率谱、窗函数卷积、频谱泄漏、周期 FFT 深零点和 MATLAB 绘图实践。"> |
8 | 8 | <link rel="stylesheet" href="../../../assets/styles/site.css"> |
9 | 9 | <link rel="stylesheet" href="../../../assets/styles/article-note.css"> |
10 | | - <link rel="stylesheet" href="../../../assets/styles/equation-tools.css?v=20260617-bpskr-spectrum"> |
| 10 | + <link rel="stylesheet" href="../../../assets/styles/equation-tools.css?v=20260618-hover-copy"> |
11 | 11 | <style> |
12 | 12 | .bpskr-note .note-intro-copy h1, |
13 | 13 | .bpskr-note .note-prose section.level1 > h1, |
@@ -215,6 +215,7 @@ <h2>目录</h2> |
215 | 215 | <a class="level-2" href="#periodic-zeros">7. 周期结构与深零点</a> |
216 | 216 | <a class="level-2" href="#matlab-practice">8. MATLAB 绘图实践</a> |
217 | 217 | <a class="level-2" href="#summary">9. 一页总结</a> |
| 218 | + <a class="level-2" href="#qa-appendix">10. 侧边聊天问答整理</a> |
218 | 219 | </nav> |
219 | 220 | </details> |
220 | 221 | </aside> |
@@ -581,6 +582,214 @@ <h2>9. 一页总结</h2> |
581 | 582 | \]</span></p> |
582 | 583 | <p>最重要的直觉是:理论 sinc² 给出矩形码片的外层包络;真实 FFT 图还叠加了 C/A 码周期线谱、有限观测窗、零填充频率采样和导航 bit 翻转。看到很深的竖线时,先判断它是 sinc² 包络零点,还是周期重复和有限窗口相消造成的近零点。</p> |
583 | 584 | </section> |
| 585 | + |
| 586 | + <section id="qa-appendix" class="level2"> |
| 587 | + <h2>10. 侧边聊天问答整理</h2> |
| 588 | + <p>本节把整理这篇笔记时侧边聊天中的提问和回答按主题补充进来。前面的正文已经把结论按推导顺序重组;这里保留问答形态,便于回看当时每个疑问是如何被拆开的。</p> |
| 589 | + |
| 590 | + <h3>10.1 矩形窗为什么会让频谱出现尖锐起伏和深零点?</h3> |
| 591 | + <blockquote> |
| 592 | + <p><strong>问:</strong>矩形窗会把原始频谱与一个 sinc 函数卷积。sinc 有明显旁瓣和零点,因此不加窗时频谱中更容易出现尖锐起伏和深零点。这个怎么理解?</p> |
| 593 | + </blockquote> |
| 594 | + <p><strong>答:</strong>“不加窗”并不是真的没有窗,而是用了矩形窗。实际 FFT 只能取有限长度信号,因此分析对象不是无限长的 \(x(t)\),而是:</p> |
| 595 | + <p><span class="math display">\[ |
| 596 | +x_{\text{obs}}(t)=x(t)\operatorname{rect}(t) |
| 597 | +\]</span></p> |
| 598 | + <p>时域相乘对应频域卷积:</p> |
| 599 | + <p><span class="math display">\[ |
| 600 | +X_{\text{obs}}(f)=X(f)*W_{\text{rect}}(f) |
| 601 | +\]</span></p> |
| 602 | + <p>矩形窗的频谱是 sinc。sinc 主瓣较窄、旁瓣较高,并且不断振荡。卷积以后,原始频谱中的能量会被 sinc 的主瓣和旁瓣扩散到邻近频率;多个频率成分的 sinc 副本叠加时,有些频点相加变大,有些频点相互抵消变小。接近 0 的频点转成 dB 后,就会表现为很深的竖线。</p> |
| 603 | + <p>对 C/A 码这类周期重复信号,这个现象更明显,因为原始频谱本来就有很多离散谱线。矩形窗会把每一根谱线都扩展成一个 sinc,许多 sinc 叠加后形成尖峰和深谷。Hann 窗的作用是平滑截断边缘,降低旁瓣;代价是主瓣变宽,但图形通常更平滑。</p> |
| 604 | + |
| 605 | + <h3>10.2 “被 sinc 形状涂抹开”是什么意思?</h3> |
| 606 | + <blockquote> |
| 607 | + <p><strong>问:</strong>被一个 sinc 形状“涂抹”开怎么理解?</p> |
| 608 | + </blockquote> |
| 609 | + <p><strong>答:</strong>可以从单频信号理解。若原始信号只有一个理想频率 \(f_0=1\,\text{MHz}\),无限长时它的频谱是一根无限细的谱线。有限时间截取以后,原来集中在 \(f_0\) 的能量不再只停在一个频率点,而是扩散成一个以 \(f_0\) 为中心的窗函数频谱形状。</p> |
| 610 | + <p>如果窗是矩形窗,这个形状就是 sinc。直观上:</p> |
| 611 | + <pre><code>无限长信号:频谱像一根针,能量集中在一个频率点。 |
| 612 | +有限截断后:频谱像一个 sinc,主瓣在原频率处,旁瓣向两边延伸。</code></pre> |
| 613 | + <p>如果原始频谱里有很多谱线,那么每一根谱线都会被扩散成一个 sinc;这些 sinc 相加后,就会形成有限长 FFT 中看到的峰、谷和旁瓣。</p> |
| 614 | + |
| 615 | + <h3>10.3 卷积为什么能把 1 MHz 的细线变成 sinc?</h3> |
| 616 | + <blockquote> |
| 617 | + <p><strong>问:</strong>卷积的意义是什么?为什么可以把 1 MHz 的细线涂抹开?</p> |
| 618 | + </blockquote> |
| 619 | + <p><strong>答:</strong>卷积可以理解为“用一个函数的形状,去扩散另一个函数里的每一个点”。无限长正弦:</p> |
| 620 | + <p><span class="math display">\[ |
| 621 | +x(t)=\cos(2\pi f_0t) |
| 622 | +\]</span></p> |
| 623 | + <p>在频域是位于 \(\pm f_0\) 的理想冲激。只看正频率时,可以写成:</p> |
| 624 | + <p><span class="math display">\[ |
| 625 | +X(f)=\delta(f-f_0) |
| 626 | +\]</span></p> |
| 627 | + <p>有限截取等价于乘窗:</p> |
| 628 | + <p><span class="math display">\[ |
| 629 | +x_{\text{obs}}(t)=x(t)w(t) |
| 630 | +\]</span></p> |
| 631 | + <p>频域变为卷积:</p> |
| 632 | + <p><span class="math display">\[ |
| 633 | +X_{\text{obs}}(f)=X(f)*W(f) |
| 634 | +\]</span></p> |
| 635 | + <p>利用冲激卷积性质:</p> |
| 636 | + <p><span class="math display">\[ |
| 637 | +\delta(f-f_0)*W(f)=W(f-f_0) |
| 638 | +\]</span></p> |
| 639 | + <p>所以原来位于 \(f_0\) 的一根细线,卷积后会变成以 \(f_0\) 为中心的 \(W(f)\)。如果 \(W(f)\) 是 sinc,那么细线就变成了一个以 1 MHz 为中心的 sinc。更直观地说:无限长正弦频率完全确定;只观察 40 ms 时,频率不再无限精确,能量必须在频域中占据一个有限宽度。</p> |
| 640 | + |
| 641 | + <h3>10.4 “替换/扩散每一个点”如何从卷积公式看出来?</h3> |
| 642 | + <blockquote> |
| 643 | + <p><strong>问:</strong>卷积就是“用一个函数的形状,去替换/扩散另一个函数里的每一个点”。这个如何通过公式理解?</p> |
| 644 | + </blockquote> |
| 645 | + <p><strong>答:</strong>连续卷积定义为:</p> |
| 646 | + <p><span class="math display">\[ |
| 647 | +Y(f)=(X*W)(f)=\int_{-\infty}^{\infty}X(\nu)W(f-\nu)\,d\nu |
| 648 | +\]</span></p> |
| 649 | + <p>这里 \(W(f-\nu)\) 是把 \(W\) 平移到频率 \(\nu\) 附近,\(X(\nu)\) 决定这一份平移副本的权重。积分就是把所有频率位置的平移副本叠加起来。</p> |
| 650 | + <p>若原始频谱有多根谱线:</p> |
| 651 | + <p><span class="math display">\[ |
| 652 | +X(f)=a_1\delta(f-f_1)+a_2\delta(f-f_2)+a_3\delta(f-f_3) |
| 653 | +\]</span></p> |
| 654 | + <p>卷积后就是:</p> |
| 655 | + <p><span class="math display">\[ |
| 656 | +Y(f)=a_1W(f-f_1)+a_2W(f-f_2)+a_3W(f-f_3) |
| 657 | +\]</span></p> |
| 658 | + <p>所以每一根谱线都会被替换成一个平移后的 \(W\),再按对应幅度加权叠加。有限长 FFT 中,\(W\) 就是窗函数频谱。</p> |
| 659 | + |
| 660 | + <h3>10.5 周期结构下 DFT 为什么能拆成两层求和?</h3> |
| 661 | + <blockquote> |
| 662 | + <p><strong>问:</strong>离散 FFT 中,如果 \(x[n]\) 有周期结构,\(N=LN_0\),把 \(n\) 写成 \(\ell N_0+r\) 的过程是怎么推导的?</p> |
| 663 | + </blockquote> |
| 664 | + <p><strong>答:</strong>DFT 定义为:</p> |
| 665 | + <p><span class="math display">\[ |
| 666 | +X[k]=\sum_{n=0}^{N-1}x[n]e^{-j2\pi kn/N} |
| 667 | +\]</span></p> |
| 668 | + <p>若信号由 \(L\) 个周期组成,每个周期有 \(N_0\) 个采样点,则:</p> |
| 669 | + <p><span class="math display">\[ |
| 670 | +N=LN_0 |
| 671 | +\]</span></p> |
| 672 | + <p>任意样点下标 \(n\) 都可以唯一写成:</p> |
| 673 | + <p><span class="math display">\[ |
| 674 | +n=\ell N_0+r |
| 675 | +\]</span></p> |
| 676 | + <p>其中 \(\ell=0,1,\ldots,L-1\) 表示第几个周期,\(r=0,1,\ldots,N_0-1\) 表示周期内第几个采样点。于是原来对 \(n\) 的一个求和,可以改写为对周期编号和周期内编号的双重求和:</p> |
| 677 | + <p><span class="math display">\[ |
| 678 | +X[k]= |
| 679 | +\sum_{\ell=0}^{L-1}\sum_{r=0}^{N_0-1} |
| 680 | +x[\ell N_0+r]e^{-j2\pi k(\ell N_0+r)/N} |
| 681 | +\]</span></p> |
| 682 | + <p>如果 \(x[n]\) 以 \(N_0\) 为周期,则 \(x[\ell N_0+r]=x[r]\),因此:</p> |
| 683 | + <p><span class="math display">\[ |
| 684 | +X[k]= |
| 685 | +\sum_{\ell=0}^{L-1}\sum_{r=0}^{N_0-1} |
| 686 | +x[r]e^{-j2\pi k(\ell N_0+r)/N} |
| 687 | +\]</span></p> |
| 688 | + <p>把指数项拆开,就得到正文中的周期内结构项和周期间相位项。</p> |
| 689 | + |
| 690 | + <h3>10.6 等比级数为什么结果是 \(L\) 或 0?</h3> |
| 691 | + <blockquote> |
| 692 | + <p><strong>问:</strong>\(\sum_{\ell=0}^{L-1}e^{-j2\pi k\ell/L}\) 这段等比级数的结果怎么算?</p> |
| 693 | + </blockquote> |
| 694 | + <p><strong>答:</strong>令:</p> |
| 695 | + <p><span class="math display">\[ |
| 696 | +q=e^{-j2\pi k/L} |
| 697 | +\]</span></p> |
| 698 | + <p>则该和式是:</p> |
| 699 | + <p><span class="math display">\[ |
| 700 | +S=1+q+q^2+\cdots+q^{L-1} |
| 701 | +\]</span></p> |
| 702 | + <p>若 \(q\ne1\),等比级数求和公式给出:</p> |
| 703 | + <p><span class="math display">\[ |
| 704 | +S=\frac{1-q^L}{1-q} |
| 705 | +\]</span></p> |
| 706 | + <p>又因为 \(k\) 是整数:</p> |
| 707 | + <p><span class="math display">\[ |
| 708 | +q^L=e^{-j2\pi k}=1 |
| 709 | +\]</span></p> |
| 710 | + <p>所以 \(S=0\)。特殊情况是 \(q=1\),也就是 \(e^{-j2\pi k/L}=1\),等价于 \(k\) 是 \(L\) 的整数倍。此时每一项都是 1,一共 \(L\) 项,所以 \(S=L\)。最终:</p> |
| 711 | + <p><span class="math display">\[ |
| 712 | +\sum_{\ell=0}^{L-1}e^{-j2\pi k\ell/L} |
| 713 | += |
| 714 | +\begin{cases} |
| 715 | +L,& k\equiv0\pmod L\\ |
| 716 | +0,& \text{otherwise} |
| 717 | +\end{cases} |
| 718 | +\]</span></p> |
| 719 | + <p>直观上,若 \(k\) 是 \(L\) 的整数倍,各周期相位完全对齐;否则这些复指数点均匀绕单位圆分布,矢量和为 0。</p> |
| 720 | + |
| 721 | + <h3>10.7 频点和周期结构“不匹配”是什么意思?</h3> |
| 722 | + <blockquote> |
| 723 | + <p><strong>问:</strong>当频点和周期结构不匹配时,是否意味着此时的频点不是周期的整数倍?</p> |
| 724 | + </blockquote> |
| 725 | + <p><strong>答:</strong>更准确的说法是:频率 \(f_k\) 是否是周期重复基频 \(f_0=1/T_0\) 的整数倍。不能直接说“频点是周期的整数倍”,因为频率单位是 Hz,周期单位是 s。</p> |
| 726 | + <p>FFT 的第 \(k\) 个频点为:</p> |
| 727 | + <p><span class="math display">\[ |
| 728 | +f_k=\frac{kF_s}{N} |
| 729 | +\]</span></p> |
| 730 | + <p>周期结构的基频为:</p> |
| 731 | + <p><span class="math display">\[ |
| 732 | +f_0=\frac{F_s}{N_0} |
| 733 | +\]</span></p> |
| 734 | + <p>如果 \(f_k=mf_0\),代入 \(N=LN_0\):</p> |
| 735 | + <p><span class="math display">\[ |
| 736 | +\frac{kF_s}{LN_0}=m\frac{F_s}{N_0} |
| 737 | +\]</span></p> |
| 738 | + <p>可得:</p> |
| 739 | + <p><span class="math display">\[ |
| 740 | +k=mL |
| 741 | +\]</span></p> |
| 742 | + <p>所以匹配条件是 \(k\) 为 \(L\) 的整数倍,或等价地说 \(f_k\) 落在周期信号允许的离散谱线 \(mf_0\) 上。不匹配时,相邻周期之间相位不完全对齐,多周期求和会相互抵消。</p> |
| 743 | + |
| 744 | + <h3>10.8 \(k\) 和 \(L\) 分别代表什么?</h3> |
| 745 | + <blockquote> |
| 746 | + <p><strong>问:</strong>\(k\) 和 \(L\) 的意义是什么?</p> |
| 747 | + </blockquote> |
| 748 | + <p><strong>答:</strong>在 \(N=LN_0\) 中:</p> |
| 749 | + <div class="formula-table"> |
| 750 | + <table> |
| 751 | + <thead> |
| 752 | + <tr> |
| 753 | + <th>符号</th> |
| 754 | + <th>含义</th> |
| 755 | + </tr> |
| 756 | + </thead> |
| 757 | + <tbody> |
| 758 | + <tr> |
| 759 | + <td>\(N_0\)</td> |
| 760 | + <td>一个周期有多少个采样点。</td> |
| 761 | + </tr> |
| 762 | + <tr> |
| 763 | + <td>\(L\)</td> |
| 764 | + <td>总共截取了多少个周期。</td> |
| 765 | + </tr> |
| 766 | + <tr> |
| 767 | + <td>\(N\)</td> |
| 768 | + <td>总采样点数,\(N=LN_0\)。</td> |
| 769 | + </tr> |
| 770 | + <tr> |
| 771 | + <td>\(k\)</td> |
| 772 | + <td>FFT 的频点编号,取 \(0,1,\ldots,N-1\)。</td> |
| 773 | + </tr> |
| 774 | + </tbody> |
| 775 | + </table> |
| 776 | + </div> |
| 777 | + <p>第 \(k\) 个频点对应频率:</p> |
| 778 | + <p><span class="math display">\[ |
| 779 | +f_k=\frac{kF_s}{N} |
| 780 | +\]</span></p> |
| 781 | + <p>以 40 ms C/A 码仿真为例,C/A 码周期是 1 ms,因此截取了 \(L=40\) 个周期。只考虑严格 1 ms 周期重复结构时,\(k=0,40,80,\ldots\) 这些频点与周期结构匹配;其他频点则容易发生周期间相消。</p> |
| 782 | + |
| 783 | + <h3>10.9 本次笔记整理与网页发布记录</h3> |
| 784 | + <blockquote> |
| 785 | + <p><strong>问:</strong>帮我整理这个对话的所有内容写一篇笔记发布到 SHENAO1.github.io 的个人笔记仓库内,重新组织语言顺序和逻辑,使得笔记通顺。</p> |
| 786 | + </blockquote> |
| 787 | + <p><strong>答:</strong>笔记被整理为当前页面,放在 <code>notes/signal/bpsk-r-sampling-spectrum-windowing/</code>,并在 Signal 专题索引中增加入口。正文采用“信号生成流程、采样索引、频谱公式、窗函数卷积、周期 FFT 零点、MATLAB 绘图实践”的顺序,而不是按聊天时间线直接堆叠。</p> |
| 788 | + <blockquote> |
| 789 | + <p><strong>问:</strong>发布到网页端。</p> |
| 790 | + </blockquote> |
| 791 | + <p><strong>答:</strong>页面已推送到 GitHub Pages,对应在线地址为 <a href="https://shenao1.github.io/notes/signal/bpsk-r-sampling-spectrum-windowing/">https://shenao1.github.io/notes/signal/bpsk-r-sampling-spectrum-windowing/</a>。后续补充内容也通过同一流程提交并推送,由 GitHub Pages 自动部署到网页端。</p> |
| 792 | + </section> |
584 | 793 | </section> |
585 | 794 | </div> |
586 | 795 | </article> |
|
0 commit comments