您的位置:首页 > 其它

光于增采样和减采样(一)

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

点此进入查看downsampling

Xd(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');
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: