基于matlab的采样定理验证
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Matlab 的采样定理验证
一. 实验目的
● 了解信号恢复的方法
● 验证采样定理
二. 实验环境
● Matlab 应用软件
三. 实验原理
● 时域采样定理
对连续信号进行等间隔采样形成采样信号,采样信号的频谱是原连续信
号的频谱以采样频率为周期进行周期延拓形成的。
设连续信号的最高频为f max ,如果采样频率f s ≥2f max ,那么采样信号可
以唯一恢复出原连续信号;否则会出现频谱混叠,信号无法完全恢复。 ● 设计原理图
● 时域采样与频域分析
对一连续信号f (t )进行理想采样可以表示为
f s t =f t s t =
f (nT )δ(t −nT )∞n =−∞
其中f s t 为f t 的理想采样,s (t )为周期脉冲信号,即
s t =
δ(t −nT )∞n =−∞
由频域卷积定理,f s t 的傅立叶变换为
F s jω =1
T F j ω−nΩ ∞n =−∞
其中Ω=2π/T ,F (jω)为f (t )的傅立叶变换。上式表明,F s jω 为F (jω)的
周期延拓。只有满足采样定理时,才不会发生频率混叠失真。
在实际计算中,常采用如下等价的公式进行计算
F s jω =
f (nT )e −jnΩT ∞n =−∞
● 信号恢复
这里信号恢复是指由f s t 经过函数内插,恢复原始信号f (t )的过程,具体而言即
f t =f s t ∗h (t )
其中插值函数
h t =T
ωc
π
Sa (ωc t ) 其中ωc 为低通滤波器的截止频率。将f s t 和ℎ t 代入恢复公式,即得
f t =f s t ∗h t =T ωc
π f nT Sa (ωc (t −nT ))∞n =−∞
上式即信号恢复的基本公式。
内插公式表明模拟信号f (t )等于各采样点数值乘以对应内插函数的总和,只要采样频率高于信号频率的两倍,模拟信号就可以用它的采样值表示,而不丢失任何信息。
四. 预习内容
● 采样定理
五. 实验内容
● 画出连续时间信号的时域波形,信号为
f t =sin 120 π t +cos 50 π t +cos(60 π t )
● 对信号进行采样,得到采样序列,画出采样频率分别为80Hz 、120 Hz 、150 Hz 时的采样序列波形。
● 对不同采样频率下的采样序列进行频谱分析,绘制其幅频曲线,并比较各频率下采样序列和幅频曲线的差别。
● 对原始信号进行频谱分析,将其与序列频谱分析的结果做比较。 ● 由采样序列恢复连续信号,画出时域波形,并与原始波形进行比较。
六.思考题
●为何频谱有旁瓣?
●采样频率为120Hz时,为何不能无失真恢复?
七.实验报告要求
●绘制原信号的时域波形与频域幅频曲线。
●分别以80Hz、120 Hz、150 Hz对原信号进行采样,绘制采样序列及其幅频
曲线。
●对采样序列进行插值恢复,绘制重构信号及其幅频曲线。
●从时频两方面对恢复信号和原始信号进行比较,并得出结论。
●回答思考题。
附录
采样部分
function fz=sampling(fy,fs)
%fz是模拟信号,以字符串形式输入
%fs是采样频率
fs0=10000;tp=0.1;
t=[-tp:1/fs0:tp];
k1=0:9999;k2=-9999:-1;
m1=length(k1);m2=length(k2);
f=[fs0*k2/m2,fs0*k1/m1]; %设置原信号频率数组
w=[-2*pi*k2/m2,2*pi*k1/m1];
fx1=eval(fy);
FX1=fx1*exp(-j*[1:length(fx1)]'*w);
figure
%画原始波形
subplot(211);plot(t,fx1,'r');
title('原始信号');xlabel('时间(s)');
axis([min(t),max(t),min(fx1),max(fx1)]);
line([min(t),max(t)],[0,0]);
%画原信号幅度谱
subplot(212);plot(f,abs(FX1),'r');
title('幅度谱');xlabel('频率(Hz)');
axis([-100,100,0,max(abs(FX1))+5]);
%对信号进行采样
ts=1/fs;
t1=-tp:ts:tp;
f1=[fs*k2/m2,fs*k1/m1];
t=t1;
fz=eval(fy);
FZ=fz*exp(-j*[1:length(fz)]'*w);
figure;
%画采样序列波形
subplot(211);stem(t,fz,'.');
title('采样信号');xlabel('时间(s)');
line([min(t),max(t)],[0,0]);
%画采样信号幅度谱
subplot(212);plot(f1,abs(FZ),'m');
title('采样信号幅度谱');xlabel('频率(Hz)');
-------------------------------------------------------------------
恢复部分
function fh=recons(fz,fs)
%第一个输入是采样序列
%第二个输入是采样频率
T=1/fs;dt=T/10;tp=0.1;
t=-tp:dt:tp;n=-tp/T:tp/T;
TMN=ones(length(n),1)*t-n'*T*ones(1,length(t));
fh=fz*sinc(fs*TMN); %由采样恢复原信号
k1=0:9999;k2=-9999:-1;
m1=length(k1);m2=length(k2);
w=[-2*pi*k2/m2,2*pi*k1/m1];
FH=fh*exp(-j*[1:length(fh)]'*w); %恢复信号的傅立叶变换
figure;
%画出恢复的波形
subplot(211);plot(t,fh,'g');
st=strcat('由取样频率',num2str(fs),'恢复');
title(st);xlabel('时间(s)');