Skip to content

Commit 715afe5

Browse files
committed
补充 BPSK-R 笔记侧边问答
1 parent 6d9abeb commit 715afe5

1 file changed

Lines changed: 210 additions & 1 deletion

File tree

  • notes/signal/bpsk-r-sampling-spectrum-windowing

notes/signal/bpsk-r-sampling-spectrum-windowing/index.html

Lines changed: 210 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<meta name="description" content="整理 BPSK-R / GPS C/A 码扩频基带信号仿真中的采样索引、floor+1、C/A 码周期重复、sinc^2 理论功率谱、窗函数卷积、频谱泄漏、周期 FFT 深零点和 MATLAB 绘图实践。">
88
<link rel="stylesheet" href="../../../assets/styles/site.css">
99
<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">
1111
<style>
1212
.bpskr-note .note-intro-copy h1,
1313
.bpskr-note .note-prose section.level1 > h1,
@@ -215,6 +215,7 @@ <h2>目录</h2>
215215
<a class="level-2" href="#periodic-zeros">7. 周期结构与深零点</a>
216216
<a class="level-2" href="#matlab-practice">8. MATLAB 绘图实践</a>
217217
<a class="level-2" href="#summary">9. 一页总结</a>
218+
<a class="level-2" href="#qa-appendix">10. 侧边聊天问答整理</a>
218219
</nav>
219220
</details>
220221
</aside>
@@ -581,6 +582,214 @@ <h2>9. 一页总结</h2>
581582
\]</span></p>
582583
<p>最重要的直觉是:理论 sinc² 给出矩形码片的外层包络;真实 FFT 图还叠加了 C/A 码周期线谱、有限观测窗、零填充频率采样和导航 bit 翻转。看到很深的竖线时,先判断它是 sinc² 包络零点,还是周期重复和有限窗口相消造成的近零点。</p>
583584
</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>
584793
</section>
585794
</div>
586795
</article>

0 commit comments

Comments
 (0)