fix overflow of mathjax equations; merge hexo-related posts

This commit is contained in:
2023-04-15 20:23:54 +08:00
parent 15e8a914aa
commit c01c3b97d8
6 changed files with 317 additions and 267 deletions
+7 -1
View File
@@ -27,8 +27,14 @@ body{
}
}
// 修复不蒜子显示属性被 hexo-helper-live2d 覆盖
#busuanzi_container_site_uv, #busuanzi_container_site_pv, #busuanzi_container_page_pv {
display: inline !important;
}
// solve line overflow of numbered equations
// Ref: https://github.com/mathjax/MathJax/issues/2562
// Ref: https://github.com/mathjax/MathJax/issues/2280
mjx-container.MathJax.CtxtMenu_Attached_0 {
min-width: auto !important;
}
@@ -1,138 +0,0 @@
---
title: Hexo NexT 主题不蒜子相关问题汇总
tags:
- 博客
- Hexo
- Next
categories:
- [Blog, Hexo]
abbrlink: e96c9b26
copyright: true
comments: true
date: 2020-11-27 11:15:21
---
# 什么是不蒜子
[不蒜子](https://busuanzi.ibruce.info/)是 [Bruce](http://ibruce.info/) 开发的一款轻量级的网页计数器,可以将网站访问计数直接显示在网页上。
# 启用不蒜子
NexT 预置了不蒜子提供的网页计数功能。只需要在配置文件中启用即可。
``` yaml next/_config.yml
# Show Views / Visitors of the website / page with busuanzi.
# Get more information on http://ibruce.info/2015/04/04/busuanzi
busuanzi_count:
enable: true # 启用不蒜子
total_visitors: true # 网站总访客数
total_visitors_icon: fa fa-user
total_views: true # 网站总浏览数
total_views_icon: fa fa-eye
post_views: true # 文章浏览数
post_views_icon: fa fa-eye
```
# 不蒜子和 Live2D 冲突的问题 (2020-11-27)
<!-- more -->
> Hexo 版本:5.2.0
>
> NexT 版本:8.0.2
>
> 不蒜子版本: 2.3
## 问题描述
添加 Live2D 前的不蒜子显示情况如下。
![添加 Live2D 前单篇博客的不蒜子显示情况](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-11-27-hexo-next-busuanzi-issues/2020-11-27-hexo-next-busuanzi-issues-010-Live2D-01.png?imageMogr2/thumbnail/!100p|watermark/2/text/QEpvc2ggR2Fv/font/YWhyb25iZC50dGY=/fontsize/14/dissolve/20/gravity/southeast/dx/5/dy/5)
![添加 Live2D 前网站的不蒜子显示情况](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-11-27-hexo-next-busuanzi-issues/2020-11-27-hexo-next-busuanzi-issues-020-Live2D-02.png?imageMogr2/thumbnail/!100p|watermark/2/text/QEpvc2ggR2Fv/font/YWhyb25iZC50dGY=/fontsize/14/dissolve/20/gravity/southeast/dx/5/dy/5)
添加 Live2D 后,不蒜子在页面中不显示。
![添加 Live2D 后单篇博客的不蒜子显示情况](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-11-27-hexo-next-busuanzi-issues/2020-11-27-hexo-next-busuanzi-issues-030-Live2D-03.png?imageMogr2/thumbnail/!100p|watermark/2/text/QEpvc2ggR2Fv/font/YWhyb25iZC50dGY=/fontsize/14/dissolve/20/gravity/southeast/dx/5/dy/5)
![添加 Live2D 后网站的不蒜子显示情况](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-11-27-hexo-next-busuanzi-issues/2020-11-27-hexo-next-busuanzi-issues-040-Live2D-04.png?imageMogr2/thumbnail/!100p|watermark/2/text/QEpvc2ggR2Fv/font/YWhyb25iZC50dGY=/fontsize/14/dissolve/20/gravity/southeast/dx/5/dy/5)
## 问题原因
经查,添加 Live2D 后网页的不蒜子部分源码的 `style` 从 `"display: inline;"` 替换为了 `"display: none;"`。
``` html 不蒜子不正常显示的网页源码
<span class="post-meta-item" title="阅读次数" id="busuanzi_container_page_pv" style="display: none;">
<span class="post-meta-item-icon">
<i class="fa fa-eye"></i>
</span>
<span class="post-meta-item-text"> 阅读次数:</span>
<span id="busuanzi_value_page_pv">19</span>
</span>
```
``` html 不蒜子正常显示的网页源码
<span class="post-meta-item" title="阅读次数" id="busuanzi_container_page_pv" style="display: inline;">
<span class="post-meta-item-icon">
<i class="fa fa-eye"></i>
</span>
<span class="post-meta-item-text"> 阅读次数:</span>
<span id="busuanzi_value_page_pv">18</span>
</span>
```
## 解决方法
在网页生成引擎中修改代码,去掉不蒜子部分的 `id` 和 `style` 属性,重新生成网页即可解决该问题。若将 `class` 属性一并删除,会导不蒜子部分和前面的其他显示部分缺少分隔符,如下图。
![ ](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-11-27-hexo-next-busuanzi-issues/2020-11-27-hexo-next-busuanzi-issues-050-Delimeter-01.png?imageMogr2/thumbnail/!100p|watermark/2/text/QEpvc2ggR2Fv/font/YWhyb25iZC50dGY=/fontsize/14/dissolve/20/gravity/southeast/dx/5/dy/5)
具体需要修改两个文件,`next/layout/_third-party/statistics/busuanzi-counter.swig` 中修改的是网页页脚部分的不蒜子显示,`next/layout/_macro/post.swig` 中修改的博客文章阅览数的不蒜子显示。
``` html next/layout/_third-party/statistics/busuanzi-counter.swig
{%- if theme.busuanzi_count.total_visitors %}
<span class="post-meta-item" id="busuanzi_container_site_uv" style="display: inline;">
<!-- ... -->
</span>
{%- endif %}
<!-- ... -->
{%- if theme.busuanzi_count.total_views %}
<span class="post-meta-item" id="busuanzi_container_site_pv" style="display: inline;">
<!-- ... -->
</span>
{%- endif %}
```
``` html next/layout/_macro/post.swig
{%- if not is_index and theme.busuanzi_count.enable and theme.busuanzi_count.post_views %}
<span class="post-meta-item" title="{{ __('post.views') }}" id="busuanzi_container_page_pv" style="display: inline;">
<!-- ... -->
</span>
{%- endif %}
```
# 不蒜子和 Live2D 冲突的问题 (2023-04-08)
> Hexo 版本:6.3.0
>
> NexT 版本:8.15.1
>
> 不蒜子版本: 2.3
重新捣鼓博客的时候发现不蒜子又不显示了,依然已经不维护的 `hexo-helper-live2d` 插件导致的。2020 年的方法写的模棱两可,NexT 的一些网页架构也有了细微改变,因此将新的解决方法附于下方。很多方法是通过直接修改 NexT 主题下的源文件实现的,但是 NexT 并不推荐这样的写法,因为主题目录下的文件是会随着主题更新而被覆盖的,而且不便于使用 Git 管理。经过寻找,在 NexT 的 Github Issues 中找到了优雅的解决方法。
在 `source/_data/styles.styl` 中添加如下代码即可解决。
``` styl source/_data/styles.styl
#busuanzi_container_site_uv, #busuanzi_container_site_pv, #busuanzi_container_page_pv {
display: inline !important;
}
```
> REF:
>
> 1. 上述解决方法来源:[【必读】更新说明及常见问题](https://github.com/next-theme/hexo-theme-next/issues/4#issuecomment-690864794)
>
> 2. 这篇文章分析了 `hexo-helper-live2d` 插件导致不蒜子不显示的根本原因:[busuanzi 访问量统计与 live2d 插件同时使用导致 busuanzi 不显示的根本原因以及解决方法](https://ouuan.moe/post/2022/08/busuanzi-and-live2d)
+255 -13
View File
@@ -4,6 +4,8 @@ tags:
- 博客
- Hexo
- Next
- 不蒜子
- Tag Cloud
categories:
- - Blog
- Hexo
@@ -12,19 +14,112 @@ abbrlink: b158f1b4
date: 2020-11-28 01:27:30
---
# 主题安装
# 瞎折腾/~~美化~~侧边栏
NexT 官方提供了两种安装主题的方式,一种是使用将主题作为 node.js 的 Package,直接使用 `npm install` 命令进行安装,另一种是将主题 `git clone` 到 `<path-to-blog>/theme.next` 目录下。
在博客根目录下的 `source/_data` 文件夹中新建 `sidebar.swig` 文件。
这里更推荐将 NexT 主题作为 node.js 的 Package 进行安装,可以让整个博客文件夹更加紧凑,也方便使用 `npm` 管理版本。安装最新 Release 版 NexT 主题的命令如下:
``` bash
npm install hexo-theme-next@latest
```
安装完成后在 Hexo 的配置中将主题切换为 `next` 即可,即
``` diff _config.yml
- theme: landscape
+ theme: next
```
<!-- more -->
# 环境依赖
> 更新于 2023 年 4 月 15 日
| Package 名称 | 版本 |
| :--------------------------: | :------: |
| `hexo` | `6.3.0` |
| `hexo-abbrlink` | `2.2.1` |
| `hexo-deployer-git` | `4.0.0` |
| `hexo-filter-github-emojis` | `3.0.5` |
| `hexo-generator-archive` | `2.0.0` |
| `hexo-generator-category` | `2.0.0` |
| `hexo-generator-index` | `3.0.0` |
| `hexo-generator-searchdb` | `1.4.1` |
| `hexo-generator-sitemap` | `3.0.1` |
| `hexo-generator-tag` | `2.0.0` |
| `hexo-helper-live2d` | `3.1.1` |
| `hexo-neat` | `1.0.9` |
| `hexo-related-popular-posts` | `5.0.1` |
| `hexo-related-posts` | `1.5.1` |
| `hexo-renderer-ejs` | `2.0.0` |
| `hexo-renderer-pandoc` | `0.3.1` |
| `hexo-renderer-stylus` | `2.1.0` |
| `hexo-server` | `3.0.0` |
| `hexo-tag-cloud` | `2.1.*` |
| `hexo-theme-landscape` | `0.0.3` |
| `hexo-theme-next` | `8.15.1` |
| `hexo-word-counter` | `0.1.0` |
# 侧边栏
## 新建侧边栏配置文件
> 由于 NexT 8.0.0 版本后将 `.swig` 模板换成了 `.njk` 模板,因此不同版本需要额外区分。
{% tabs New Sidebar Config %}
<!-- tab NexT 8.0.0 版本及以上-->
在博客根目录下的 `source/_data` 文件夹中新建 `sidebar.njk` 文件,并在 NexT 主题配置中启用文件。
``` diff _config.next.yml
custom_file_path:
- #sidebar: source/_data/sidebar.njk
+ sidebar: source/_data/sidebar.njk
```
<!-- endtab -->
<!-- tab NexT 8.0.0 版本以下-->
在博客根目录下的 `source/_data` 文件夹中新建 `sidebar.swig` 文件,并在 NexT 主题配置中启用文件。
``` diff _config.next.yml
custom_file_path:
- #sidebar: source/_data/sidebar.swig
+ sidebar: source/_data/sidebar.swig
```
<!-- endtab -->
{% endtabs %}
## 添加 Tag Cloud
安装 `hexo-tag-cloud` 插件。
首先安装 [`hexo-tag-cloud`](https://github.com/D0n9X1n/hexo-tag-cloud) 插件。
``` shell
npm install hexo-tag-cloud --save
```
{% tabs Sidebar tag cloud %}
<!-- tab NexT 8.0.0 版本及以上-->
添加相关代码写入 `sidebar.njk`。不喜欢标题的把 `<h3 class="widget-title">Tag Cloud</h3>` 去掉即可。
``` html source/_data/sidebar.njk
{% if site.tags.length > 1 %}
<script type="text/javascript" charset="utf-8" src="/js/tagcloud.js"></script>
<script type="text/javascript" charset="utf-8" src="/js/tagcanvas.js"></script>
<div class="widget-wrap">
<h3 class="widget-title">Tag Cloud</h3>
<div id="myCanvasContainer" class="widget tagcloud" style="font-size:20px;">
<canvas width="220" height="200" id="resCanvas" style="width=100%">
{{ list_tags() }}
</canvas>
</div>
</div>
{% endif %}
```
<!-- endtab -->
<!-- tab NexT 8.0.0 版本以下-->
添加相关代码写入 `sidebar.swig`。不喜欢标题的把 `<h3 class="widget-title">Tag Cloud</h3>` 去掉即可。
``` html source/_data/sidebar.swig
@@ -41,26 +136,22 @@ npm install hexo-tag-cloud --save
</div>
{% endif %}
```
<!-- endtab -->
<!-- more -->
{% endtabs %}
# 瞎折腾/~~美化~~页面
# 页面
在博客根目录下的 `source/_data` 文件夹中新建 `variables.styl` 文件。
``` shell
cd hexo
vi source/_data/variables.styl
```
## 页面圆角
在 `variables.styl` 文件里添加圆角半径值
``` stylus source/_data/variables.styl
// 圆角设置
$border-radius-inner = 0px; // 内部圆角半径
$border-radius = 8px; // 外部圆角半径
$border-radius-inner = 10px;
$border-radius = 10px;
```
# 需要修改源代码的操作
@@ -91,7 +182,158 @@ initSidebarDimension: function() {
},
```
- 参考文档:[Hexo Next 博客自定义配置 -> 更改-sidebar-大小](https://yi-yun.github.io/Hexo-Next-Custom/#更改-sidebar-大小https://yi-yun.github.io/Hexo-Next-Custom/#更改-sidebar-大小)
- 参考文档:[Hexo Next 博客自定义配置 -> 更改-sidebar-大小](https://yi-yun.github.io/Hexo-Next-Custom/#更改-sidebar-大小)
# 数学公式
## MathJax 渲染带编号公式导致行溢出的问题
在移植博客的时候发现,带编号的长公式(如 `equation` 和 `align` 环境)在窄屏幕上(如手机)显示时会出现行溢出的问题,通过 Google Chrome 检查了一番发现,`mjx-container` 在渲染后会多出 `min-width` 属性,且每个公式的 `min-width` 不同,导致 `overflow` 无法触发,因为 `min-width` 和公式宽度是相等的,不会存在 Overflow 的情况。
``` css
element.style {
font-size: 121.3%;
min-width: 35.348em;
position: relative;
}
```
MathJax 的 [Github Issue](https://github.com/mathjax/MathJax/issues/2280) 中也出现了类似讨论,官方将这种行为解释为“为了避免公式和编号重叠”而做出的选择。然而实际操作中发现,在 Google Chrome 检查页面中,将 `min-width` 手动修改为 `0` 后,可以正常触发 Overflow,并生成水平方向的 Scroll Bar,且公式和编号没有重叠。
因此突发奇想,能不能指定 `!important` 属性,将生成的 `min-width` 强行覆盖掉呢?于是做了如下尝试:
``` stylus source/_data/styles.styl
mjx-container.MathJax.CtxtMenu_Attached_0 {
min-width: auto !important;
}
```
然后带编号的公式就可以正常显示 Scroll Bar 了!
# 不蒜子
## 什么是不蒜子
[不蒜子](https://busuanzi.ibruce.info/)是 [Bruce](http://ibruce.info/) 开发的一款轻量级的网页计数器,可以将网站访问计数直接显示在网页上。
## 启用不蒜子
NexT 预置了不蒜子提供的网页计数功能。只需要在配置文件中启用即可。
``` yaml next/_config.yml
# Show Views / Visitors of the website / page with busuanzi.
# Get more information on http://ibruce.info/2015/04/04/busuanzi
busuanzi_count:
enable: true # 启用不蒜子
total_visitors: true # 网站总访客数
total_visitors_icon: fa fa-user
total_views: true # 网站总浏览数
total_views_icon: fa fa-eye
post_views: true # 文章浏览数
post_views_icon: fa fa-eye
```
## 不蒜子和 Live2D 冲突的问题 (2020-11-27)
> Hexo 版本:5.2.0
>
> NexT 版本:8.0.2
>
> 不蒜子版本: 2.3
### 问题描述
添加 Live2D 前的不蒜子显示情况如下。
![添加 Live2D 前单篇博客的不蒜子显示情况](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-11-27-hexo-next-busuanzi-issues/2020-11-27-hexo-next-busuanzi-issues-010-Live2D-01.png?imageMogr2/thumbnail/!100p|watermark/2/text/QEpvc2ggR2Fv/font/YWhyb25iZC50dGY=/fontsize/14/dissolve/20/gravity/southeast/dx/5/dy/5)
![添加 Live2D 前网站的不蒜子显示情况](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-11-27-hexo-next-busuanzi-issues/2020-11-27-hexo-next-busuanzi-issues-020-Live2D-02.png?imageMogr2/thumbnail/!100p|watermark/2/text/QEpvc2ggR2Fv/font/YWhyb25iZC50dGY=/fontsize/14/dissolve/20/gravity/southeast/dx/5/dy/5)
添加 Live2D 后,不蒜子在页面中不显示。
![添加 Live2D 后单篇博客的不蒜子显示情况](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-11-27-hexo-next-busuanzi-issues/2020-11-27-hexo-next-busuanzi-issues-030-Live2D-03.png?imageMogr2/thumbnail/!100p|watermark/2/text/QEpvc2ggR2Fv/font/YWhyb25iZC50dGY=/fontsize/14/dissolve/20/gravity/southeast/dx/5/dy/5)
![添加 Live2D 后网站的不蒜子显示情况](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-11-27-hexo-next-busuanzi-issues/2020-11-27-hexo-next-busuanzi-issues-040-Live2D-04.png?imageMogr2/thumbnail/!100p|watermark/2/text/QEpvc2ggR2Fv/font/YWhyb25iZC50dGY=/fontsize/14/dissolve/20/gravity/southeast/dx/5/dy/5)
### 问题原因
经查,添加 Live2D 后网页的不蒜子部分源码的 `style` 从 `"display: inline;"` 替换为了 `"display: none;"`。
``` html 不蒜子不正常显示的网页源码
<span class="post-meta-item" title="阅读次数" id="busuanzi_container_page_pv" style="display: none;">
<span class="post-meta-item-icon">
<i class="fa fa-eye"></i>
</span>
<span class="post-meta-item-text"> 阅读次数:</span>
<span id="busuanzi_value_page_pv">19</span>
</span>
```
``` html 不蒜子正常显示的网页源码
<span class="post-meta-item" title="阅读次数" id="busuanzi_container_page_pv" style="display: inline;">
<span class="post-meta-item-icon">
<i class="fa fa-eye"></i>
</span>
<span class="post-meta-item-text"> 阅读次数:</span>
<span id="busuanzi_value_page_pv">18</span>
</span>
```
### 解决方法
在网页生成引擎中修改代码,去掉不蒜子部分的 `id` 和 `style` 属性,重新生成网页即可解决该问题。若将 `class` 属性一并删除,会导不蒜子部分和前面的其他显示部分缺少分隔符,如下图。
![ ](https://josh-blog-1257563604.cos.ap-beijing.myqcloud.com/img/2020-11-27-hexo-next-busuanzi-issues/2020-11-27-hexo-next-busuanzi-issues-050-Delimeter-01.png?imageMogr2/thumbnail/!100p|watermark/2/text/QEpvc2ggR2Fv/font/YWhyb25iZC50dGY=/fontsize/14/dissolve/20/gravity/southeast/dx/5/dy/5)
具体需要修改两个文件,`next/layout/_third-party/statistics/busuanzi-counter.swig` 中修改的是网页页脚部分的不蒜子显示,`next/layout/_macro/post.swig` 中修改的博客文章阅览数的不蒜子显示。
``` html next/layout/_third-party/statistics/busuanzi-counter.swig
{%- if theme.busuanzi_count.total_visitors %}
<span class="post-meta-item" id="busuanzi_container_site_uv" style="display: inline;">
<!-- ... -->
</span>
{%- endif %}
<!-- ... -->
{%- if theme.busuanzi_count.total_views %}
<span class="post-meta-item" id="busuanzi_container_site_pv" style="display: inline;">
<!-- ... -->
</span>
{%- endif %}
```
``` html next/layout/_macro/post.swig
{%- if not is_index and theme.busuanzi_count.enable and theme.busuanzi_count.post_views %}
<span class="post-meta-item" title="{{ __('post.views') }}" id="busuanzi_container_page_pv" style="display: inline;">
<!-- ... -->
</span>
{%- endif %}
```
## 不蒜子和 Live2D 冲突的问题 (2023-04-08)
> Hexo 版本:6.3.0
>
> NexT 版本:8.15.1
>
> 不蒜子版本: 2.3
重新捣鼓博客的时候发现不蒜子又不显示了,依然已经不维护的 `hexo-helper-live2d` 插件导致的。2020 年的方法写的模棱两可,NexT 的一些网页架构也有了细微改变,因此将新的解决方法附于下方。很多方法是通过直接修改 NexT 主题下的源文件实现的,但是 NexT 并不推荐这样的写法,因为主题目录下的文件是会随着主题更新而被覆盖的,而且不便于使用 Git 管理。经过寻找,在 NexT 的 Github Issues 中找到了优雅的解决方法。
在 `source/_data/styles.styl` 中添加如下代码即可解决。
``` styl source/_data/styles.styl
#busuanzi_container_site_uv, #busuanzi_container_site_pv, #busuanzi_container_page_pv {
display: inline !important;
}
```
> REF:
>
> 1. 上述解决方法来源:[【必读】更新说明及常见问题](https://github.com/next-theme/hexo-theme-next/issues/4#issuecomment-690864794)
>
> 2. 这篇文章分析了 `hexo-helper-live2d` 插件导致不蒜子不显示的根本原因:[busuanzi 访问量统计与 live2d 插件同时使用导致 busuanzi 不显示的根本原因以及解决方法](https://ouuan.moe/post/2022/08/busuanzi-and-live2d)
# 重装系统后配置 Hexo-Next
+10 -20
View File
@@ -66,12 +66,10 @@ p_\delta\left(t\right)=\sum_{n=-\infty}^{\infty}\delta\left(t-nT\right)=\frac{1}
&emsp;&emsp;理想取样信号 $\hat{x}\left(t\right)$ 的傅里叶变换(取样角频率 $\Omega_s=\dfrac{2\pi}{T}$)
$$\begin{equation}
\begin{aligned}
$$\begin{align}
\hat{X}\left(j\Omega\right)&=\int_{-\infty}^{\infty}{\hat{x}\left(t\right)e^{-j\Omega t}\mathrm{d}t}=\int_{-\infty}^{\infty}{x_a\left(t\right)p_\delta\left(t\right)e^{-j\Omega t}\mathrm{d}t}\\
&=\frac{1}{T}\int_{-\infty}^{\infty}{x_a\left(t\right)\sum_{m=-\infty}^{\infty}{e^{jm\Omega_st}e^{-j\Omega t}}\mathrm{d}t}=\frac{1}{T}\sum_{m=-\infty}^{\infty}\int_{-\infty}^{\infty}{x_a\left(t\right)e^{-j\left(\Omega-m\Omega_s\right)t}\mathrm{d}t}
\end{aligned}
\end{equation}$$
\end{align}$$
与连续时间信号 $x_a\left(t\right)$ 的傅里叶变换对比
@@ -90,24 +88,20 @@ $$\begin{equation}
&emsp;&emsp;设有输入连续时间信号 $x_a\left(t\right)$,取样信号 $\hat{x}\left(t\right)$,幅度为 $1$ 重复周期为 $T$ 宽度为 $\tau$ 的周期取样脉冲 $p\left(t\right)$。取样脉冲的傅里叶变换[^3]为
$$\begin{equation}
\begin{aligned}
$$\begin{align}
p\left( t \right) =\begin{cases}
1,&0<\left| t \right|<\dfrac{\tau}{2}\\
0,&\dfrac{\tau}{2}<\left| t \right|<\dfrac{T}{2}\\
\end{cases}
且p\left(t+T\right)=p\left(t\right) \xleftrightarrow{\text{Fourier Transform}} P\left(j\Omega\right)=\sum_{m=-\infty}^{\infty}\frac{2\sin{\left(\dfrac{m\pi\tau}{T}\right)}}{m}\delta\left(\Omega-\frac{2\pi}{T}\right)
\end{aligned}
\end{equation}$$
\end{align}$$
则取样信号 $\hat{x}\left(t\right)$ 的频谱
$$\begin{equation}
\begin{aligned}
$$\begin{align}
\hat{X}\left(j\Omega\right)&=\dfrac{1}{2\pi}X_a\left(j\Omega\right)\ast P\left(j\Omega\right)=\dfrac{1}{2\pi}\sum_{m=-\infty}^{\infty}\dfrac{2\sin{\left(\dfrac{m\pi\tau}{T}\right)}}{m}X_a\left[j\left(\Omega-m\frac{2\pi}{T}\right)\right]\\
&=\frac{\tau}{T}\sum_{m=-\infty}^{\infty}Sa\left(\frac{m\pi\tau}{T}\right)X_a\left[j\left(\Omega-m\frac{2\pi}{T}\right)\right]
\end{aligned}
\end{equation}$$
\end{align}$$
其中
@@ -143,13 +137,11 @@ h_a\left( t \right) =\frac{1}{2\pi}\int_{-\infty}^{\infty}{H\left( j\Omega \righ
则由时域卷积定理[^5]
$$\begin{equation}
\begin{aligned}
$$\begin{align}
y\left(t\right)&=\hat{x}\left(t\right)\ast h_a\left(t\right)=\int_{-\infty}^{\infty}{\hat{x}\left(t\right)h_a\left(t-\tau\right)d\tau}=\int_{-\infty}^{\infty}{\left[\sum_{n=-\infty}^{\infty}{x_a\left(\tau\right)\delta\left(\tau-nT\right)}\right]h_a\left(t-\tau\right)d\tau}\\
&=\sum_{n=-\infty}^{\infty}\int_{-\infty}^{\infty}{x_a\left(\tau\right)h_a\left(t-\tau\right)\delta\left(\tau-nT\right)d\tau}=\sum_{n=-\infty}^{\infty}{x_a\left(nT\right)h_a\left(t-nT\right)}\\
&=\sum_{n=-\infty}^{\infty}{x_a\left(nT\right)\dfrac{\sin{\dfrac{\pi}{T}\left(t-nT\right)}}{\dfrac{\pi}{T}\left(t-nT\right)}=x_a\left(t\right)}
\end{aligned}
\end{equation}$$
\end{align}$$
其中内插函数
@@ -209,12 +201,10 @@ x\left(n\right)=\sum_{k=-\infty}^{\infty}x\left(k\right)\delta\left(n-k\right)
由此,线性时不变系统的输出可表示为
$$\begin{equation}
\begin{aligned}
$$\begin{align}
y\left(n\right)&=T\left[x\left(n\right)\right]=T\left[\sum_{k=-\infty}^{\infty}x\left(k\right)\delta\left(n-k\right)\right]\\
&\xlongequal{\text{叠加性、均匀性}}\sum_{k=-\infty}^{\infty}{x\left( k \right)}T\left[ \delta \left( n-k \right) \right] \xlongequal{\text{非时变性}}\sum_{k=-\infty}^{\infty}{x\left( k \right)}\text{h}\left( n-k \right)
\end{aligned}
\end{equation}$$
\end{align}$$
故任何离散时间线性时不变系统,可以通过其单位取样响应 $h\left(n\right)$ 来**完全表征**。
+23 -51
View File
@@ -49,7 +49,7 @@ x\left(n\right)=\widetilde{x}\left(n\right)R_N\left(n\right)=\frac{1}{N}\sum_{k=
# 2. DFT 的矩阵算法
&emsp;&emsp;若令 $X=\left[\begin{matrix}X\left(0\right)&X\left(1\right)&\cdots&X\left(N-1\right)\\\end{matrix}\right]^\mathrm{T},x=\left[\begin{matrix}x\left(0\right)&x\left(1\right)&\cdots&x\left(N-1\right)\\\end{matrix}\right]^\mathrm{T}$,则 DFT 和 IDFT 可分别表示为
&emsp;&emsp;若令 $X=\left[\begin{matrix}X\left(0\right),X\left(1\right),\cdots,X\left(N-1\right)\\\end{matrix}\right]^\mathrm{T}$,$x=\left[\begin{matrix}x\left(0\right),x\left(1\right),\cdots,x\left(N-1\right)\\\end{matrix}\right]^\mathrm{T}$,则 DFT 和 IDFT 可分别表示为
$$\begin{equation}
X=D_Nx,\ \ x=D_N^{-1}X
@@ -95,13 +95,11 @@ $$\begin{equation}
证明:
$$\begin{equation}
\begin{aligned}
$$\begin{align}
&x\left(-n\right)=x\left(N-n\right)=\frac{1}{N}\sum_{k=0}^{N-1}{X\left(k\right)W_N^{-\left(N-n\right)k}}=\frac{1}{N}\sum_{k=0}^{N-1}{X\left(k\right)W_N^{nk}}
\\
\Longrightarrow &x\left(-k\right)=x\left(N-k\right)=\sum_{n=0}^{N-1}{\left[\frac{X\left(n\right)}{N}\right]W_N^{kn}}=\mathrm{DFT}\left[\frac{X\left(n\right)}{N}\right]
\end{aligned}
\end{equation}$$
\end{align}$$
## 3.4 反转定理
@@ -133,23 +131,19 @@ x\left(0\right)=\frac{1}{N}\left.\sum_{k=0}^{N-1}{X\left(k\right)W_N^{-kn}}\righ
$$\begin{equation}
g\left(n\right)=
\begin{aligned}
\begin{cases}
x(n),&n=0,1,⋯,N-1\\
0,&n=N,N+1,⋯rN-1
\end{cases}
\end{aligned}
\end{equation}$$
则 $g\left(n\right)$ 的 DFT
$$\begin{equation}
\begin{aligned}
$$\begin{align}
G\left(k\right)&=\mathrm{DFT}\left[g\left(n\right)\right]=\sum_{n=0}^{rN-1}{g\left(n\right)e^{-j\frac{2\pi nk}{rN}}}=\sum_{n=0}^{N-1}{g\left(n\right)e^{-j\frac{2\pi n\left(\frac{k}{r}\right)}{N}}}
\\
&=X\left(\frac{k}{r}\right),\ \ k=0,1,\cdots,rN-1\
\end{aligned}
\end{equation}$$
\end{align}$$
由此,**$G\left(k\right)$ 与 $X\left(k\right )$具有相同的形状,但 $G\left(k\right)$ 的频谱间隔比 $X\left(k\right)$ 的小。即 {% label primary @通过补零,频谱变得更加细致。但是补零不能提高频谱分辨能力。%}**
@@ -159,26 +153,22 @@ G\left(k\right)&=\mathrm{DFT}\left[g\left(n\right)\right]=\sum_{n=0}^{rN-1}{g\le
$$\begin{equation}
x\left(\left(n-m\right)\right)_NR_N\left(n\right)=
\begin{aligned}
\begin{cases}
x\left(n-m\right),&m\leqslant n\leqslant N-1
\\
x\left(N-m+n\right),&0\leqslant n\leqslant m
\end{cases}
\end{aligned}
\end{equation}$$
### 3.8.2 圆周反转(周期化→反转→取主值)
$$\begin{equation}
x\left(\left(-n\right)\right)_NR_N\left(n\right)=
\begin{aligned}
\begin{cases}
x\left(0\right),&n=0
\\
x\left(N-n\right),&1\leqslant n\leqslant N-1
\end{cases}
\end{aligned}
\end{equation}$$
### 3.8.3 有限长序列的时间圆周移位定理(可以通过 DFS 证明)
@@ -263,13 +253,11 @@ $$\begin{equation}
\mathrm{DFT}\left[x^\ast\left(n\right)\right]=\sum_{n=0}^{N-1}{x^\ast\left(n\right)W_N^{kn}}=\left[\sum_{n=0}^{N-1}{x\left(n\right)W_N^{-kn}}\right]^\ast=X^\ast\left(-k\right)=X^\ast\left(\left(N-k\right)\right)_N
\end{equation}$$
$$\begin{equation}
\begin{aligned}
$$\begin{align}
\mathrm{DFT}\left[x^\ast\left(-n\right)\right]&=\sum_{n=0}^{N-1}{x^\ast\left(-n\right)W_N^{kn}}=\left[\sum_{n=0}^{N-1}{x\left(-n\right)W_N^{-kn}}\right]^\ast
\\
&=\left[\sum_{m=-N+1}^{0}{x\left(m\right)W_N^{km}}\right]^\ast=\left[\sum_{n=0}^{N-1}{x\left(n\right)W_N^{kn}}\right]^\ast=X^\ast\left(k\right)
\end{aligned}
\end{equation}$$
\end{align}$$
<a id=3.8.5.4></a>
@@ -326,23 +314,19 @@ X_{op}\left(k\right)=-X_{op}^\ast\left(N-k\right)(实部相反,虚部相等)
#### 3.8.6.1 时域圆周卷积定理
$$\begin{equation}
\begin{aligned}
$$\begin{align}
x\left(n\right)=x_1\left(n\right)\odot x_2\left(n\right)&=\widetilde{y}\left(n\right)=\sum_{m=0}^{N-1}{x_1\left(m\right)\left[x_2\left(\left(n-m\right)\right)_NR_N\left(n\right)\right]}
\\
&=\mathrm{IDFT}\left[X_1\left(k\right)\cdot X_2\left(k\right)\right]
\end{aligned}
\end{equation}$$
\end{align}$$
#### 3.8.6.2 频域圆周卷积定理
$$\begin{equation}
\begin{aligned}
$$\begin{align}
X\left(k\right)=X_1\left(k\right)\odot X_2\left(k\right)&=\widetilde{X}\left(k\right)R_N\left(k\right)=\frac{1}{N}\sum_{l=0}^{N-1}{X_1\left(l\right)\left[X_2\left(\left(k-l\right)\right)_NR_N\left(k\right)\right]}
\\
&=\mathrm{DFT}\left[x_1\left(n\right)\cdot x_2\left(n\right)\right]
\end{aligned}
\end{equation}$$
\end{align}$$
#### 3.8.6.3 圆周卷积和线性卷积的关系
@@ -379,23 +363,19 @@ h\left(n\right)=\left\{1,-2,-3\right\}(0\leqslant n\leqslant2)
&emsp;&emsp;&emsp;将长序列 $x\left(n\right)$ 分段,每段长度为 $5$
$$\begin{equation}
\begin{aligned}
$$\begin{align}
&x_1\left(n\right)=\left\{2,-3,4,5,-6\right\} \\
&x_2\left(n\right)=\left\{7,8,-9,-10,11\right\} \\
&x_3\left(n\right)=\left\{ -12,-13,-14\right\}
\end{aligned}
\end{equation}$$
\end{align}$$
&emsp;&emsp;&emsp;用圆周卷积计算计算各段与 $h\left(n\right)$ 的线性卷积,下划线标注部分是需要重叠相加的部分
$$\begin{equation}
\begin{aligned}
$$\begin{align}
&y_1\left(n\right)=\left\{2,-7,4,6,-28,\underline{-3,18}\right\}\\
&y_2\left(n\right)=\left\{\underline{7,-6},-46,-16,58,\underline{8,-33}\right\}\\
&y_3\left(n\right)=\left\{\underline{-12,11},48,67,42\right\}
\end{aligned}
\end{equation}$$
\end{align}$$
&emsp;&emsp;&emsp;将各段结果重叠相加,连接成线性卷积结果
@@ -407,27 +387,23 @@ y\left(n\right)=\left\{2,-7,4,6,-28,\mathbf{4},\mathbf{12},-46,-16,58,-\mathbf{4
&emsp;&emsp;&emsp;将长序列 $x\left(n\right)$ 分段,每段长度为 $5$
$$\begin{equation}
\begin{aligned}
$$\begin{align}
&x_1\left(n\right)=\left\{\underline{0,0,2},-3,4\right\}\\
&x_2\left(n\right)=\left\{\underline{-3,4},5,-6,7\right\}\\
&x_3\left(n\right)=\left\{\underline{-6,-7},8,-9,-10\right\}\\
&x_4\left(n\right)=\left\{\underline{-9,-10},11,-12,-13\right\}\\
&x_5\left(n\right)=\left\{\underline{-12,-13},-14,0,0\right\}
\end{aligned}
\end{equation}$$
\end{align}$$
&emsp;&emsp;&emsp;用圆周卷积计算计算各段与 $h\left(n\right)$ 的线性卷积,下划线标注部分是需要舍去的部分
$$\begin{equation}
\begin{aligned}
$$\begin{align}
&y_1\left(n\right)=\left\{\underline{1,-12},2,-7,4\right\}\\
&y_2\left(n\right)=\left\{\underline{1,-11},6,28,4\right\}\\
&y_3\left(n\right)=\left\{\underline{41,49},12,-46,-16\right\}\\
&y_4\left(n\right)=\left\{\underline{53,47},58,-4,-22\right\}\\
&y_5\left(n\right)=\left\{\underline{-12,11},48,67,42\right\}
\end{aligned}
\end{equation}$$
\end{align}$$
&emsp;&emsp;&emsp;将各段重叠部分舍去,连接成线性卷积结果
@@ -443,13 +419,11 @@ $$\begin{equation}
## 3.10 DFT 与 $z$ 变换
$$\begin{equation}
\begin{aligned}
$$\begin{align}
X\left(k\right)&=\sum_{n=0}^{N-1}{x\left(n\right)W_N^{nk}}=\sum_{n=0}^{N-1}{x\left(n\right)e^{-j\frac{2\pi}{N}nk}}=\left.\sum_{n=0}^{N-1}{x\left(n\right)z^{-n}}\right|_{z=e^{j\frac{2\pi}{N}k}}
\\
&=\left.X\left(z\right)\right|_{z=e^{j\frac{2\pi}{N}k}}=\left.\sum_{n=0}^{N-1}{x\left(n\right)e^{-j\omega n}}\right|_{\omega=\frac{2\pi}{N}k}\left(k=0,1,\cdots,N-1\right)
\end{aligned}
\end{equation}$$
\end{align}$$
因此 $x\left(n\right)$ 的 DFT 的 $N$ 个系数即为 $x\left(n\right)$ 的 $z$ 变换 $X\left(z\right)$ 在单位圆上 $N$ 等分的取样点。
@@ -475,15 +449,13 @@ N\geqslant M
&emsp;&emsp;用 DFT 表示 ZT
$$\begin{equation}
\begin{aligned}
$$\begin{align}
X\left(z\right)&=\sum_{n=0}^{N-1}{x\left(n\right)z^{-n}}=\sum_{n=0}^{N-1}{\left[\frac{1}{N}\sum_{k=0}^{N-1}{X\left(k\right)W_N^{-nk}}\right]z^{-n}}=\frac{1}{N}\sum_{k=0}^{N-1}\left[X\left(k\right)\sum_{n=0}^{N-1}\left(W_N^{-k}z^{-1}\right)^n\right]
\\
&=\frac{1}{N}\sum_{k=0}^{N-1}{X\left(k\right)\frac{1-W_N^{-kn}z^{-N}}{1-W_N^{-k}z^{-1}}}=\frac{1}{N}\sum_{k=0}^{N-1}{X\left(k\right)\frac{1-z^{-N}}{1-W_N^{-k}z^{-1}}}
\\
&=\frac{1-z^{-N}}{N}\sum_{k=0}^{N-1}\frac{X\left(k\right)}{1-W_N^{-k}z^{-1}}=\sum_{k=0}^{N-1}{X\left(k\right)\varphi_k\left(z\right)}
\end{aligned}
\end{equation}$$
\end{align}$$
其中 $X\left(z\right)$ 的内插公式
+22 -44
View File
@@ -31,13 +31,11 @@ categories:
&emsp;&emsp;考察列长为 $N$ 的序列 $x\left(n\right)$ 的 DFT
$$\begin{equation}
\begin{aligned}
$$\begin{align}
X\left(k\right)&=\sum_{n=0}^{N-1}{x\left(n\right)W_N^{nk}}=\sum_{n=0}^{N-1}\left\{\Re{\left[x\left(n\right)\right]}+j\Im{\left[x\left(n\right)\right]}\right\}\left\{\Re{\left[W_N^{nk}\right]}+j\Im{\left[W_N^{nk}\right]}\right\}
\\
&=\sum_{n=0}^{N-1}{\left\{ \Re \left[ x\left( n \right) \right] \Re \left[ W_{N}^{nk} \right] -\Im \left[ x\left( n \right) \right] \Im \left[ W_{N}^{nk} \right] \right\} +j\left\{ \Re \!\:\left[ x\left( n \right) \right] \Im \!\:\left[ W_{N}^{nk} \right] +\Im \left[ \!\:x\left( n \right) \right] \Re \!\:\left[ W_{N}^{nk} \right] \right\}}
\end{aligned}
\end{equation}$$
\end{align}$$
由此,直接计算 DFT 时,在不忽略 $W_N^0=1$ 等特例时,实数乘法次数为 $4N^2$,实数加法次数为 $2N\left(2N-1\right)$,均与 $N^2$ 成正比,计算量非常庞大。
@@ -88,15 +86,13 @@ x_2\left(r\right)=x\left(2r+1\right)
则序列 DFT 的**前半部分**可表示为
$$\begin{equation}
\begin{aligned}
$$\begin{align}
X\left(k\right)&=\sum_{r=0}^{\frac{N}{2}-1}{x\left(2r\right)W_N^{2rk}}+\sum_{r=0}^{\frac{N}{2}-1}{x\left(2r+1\right)W_N^{\left(2r+1\right)k}}=\sum_{r=0}^{\frac{N}{2}-1}{x_1\left(r\right)W_{\frac{N}{2}}^{rk}}+W_N^k\sum_{r=0}^{\frac{N}{2}-1}{x_2\left(r\right)W_{\frac{N}{2}}^{rk}}
\\
&=\mathrm{DFT}\left[x_1\left(n\right)\right]+W_N^k\mathrm{DFT}\left[x_2\left(n\right)\right]
\\
&=X_1\left(k\right)+W_N^kX_2\left(k\right),\ \ k=0,1,\cdots,\frac{N}{2}-1
\end{aligned}
\end{equation}$$
\end{align}$$
由旋转因子的周期性,即
@@ -106,15 +102,13 @@ W_{\frac{N}{2}}^{rk}=W_{\frac{N}{2}}^{r\left(k+\frac{N}{2}\right)}
可将序列 DFT 的**后半部分**表示为
$$\begin{equation}
\begin{aligned}
$$\begin{align}
X\left(k+\frac{N}{2}\right)&=X_1\left(k+\frac{N}{2}\right)+W_N^{\left(k+\frac{N}{2}\right)}X_2\left(k+\frac{N}{2}\right)
\\
&=X_1\left(k\right)+W_N^{\left(k+\frac{N}{2}\right)}X_2\left(k\right)
\\
&=X_1\left(k\right)-W_N^kX_2\left(k\right),\ \ k=0,1,\cdots,\frac{N}{2}-1
\end{aligned}
\end{equation}$$
\end{align}$$
类似地,可以将分离后的序列继续按奇偶序号分成两个序列计算,**直到每个序列中只含有两个点**。此时开始计算 DFT。这种方法称为**基-2 按时间抽取的 FFT 算法**。
@@ -137,13 +131,11 @@ $$\begin{align}
对于第二级分解
$$\begin{equation}
\begin{aligned}
$$\begin{align}
X_1\left(k\right)&=\sum_{l=0}^{\frac{N}{4}-1}{x_1\left(2l\right)W_{\frac{N}{2}}^{2lk}}+\sum_{l=0}^{\frac{N}{4}-1}{x_1\left(2l+1\right)W_{\frac{N}{2}}^{\left(2l+1\right)k}}
\\
&=\sum_{l=0}^{\frac{N}{4}-1}{x_3\left(l\right)W_{\frac{N}{4}}^{lk}}+W_{\frac{N}{2}}^k\sum_{l=0}^{\frac{N}{4}-1}{x_4\left(l\right)W_{\frac{N}{4}}^{lk}}=X_3\left(k\right)+W_{\frac{N}{2}}^kX_4\left(k\right),\ \ k=0,1,\cdots,\frac{N}{4}-1
\end{aligned}
\end{equation}$$
\end{align}$$
$$\begin{equation}
X_1\left(k+\frac{N}{4}\right)=X_3\left(k\right)-W_{\frac{N}{2}}^kX_4\left(k\right),\ \ k=0,1,\cdots,\frac{N}{4}-1
@@ -157,12 +149,10 @@ X_2\left(k\right)=X_5\left(k\right)+W_{\frac{N}{2}}^kX_6\left(k\right),X_2\left(
对于最后剩下的四个 $\dfrac{N}{4}=2$ 点的 DFT,即 $X_3\left(k\right)、X_4\left(k\right)、X_5\left(k\right)、X_6\left(k\right),k=0,1$,可按定义计算,如对 $X_3\left(k\right)$
$$\begin{equation}
\begin{aligned}
$$\begin{align}
&X_3\left(k\right)=\sum_{l=0}^{\frac{N}{4}-1}{x_3\left(l\right)W_{\frac{N}{4}}^{lk}}=\sum_{l=0}^{1}{x_3\left(l\right)W_{\frac{N}{4}}^{lk}}\\
\Longrightarrow &X_3\left(0\right)=x_3\left(0\right)+W_2^0x_3\left(1\right)=x\left(0\right)+W_N^0x\left(4\right),X_3\left(1\right)=x_3\left(0\right)+W_2^1x_3\left(1\right)=x\left(0\right)-W_N^0x\left(4\right)
\end{aligned}
\end{equation}$$
\end{align}$$
将上述各式的旋转因子统一为 $W_{\frac{N}{2}}^k=W_N^{2k}$,则一个 8 点的 DFT 可以分解为四个 $\dfrac{N}{4}$ 点的 DFT ,先做 $\dfrac{N}{4}$ 点的 DFT,再用相应的两个 $\dfrac{N}{4}$ 点 DFT 的结果合成 $\dfrac{N}{2}$ 点的 DFT,从而得到 $X_1\left(k\right)、X_2\left(k\right)$,最后组合成为 $N$ 点的 DFT。上述过程的运算流图如下左图,实际绘制按照如下右图即可。
@@ -182,12 +172,10 @@ $$\begin{equation}
&emsp;&emsp;对于长度为 $N=2^\nu$ 的序列,共有 $\nu$ 级蝶形运算,每级有 $\dfrac{N}{2}$ 个蝶形,每个蝶形有 $1$ 次复数加法、$2$ 次复数乘法,因此 $\nu$ 级蝶形运算共有
$$\begin{equation}
\begin{aligned}
$$\begin{align}
&复数乘法:m_F=\frac{N}{2}\cdot\nu=\frac{N}{2}\log_2{N}\\
&复数加法:a_F=N\cdot\nu=N\log_2{N}
\end{aligned}
\end{equation}$$
\end{align}$$
### 3.4.4 各类蝶形运算两个点相距的“距离”及 $W_N^k$ 的变化规律
@@ -231,15 +219,13 @@ $$\begin{equation}
则序列的 DFT 可表示为
$$\begin{equation}
\begin{aligned}
$$\begin{align}
X\left(k\right)&=\sum_{n=0}^{\frac{N}{2}-1}{x\left(n\right)W_N^{nk}}+\sum_{n=\frac{N}{2}}^{N-1}{x\left(n\right)W_N^{nk}}=\sum_{n=0}^{\frac{N}{2}-1}{x\left(n\right)W_N^{nk}}+\sum_{n=0}^{\frac{N}{2}-1}{x\left(n+\frac{N}{2}\right)W_N^{(n+\frac{N}{2})k}}
\\
&=\sum_{n=0}^{\frac{N}{2}-1}{\left[x\left(n\right)+W_N^{\frac{N}{2}k}x\left(n+\frac{N}{2}\right)\right]W_N^{nk}}
\\
&\xlongequal{W_{N}^{\frac{N}{2}k}=\left( -1 \right) ^k}\sum_{n=0}^{\frac{N}{2}-1}{\left[x\left(n\right)+\left(-1\right)^kx\left(n+\frac{N}{2}\right)\right]W_N^{nk}},\ \ k=0,1,\cdots,\frac{N}{2}-1
\end{aligned}
\end{equation}$$
\end{align}$$
由 $W_N^{\frac{N}{2}k}=\left(-1\right)^k$,按照 $k$ 的奇偶可将 $X\left(k\right)$ 分成两部分,令 $k=2r$ 及 $k=2r+1,\ r=0,1,\cdots,\dfrac{N}{2}-1$,则
@@ -295,12 +281,10 @@ X\left(2r\right)=\sum_{n=0}^{\frac{N}{2}-1}{x_1\left(n\right)W_{\frac{N}{2}}^{rn
&emsp;&emsp;对于长度为 $N=2^\nu$ 的序列,共有 $\nu$ 级蝶形运算,每级有 $\dfrac{N}{2}$ 个蝶形,每个蝶形有 $1$ 次复数加法、$2$ 次复数乘法,因此 $\nu$ 级蝶形运算共有
$$\begin{equation}
\begin{aligned}
$$\begin{align}
&复数乘法:m_F=\frac{N}{2}\cdot\nu=\frac{N}{2}\log_2{N}\\
&复数加法:a_F=N\cdot\nu=N\log_2{N}
\end{aligned}
\end{equation}$$
\end{align}$$
# 5. 基-2 DIT-FFT 和 基-2 DIF-FFT 的比较
@@ -330,8 +314,7 @@ $$\begin{equation}
则序列的 DFT 可表示为
$$\begin{equation}
\begin{aligned}
$$\begin{align}
X\left(k\right)&=\sum_{n=0}^{\frac{N}{4}-1}{x\left(n\right)W_N^{nk}}+\sum_{n=\frac{N}{4}}^{\frac{N}{2}-1}{x\left(n\right)W_N^{nk}}+\sum_{n=\frac{N}{2}}^{\frac{3N}{4}-1}{x\left(n\right)W_N^{nk}}+\sum_{n=\frac{3N}{4}}^{N-1}{x\left(n\right)W_N^{nk}}
\\
&=\sum_{n=0}^{\frac{N}{4}-1}\left[x\left(n\right)W_N^{nk}+x\left(n+\frac{N}{4}\right)W_N^{\left(n+\frac{N}{4}\right)k}+x\left(n+\frac{N}{2}\right)W_N^{\left(n+\frac{N}{2}\right)k}+x\left(n+\frac{3N}{4}\right)W_N^{\left(n+\frac{3N}{4}\right)k}\right]
@@ -339,8 +322,7 @@ X\left(k\right)&=\sum_{n=0}^{\frac{N}{4}-1}{x\left(n\right)W_N^{nk}}+\sum_{n=\fr
&=\sum_{n=0}^{\frac{N}{4}-1}{\left[x\left(n\right)+x\left(n+\frac{N}{4}\right)W_N^{\frac{N}{4}k}+x\left(n+\frac{N}{2}\right)W_N^{\frac{N}{2}k}+x\left(n+\frac{3N}{4}\right)W_N^{\frac{3N}{4}k}\right]W_N^{nk}}
\\
&=\sum_{n=0}^{\frac{N}{4}-1}{\left[x\left(n\right)+x\left(n+\frac{N}{4}\right)W_4^k+x\left(n+\frac{N}{2}\right)W_4^{2k}+x\left(n+\frac{3N}{4}\right)W_4^{3k}\right]W_N^{nk}}
\end{aligned}
\end{equation}$$
\end{align}$$
按照 $k$ 除以 $4$ 的余数可将 $X\left(k\right)$ 分成四部分,分别令 $k=4r、k=4r+1、k=4r+2、k=4r+3$,其中 $r=0,1,\cdots,\dfrac{N}{4}-1$,则有
@@ -417,12 +399,10 @@ l_i=\dfrac{N}{4}-\dfrac{l_{j-1}}{2}=\dfrac{N}{6}\left[1-\left(-\dfrac{1}{2}\righ
其中 $l_i$ 来自 L 蝶形的特殊结构。总的复乘次数为 L 蝶形数的两倍,而总的复加次数与基-2 FFT 算法相同,即
$$\begin{equation}
\begin{aligned}
$$\begin{align}
&复数乘法:C_F=2\cdot\sum_{i=1}^{\nu-1}l_i=\frac{N}{3}\log_2{N}-\frac{2N}{9}+\frac{\left(-1\right)^\nu2}{9}\ \ \propto\ \ \frac{N}{3}\log_2{N}\\
&复数加法:a_F=N\cdot\nu=N\log_2{N}
\end{aligned}
\end{equation}$$
\end{align}$$
显然,**复乘次数相比基-2 FFT 算法下降了33%**。
@@ -499,8 +479,7 @@ X_2\left(k\right)=-{jY}_{op}\left(k\right)=-\frac{j}{2}\left[Y\left(k\right)-Y^\
因此 $x\left(n\right)$ 的傅里叶变换(类似基-2 DIT)
$$\begin{equation}
\begin{aligned}
$$\begin{align}
X\left(k\right)&=\sum_{n=0}^{2N-1}{x\left(n\right)W_N^{nk}}=\sum_{n=0}^{N-1}{x\left(2n\right)W_{2N}^{2nk}}+\sum_{n=0}^{N-1}{x\left(2n+1\right)W_{2N}^{\left(2n+1\right)k}}
\\
&=\sum_{n=0}^{N-1}{x\left(2n\right)W_{2N}^{2nk}}+W_{2N}^k\sum_{n=0}^{N-1}{x\left(2n+1\right)W_{2N}^{2nk}}
@@ -508,8 +487,7 @@ X\left(k\right)&=\sum_{n=0}^{2N-1}{x\left(n\right)W_N^{nk}}=\sum_{n=0}^{N-1}{x\l
&=\sum_{n=0}^{N-1}{x_1\left(n\right)W_N^{nk}}+W_{2N}^k\sum_{n=0}^{N-1}{x_2\left(n\right)W_N^{nk}}
\\
&=X_1\left(k\right)+W_{2N}^kX_2\left(k\right),\ \ \ \ \ \ \ \ \ \ \ k=0,1,\cdots,N-1
\end{aligned}
\end{equation}$$
\end{align}$$
$$\begin{equation}
X\left(k+N\right)=X_1\left(k\right)-W_{2N}^kX_2\left(k\right),\ \ k=0,1,\cdots,N-1\qquad\qquad\quad\