光于增采样和减采样(一)
2015-10-03 14:44
621 查看
增采样与减采样
普通DSP课本里可能没有增采样和减采样的内容。有些大学的DSP课程内容比较深。相信,很多包括通信专业的学生对于信号处理的精髓不是很明白。下面分析一下这个增采样过程。大家知道采样的原理是:X(n)=Xc(t)|t=nT =Xc(nT). Xc(t)是连续时间信号。x(n)是相应的离散时间信号。T是采样率。Xc(Ω)是Xc(t)的连续时间傅里叶变换。
X(ΩT)=1T(∑k=0∞Xc(Ω−k2πT))\begin{align}\notag
{X(ΩT)}&=\frac{1}{T}(\sum_{k=0}^{\infty}Xc(Ω - k\frac{2\pi}{T}))
\end{align}
X(w)=1T(∑k=0∞Xc(wT−k2πT))\begin{align}\notag
{X(w)}&=\frac{1}{T}(\sum_{k=0}^{\infty}Xc(\frac{w}{T} - k\frac{2\pi}{T}))
\end{align}
The truth of sampling
采样的实质是什么?模拟频率Ω到数字频率w。数字频率w,指的是采样点之间的弧度,一般|w|<=π。若采用w,exp(jw)在单位圆上,光于2π的周期性离散信号周期为2π。由此我们不用计算就可以证明就能得到奈奎斯特定理。y(t) = sin(Ωt),w = Ω/T; 对于信号y(t)的最大频域截止Ω = π/T。为了不尝生混迭, Ωs = 2π/T。故Ωs = 2Ω ;
upsampling
在没有经过滤波器之前是这样的:xi[n]=xc(nT′);T′=T/L;xi[n]=x[n/L]=xc(nT/L)\begin{align}
xi
= xc(nT'); T'=T/L;xi
= x[n/L] = xc(nT/L)
\end{align}
当n=kL(k为整数),xe[n]=x[n/L]=∑k=−∞∞x[k]δ[n−kL]\begin{align}\notag
当n = kL(k为整数),xe
= {x[n/L]}=
{\sum_{k = -\infty}^{\infty}x[k]δ[n-kL]}
\end{align}
其他情况,xe[n]=0;\begin{align}
其他情况,xe
= 0;
\end{align}
Xe(ejw)=∑n=−∞∞(∑k=−∞∞x[k]δ[n−kL])e−jwn=∑k=−∞∞x[k]e−jwkL=X(ejwL)\begin{align}
Xe(e^{jw}) = \sum_{n = -\infty}^{\infty}(\sum_{k = -\infty}^{\infty}x[k]δ[n-kL])e^{-jwn} =\sum_{k = -\infty}^{\infty}x[k]e^{-jwkL} = X(e^{jwL})
\end{align}
维基百科有这样的说明。点此进入查看upsampling;
类似的推导之后:
downsampling
点此进入查看downsamplingXd(ejw)=1M(∑i=0M−1X(ewM−2πiM)\begin{align}\notag
{Xd(e^{jw})}&=\frac{1}{M}(\sum_{i=0}^{M-1}X(e^{{\frac{w}{M}} - \frac{2\pi{i}}{M}})
\end{align}
[这是奥本海默的DSP里的一张图]
然而有些人可能不明白为什么这里的增采样之后,只是填充零,为什么会在幅度上引起L的变化。根据帕斯瓦尔定理,能量是不变的,因为0是没有能量的。采样导致频率周期性,低通滤波器,把频域上中间那段取出来了,能量降低为1/I*I ,为了恢复想x(0),低通滤波器增益为I。下面是MATLAB的仿真说明。
MATLAB代码:
[code]function createfigure(X1, YMatrix1) %CREATEFIGURE(X1, YMATRIX1) % X1: x 数据的矢量 % YMATRIX1: y 数据的矩阵 % 由 MATLAB 于 03-Oct-2015 15:25:08 自动生成 % 创建 figure figure1 = figure; % 创建 axes axes1 = axes('Parent',figure1); %% 取消注释以下行以保留轴的 X 极限 % xlim(axes1,[-3.14159265358979 3.14159265358979]); box(axes1,'on'); hold(axes1,'all'); % 使用 plot 的矩阵输入创建多行 plot1 = plot(X1,YMatrix1,'Parent',axes1); set(plot1(1),'DisplayName','Original Signal'); set(plot1(2),'LineWidth',2,'Color',[1 0 0],'DisplayName','Upsampled Signal'); % 创建 xlabel xlabel('Radians/Sample'); % 创建 ylabel ylabel('Magnitude'); % 创建 legend legend(axes1,'show');
相关文章推荐
- REDIS key notification
- hdu 3068 最长回文(manacher)
- JAVA深入研究——Method的Invoke方法。
- LintCode 删除排序数组中的重复数字
- 一个Sqrt函数引发的血案
- Log4j官方文档翻译(三、配置)
- 如何查看Linux的磁盘空间还有多少
- 贪心+拓扑排序 AOJ 2456 Usoperanto
- 网站伸缩性架构
- python搭建web应用框架以及一些基本语法
- cocos2dx 消除箱子
- 程序性能分析
- MapIterator和MapEnumerator区别
- Android Material Design Library系列教程(五)
- 基数排序
- iOS 多语言支持,应用程序国际化 xcode4.5
- 关于hibernate空指针异常的几个问题
- USACO 2.3 Controlling Companies (DFS)
- 最容易理解的java数组位移(献给我的第一次博客)
- 关于wxwidgets图形界面的关闭窗口的按钮无效的解决办法