资源描述:
《2016年北航数字信号处理上机实验一实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验一信号的采样与重构离散时间信号处理实验报告实验一信号的采样与重构班级学号姓名同组者日期实验一信号的采样与重构实验介绍连续时间信号采样是获得离散时间信号的一种重要方式,但是时域上的离散化会带来信号在频域上发生相应的变化。在本实验中,我们将分别看到低通信号和带通信号在不同的采样率下得到的离散信号波形与连续信号波形在时域和频域上的对应关系。同时,离散信号的二次采样在实际的应用中可能是必须的,有时甚至是非常重要的。在实验的最后,我们也会看到离散信号的抽取和内插所带来的频谱变化。由于matlab语言无法表达连续信号,实验中我们采用足够密的采样点来模拟连续信号(远大于奈奎斯特采样的要求),
2、即:t=0:Ts:T(Ts=1/fs<<奈奎斯特采样频率)实验中,为了分析离散信号与连续信号之间的频谱关系,加深对采样定理的理解,了解模拟频谱、数字频谱、以及离散信号被加窗后各自的频谱,从而直观的理解采样频率对频谱的影响和加窗后对频谱的影响。由此可以掌握数字处理方法对模拟信号进行频谱分析的基本原则,即:如何选择合适的信号长度、采样周期以使得对模拟信号的频谱分析的误差达到分析的要求。在该实验中,用到的Matlab函数有:plot(x,y),其作用是在坐标中以x为横坐标、y为纵坐标的曲线,注意x和y都是长度相同的离散向量;xlabel(‘xxx’),其作用是对x轴加上坐标轴说明“xxx
3、”;ylabel(‘yyy’),其作用是对y轴加上坐标轴说明“yyy”;title(‘ttt’),其作用是对坐标系加上坐标轴说明“ttt”;subplot(m,n,w),其作用是当需要在同一显示面板中显示多个不同的坐标系时,m、n分别指明每行和每列的坐标系个数,w为当前显示坐标系的流水号(1到m*n之间)。在实验中我们需要画出信号的频谱,对于连续信号频谱的逼近需要你自己编写,原理如下:连续时间非周期信号的傅里叶变换对为:用DFT方法对该变换逼近的方法如下:1、将在t轴上等间隔(宽度为T)分段,每一段用一个矩形脉冲代替,脉冲的幅度为其起始点的抽样值,然后把所有矩形脉冲的面积相加。该方
4、法实际为平顶处理,利用采样和零阶保持器就可以完成,则有:2、将序列截断成从t=0开始长度为的有限长序列,包含有N个采样,即时域加矩形窗,则上式又可以进一步近似为:17实验一信号的采样与重构由于时域采样,采样频率为,则频域产生以为周期的周期延拓,如果是限带信号,则有可能不产生混叠,成为连续周期频谱序列,频域周期为。3、由于数值计算的限制,在频域上也只能计算离散点(频域抽样)上的数值。我们将频域的一个周期中也分成N段,即。每个频域采样点间的间隔为。则上式可以进一步化简为:由此我们看到了DFT与CTFT之间的近似关系。如果将T和取得尽量小,则我们可以得到模拟信号的较精确的时频特性。实验解
5、答一、低通采样考虑以下模拟信号xa(t),xa(t)=cos(2*pi*f0*t)+2*cos(2*pi*10*f0*t),令f0=100Hz。显然该信号的最高频率1kHz。1.采样频率fs大于信号最高频率10f0的2倍是信号的恢复。1)对信号以fs1=2.2kHz的频率进行采样,得到抽样信号x(n)=xa(t)
6、t=nT;2)利用内插公式xr(t)=x(n)*[sin(pi*(t-n*Ts)/Ts)/(pi*(t-n*Ts)/Ts)]恢复出原始信号x^a(t);3)绘出Δx(t)=xa(t)-x^a(t)的时域波形;4)利用前面介绍的画频谱的方法画出xa(t)和x(n)的频谱,对
7、应3)中的误差曲线和频谱图说明是否有新的频率分量产生,是何原因?2.采样频率fs低于信号最高频率10f0的2倍是信号的恢复。分别取fs=6*f0和fs=14*f0,重复1中的操作,注意观察时域波形和频谱的对应变化。17实验一信号的采样与重构(一)、MATLAB源代码clear;f0=100;Fs=3000;Ts=1/Fs;ts=0:Ts:0.1;X=xa(ts);t=0:Ts/10:0.1;L=length(t);Xa=xa(t);Xr=zeros(1,L);forn=1:LXr(n)=xr(X,Ts,t(n));endsubplot(6,1,1);plot(t,Xa);title
8、('原始信号');subplot(6,1,2);stem(ts,X);title('采样信号');subplot(6,1,3);plot(t,Xr);title('恢复信号');subplot(6,1,4);plot(t,Xa-Xr);title('原信号与恢复信号之差');fs=20000;y1=fft(Xa,fs);mag=abs(y1);f=(0:length(y1)-1)'*(10*Fs)/length(y1);subplot(6,1,5)plot(f(1:f