[傅里叶变换及其应用学习笔记] 十七. Ш函数

Ш函数的三个性质

上节课我们学习了$Ш_p$函数,其定义如下

$Ш_p = \displaystyle{ \sum_{k=-\infty}^{\infty}\delta(x-kp) }$

 
 

$Ш_p$函数有以下三个性质,

1) 采样性质,继承了$\delta$函数的采样性质

$f(x)Ш_p(x) = \displaystyle{ \sum_{k=-\infty}^{\infty}f(kp)\delta(x-kp) }$

2) 周期性质,继承了$\delta$函数的移位性质

$(f*Ш_p)(x) = \displaystyle{ \sum_{k=-\infty}^{\infty}f(x-kp) }$

3) 傅里叶变换

$\mathcal{F}Ш_p = \frac{1}{p}Ш_{\frac{1}{p}}$

$\mathcal{F}^{-1}Ш_p = \frac{1}{p}Ш_{\frac{1}{p}}$

$Ш_p$函数的这三个性质,是本节课后面推导的基础。

 
 
 

内插问题

内插问题是我们接下来要解决的问题,我们需要用可靠的方法对离散的测量或采样值进行内插,通过内插,我们能得到被采样信号的所有的值。(The problem here is and what we‘re actually gonna solve in a quite remarkable way is the exact interplation of value of a function from a discrete set of measurement or a discrete set of samples. We‘ll be able to interpolate all values of a signal or a function from a discrete set of samples.)

假设有一个随时间变化的过程,以相等的时间间隔(如几分之一秒)对该过程进行测量,得到一组测量数据$(t_0,y_0),(t_1,y_1),(t_2,y_2)$等等,我们可以把这些数据当成一系列的点

 

我们可以用曲线来拟合到采样数据上(fit a curve to the data),或者根据测量数据在中点进行内插(interpolate values of the process at the intermediate points based on the measurements)。

 
 

曲线拟合与内插

1) 曲线拟合是根据采样数据得出一个曲线函数,该函数上的值作为原信号的近似值。
2) 内插是通过公式的代入,求出两采样点中间点的具体数值。内插不一定是线性的,具体数值要根据内插公式来确定。
 
两者虽然方法不同,但是目的都是为了从有限的采样点得到原始信号。
 
要求被采样点以外的点数值,这并没有固定的方法,需要根据实际情况来选择合适的方法。当然,更多的测量值,可以提供更高的曲线拟合度或更准确的内插。
 
 

采样点间的不确定性

内插与拟合的不确定性,从极端来看,可以看作振荡,即函数从一个点到另一个点的变化有多快。函数拐弯越频繁,曲线拟合或者内插的不确定性越大,我们需要了解、控制(regulate)这种不确定性。

我们对于信号会从时域,频域两个方面去分析,而在频域的傅里叶变换反映了信号的频率成分,我们能借此分析函数振荡的快慢。傅里叶变换的高频与快速振荡相关,傅里叶变换的低频与低速振荡相关。我们要了解信号的振荡速度,就要对其傅里叶变换进行分析。

解决这种不确定性的方法是:规定函数允许振荡的最高频率。如果我们在傅里叶变换后把高频去掉,则相当于把快速振荡去除。

解决方法可以总结为以下定义:

对于一个有限带宽的函数f(x),如果它的傅里叶变换在某频带以外的值恒为零,就是说傅里叶变换$\mathcal{F}f(s)\equiv 0 \ for \ |s|\geqslant \frac{p}{2}$,最小的$p$值就称为带宽。

 

对于有限带宽信号,可以完全解决不确定性问题,即可以根据离散的采样值得到该信号的函数表达式$f(x)$

推导过程如下:

利用$Ш_p$的周期化性质,用$Ш_p$对$\mathcal{F}f(s)$进行周期化

$\mathcal{F}f * Ш_p$

 
 

从周期傅里叶变换恢复为原来的傅里叶变换

$\mathcal{F}f = \Pi_p(\mathcal{F}f * Ш_p)$



 

然后求傅里叶逆变换,得到时域信号

$\begin{align*}
f(t)
&=\mathcal{F}^{-1}(\Pi_p(\mathcal{F}f*Ш_p))\\
&=(\mathcal{F}^{-1}\Pi_p)*(\mathcal{F}^{-1}(\mathcal{F}f*Ш_p)) \qquad(Fourier\ Convolution\ Thereom)\\
&=(psinc(pt))*((\mathcal{F}^{-1}\mathcal{F}f(t))(\mathcal{F}^{-1}Ш_p(t)))\\
&=(psinc(pt))*(f(t)\cdot \frac{1}{p}Ш_{\frac{1}{p}}(t))\qquad(Fourier\ Transform\ of\ Ш_p)\\
&=(psinc(pt))*(\frac{1}{p}f(t)\sum_{k=-\infty}^{\infty}\delta(x-\frac{k}{p}))\\
&=(psinc(pt))*(\frac{1}{p}\sum_{k=-\infty}^{\infty}f(\frac{k}{p})\delta(x-\frac{k}{p})) \qquad(Ш_p\ Sampling\ Property)\\
&=\sum_{k=-\infty}^{\infty}f(\frac{k}{p})sinc(pt)*\delta(x-\frac{k}{p})\\
&=\sum_{k=-\infty}^{\infty}f(\frac{k}{p})sinc(p(t-\frac{k}{p}))\qquad \delta\ shift\ property
\end{align*}$

因此,对于有限带宽函数$f(t)$可写成如下形式,

$f(t) = \displaystyle{ \sum_{k=-\infty}^{\infty}f(\frac{k}{p})sinc(p(t-\frac{k}{p})) }\quad ,\quad \mathcal{F}f(s)\equiv 0 \ for\ |s|\geqslant\frac{p}{2}$

结论是:

  • 对于带宽为$P$的函数$f(t)$,如果采样间隔为$\frac{1}{p}$,而且已知所有采样点$\displaystyle{ \sum_{k=-\infty}^{\infty}f(\frac{k}{p}) }$的值,那么我们就能通过该公式内插得到原本的函数$f(t)$的所有的值。

这叫做采样定理(sampling theorem),这可以说是整个课程最重要的公式。

时间: 2024-10-07 20:02:30

[傅里叶变换及其应用学习笔记] 十七. Ш函数的相关文章

angular学习笔记(十七)-路由和切换视图

本篇介绍angular中如何通过判断url的hash值来显示不同的视图模板,并使用不同的控制器: 下面,通过一个例子,来一步一步说明它的用法: 我们要做一个邮箱应用,打开的时候显示的是邮件列表: 然后点击邮件主题,可以查看该邮件的详细内容: 点击返回列表,再回到列表页 一. 创建index页面: <!DOCTYPE html> <html> <head> <title>14.1路由和视图切换</title> <meta charset=&q

C++学习笔记--从虚函数说开去

虚函数与纯虚函数: 虚函数:在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数,virtual  函数返回类型  函数名(参数表){函数体;} ,实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数.注意虚函数在基类中是有定义的,即便定义是空. 纯虚函数:在基类中是没有定义的,必须由派生类重定义实现,否则不能由对象进行调用. 看下面的例子: #include<iostream> using namespace std; class Cshape { p

十四、Android学习笔记_Android回调函数触发的几种方式 广播 静态对象

一.通过广播方式: 1.比如登录.假如下面这个方法是外界调用的,那么怎样在LoginActivity里面执行登录操作,成功之后在回调listener接口呢?如果是平常的类,可以通过构造函数将监听类对象传入即可.但是在Activity中不能传递监听对象,所以考虑使用广播来实现. public void login(final LoginOnClickListener listener) { Intent intent = new Intent(context, LoginActivity.clas

C++学习笔记:指向函数的指针

1 #include <stdio.h> 2 3 int sum(int a, int b) 4 { 5 return a+b; 6 } 7 8 int minus(int a, int b) 9 { 10 return a-b; 11 } 12 13 int x(int a, int b) 14 { 15 return a*b; 16 } //第一个参数为指向函数的指针,返回类型为int,参数是int,int 1 void counting(int (*p)(int, int), int a

python学习笔记(03):函数

默认参数值:   只有在行参表末尾的哪些参数可以有默认参数值,即 def func(a, b=5 )#有效的 def func( a=5,b )#无效的 关键参数: #!/usr/bin/python # Filename: func_key.py def func(a, b=5, c=10): print 'a is', a, 'and b is', b, 'and c is', c func(3, 7) func(25, c=24) func(c=50, a=100) #输出: $ pyth

C++学习笔记之字符函数库cctype

C++从C语言继承了一个与字符相关的.非常方便的函数软件包,它可以简化诸如确定字符是否为大写字母.数字.标点符号等工作,这些函数原型是在头文件cctype(老式风格ctype.h)中定义的. 下表对这些函数进行了总结,有些系统可能没有表中列出的函数,也有可能还有在表中没有列出的一些函数. 函数名称 返回值 isalnum() 如果参数是字母数字,即字母或者数字,该函数返回true isalpha() 如果参数是字母,该函数返回true iscntrl() 如果参数是控制字符,该函数返回true

学习笔记之gethostbyaddr函数

刚才学了gethostbyname函数,这个gethostbyaddr函数的作用是通过一个IPv4的地址来获取主机信息,并放在hostent结构体中. #include <netdb.h> struct hostent * gethostbyaddr(const char * addr, socklen_t len, int family);//返回:若成功则为非空指针,若出错则为NULL且设置h_errno //上面的const char * 是UNP中的写法,而我在linux 2.6中看到

C++ Primer Plus学习笔记之虚函数

C++ Primer Plus学习笔记之虚函数 C++语言的多态性有两种类型:静态多态性和动态多态性.函数重载和运算符重载就是静态多态性的具体表现,而动态多态性是指程序运行过程中才动态的确定操作所针对的对象,它是通过虚函数实现的: 1,虚函数的概念: 一个指向基类的指针可用来指向从基类派生的任何对象,这样就可以达到一个接口多个实现的访问了:虚函数是在基类中被冠以virtual的成员函数,它提供了一种接口界面.虚函数可以在一个或者多个派生类中被重新定义,但要求在派生类中从新定义时,虚函数的函数原型

Oracle 学习笔记 18 -- 存储函数和存储过程(PL/SQL子程序)

PL/SQL子程序 包括函数和过程.这里的函数指的是用户自己定义的函数,和系统函数是不同的.子程序一般是完成特定功能的PL/SQL程序块,并且具有一定的通用性,可以被不同的应用程序多次调用.Oracle提供可以把PL/SQL程序存储在数据库中,并可以再任何地方来运行它.这样就叫做存储过程或者是函数.过程和函数的唯一区别就是函数总是向调用者返回数据,而过程则不返回数据. 函数 如果用户要经常执行某些操作,并且需要返回特定的数据,那么就可以将这些操作构造成一个函数. 可以使用SQL语句定义函数. 基