实验五 信号抽样与恢复
一、实验目的
学会用MATLAB实现连续信号的采样和重建 二、实验原理 1.抽样定理
若f(t)是带限信号,带宽为?m, f(t)经采样后的频谱Fs(?)就是将f(t)的频谱
F(?)在频率轴上以采样频率?s为间隔进行周期延拓。因此,当?s??m时,不会发生频
率混叠;而当 2.信号重建
经采样后得到信号fs(t)经理想低通h(t)则可得到重建信号f(t),即:
?s
f(t)=fs(t)*h(t)
其中:fs(t)=f(t)??(t?nT)=?f(nT)?(t?nT)
sss???????ch(t)?TsSa(?ct)
?所以:
f(t)=fs(t)*h(t)=?f(nTs)?(t?nTs)*Ts????cSa(?ct) ?? =Tsc??f(nT)Sa[?(t?nT)]
scs???上式表明,连续信号可以展开成抽样函数的无穷级数。
利用MATLAB中的sinc(t)?tsin(?t)来表示Sa(t),有 Sa(t)?sinc(),所以可以?t?得到在MATLAB中信号由f(nTs)重建f(t)的表达式如下:
?f(t)=Tsc?????f(nTs)sinc[?c(t?nTs)] ?我们选取信号f(t)=Sa(t)作为被采样信号,当采样频率?s=2?m时,称为临界采样。我们取理想低通的截止频率?c=?m。下面程序实现对信号f(t)=Sa(t)的采样及由该采样
信号恢复重建Sa(t):
例5-1 Sa(t)的临界采样及信号重构;
wm=1; %信号带宽
wc=wm; %滤波器截止频率 Ts=pi/wm; %采样间隔
ws=2*pi/Ts; %采样角频率 n=-100:100; %时域采样电数 nTs=n*Ts %时域采样点 f=sinc(nTs/pi);
Dt=0.005;t=-15:Dt:15;
fa=f*Ts*wc/pi*sinc((wc/pi)*(ones(length(nTs),1)*t-nTs'*ones(1,length(t)))); %信号重构 t1=-15:0.5:15; f1=sinc(t1/pi); subplot(211); stem(t1,f1); xlabel('kTs'); ylabel('f(kTs)');
title('sa(t)=sinc(t/pi)的临界采样信号'); subplot(212); plot(t,fa) xlabel('t'); ylabel('fa(t)');
title('由sa(t)=sinc(t/pi)的临界采样信号重构sa(t)'); grid;
例5-2 Sa(t)的过采样及信号重构和绝对误差分析
程序和例4-1类似,将采样间隔改成Ts=0.7*pi/wm , 滤波器截止频率该成wc=1.1*wm , 添加一个误差函数 wm=1;
wc=1.1*wm; Ts=0.7*pi/wm; ws=2*pi/Ts; n=-100:100; nTs=n*Ts
f=sinc(nTs/pi);
Dt=0.005;t=-15:Dt:15;
fa=f*Ts*wc/pi*sinc((wc/pi)*(ones(length(nTs),1)*t-nTs'*ones(1,length(t)))); error=abs(fa-sinc(t/pi)); %重构信号与原信号误差 t1=-15:0.5:15; f1=sinc(t1/pi); subplot(311); stem(t1,f1); xlabel('kTs');
ylabel('f(kTs)');
title('sa(t)=sinc(t/pi)的采样信号'); subplot(312); plot(t,fa) xlabel('t'); ylabel('fa(t)');
title('由sa(t)=sinc(t/pi)的过采样信号重构sa(t)'); grid;
subplot(313); plot(t,error); xlabel('t');
ylabel('error(t)');
title('过采样信号与原信号的误差error(t)');
例5-3 Sa(t)的欠采样及信号重构和绝对误差分析
程序和例4-2类似,将采样间隔改成Ts=1.5*pi/wm , 滤波器截止频率该成wc=wm=1
三、上机实验内容
1.验证实验原理中所述的相关程序;
2.设f(t)=0.5*(1+cost)*(u(t+pi)-u(t-pi)) ,由于不是严格的频带有限信号,但其频谱大部分集中在[0,2]之间,带宽wm可根据一定的精度要求做一些近似。试根据以下两种情况用 MATLAB实现由f(t)的抽样信号fs(t)重建f(t) 并求两者误差,分析两种情况下的结果。 (1) wm=2 , wc=1.2wm , Ts=1; (2) wm=2 , wc=2 , Ts=2.5
实验六 FFT算法的应用
一、实验目的:加深对离散信号的DFT的理解及其FFT算法的运用。 二、实验原理和例子:N点序列的DFT和IDFT变换定义式如下:
X[k]??x[n]Wn?0N?1knN
1, x[n]?N?X[k]Wk?0N?1?knN
kn 利用旋转因子WN?e?j2?nkN具有周期性,可以得到快速算法(FFT)。
在MATLAB中,可以用函数X=fft(x,N)和x=ifft(X,N)计算N点序列
的DFT正、反变换。
例1 对连续的单一频率周期信号 按采样频率
采样,截取长度N分别选
N =20和N =16,观察其DFT结果的幅度谱。
解 此时离散序列
,即k=8。用MATLAB计
算并作图,函数fft用于计算离散傅里叶变换DFT,程序如下:
k=8;
n1=[0:1:19];
xa1=sin(2*pi*n1/k); subplot(2,2,1) plot(n1,xa1)
xlabel('t/T');ylabel('x(n)'); xk1=fft(xa1);xk1=abs(xk1); subplot(2,2,2) stem(n1,xk1)
xlabel('k');ylabel('X(k)'); n2=[0:1:15];
xa2=sin(2*pi*n2/k); subplot(2,2,3) plot(n2,xa2)
xlabel('t/T');ylabel('x(n)'); xk2=fft(xa2);xk2=abs(xk2); subplot(2,2,4) stem(n2,xk2)
xlabel('k');ylabel('X(k)');
计算结果示于图2.1,(a)和(b)分别是N=20时的截取信号和DFT结果,由于截取了两个半周期,频谱出现泄漏;(c) 和(d) 分别是N=16时的截取信号和DFT结果,由于截取了两个整周期,得到单一谱线的频谱。上述频谱的误差主要是由于时域中对信号的非整周期截断产生的频谱泄漏。
实验内容:
(1) 2N点实数序列
2?12????cos(7n)?cos(19n),n?0,1,2,...,2N?1?x(n)??? N2N??0,其它n??N=64。用一个64点的复数FFT程序,一次算出X(k)?DFT[x(n)]2N,并
绘出
X(k)。
实验要求:利用MATLAB编程完成计算,绘出相应图形。并与理论计算相比
较,说明实验结果的原因。
(1) 用以下代码实现可得图6-1所示的DFT图。 >> N=64;
>> n=0:2*N-1;
>> x=cos(2*pi*7*n/N)+1/2*cos(2*pi*19*n/N); >> X=fft(x,128); >> k=n;