赞
踩
**题目:**已知一个连续时间信号
其中:f0=1HZ,取最高有限带宽频率fm=5f0。分别显示原连续时间信号波形和
3种情况下抽样信号的波形。并画出它们的幅频特性曲线,并对采样后的信号进行恢复。
step1.绘制出采样信号
这部分相对简单,代码解释直接写在下面程序里。主要来说,通过for循环进行采样,采样后,根据采样频率间隔绘制出采样之后的离散信号。
代码1
%根据题目写出已知信息 f0=1; fm=5*f0; f=sin(2*pi*f0*t)+(1/3)*sin(6*pi*f0*t); %设置时间区间和步进 t=-2:0.01:2; %绘制出原始,未经采样的图像 subplot(411); plot(t,f); title('原始信号') %for循环绘制不同采样频率下的信号 for i=1:1:3; fs=i*fm; Ts=1/fs; %Ts是采样周期,也是采样间隔 n=-2:Ts:2; %写出采样后的离散信号 f1=sin(2*pi*f0*n)+(1/3)*sin(6*pi*f0*n); %绘制剩下三个采样图像 subplot(4,1,1+i); %以实心圆进行绘制 stem(n,f1,'filled'); end
运行结果1
step2:绘制幅频特性曲线
这里主要使用的方法是傅里叶变换。根据傅里叶变换的公式,确定相关的变量。
代码2
%写出已知信息 f0=1; fm=5*f0; fs1=2*fm; t=-2:0.01:2; x=sin(2*pi*f0*t)+(1/3)*sin(6*pi*f0*t); %对原始信号进行傅里叶变换 N=length(t); k=0:N-1;%序号 wm=2*pi*fm; w1=k*wm/N; %频域对应的角频率,wm/N可以理解为频率间隔,kwm/N,第k个点对应的频率 dt=1/fm %时域时间间隔 X=x*exp(-j*t'*w1)*dt%矩阵形式计算傅里叶变换 subplot(4,1,1); plot(w1/(2*pi),abs(X)); axis([0,max(3*fm),1.1*min(abs(X)),1.1*max(abs(X))]); %绘制fm,2fm,3fm采样频率下的频谱,对离散信号进行傅里叶变换 %写出离散信号后,进行傅里叶变换 for i=1:3; fs=i*fm; fs=i*fm;Ts=1/fs; n=-2:Ts:2; xs=sin(2*pi*f0*n)+1/3*sin(6*pi*f0*n); N=length(n); ws=2*pi*fs; k=0:N-1; n1=0:N-1; WN=exp(-2*pi*j/N); XS=xs*WN.^(n1'*k); w=k*ws/N; Xs=xs*exp(-j*n'*w)*Ts; %绘制关于频率变化的幅度谱(FT),绘制关于采样点的幅值和相角用DFT subplot(4,1,1+i);plot(w/(2*pi),abs(Xs)); axis([0,max(4*fm),1.1*min(abs(Xs)),1.1*max(abs(Xs))]); end
运行结果
step3.抽样信号的恢复
这里信号的恢复,主要采用的方式是插值法。时域卷积是用时域抽样信号xs(t)与理想滤波器系统的单位冲激响应h(t)进行卷积积分来求解。卷积积分的公式通过推导化简为内插公式 。
特别要注意生成
t
−
n
T
s
t-nTs
t−nTs的这个过程,要很好的利用矩阵的规律。
目的:我们最后得到的应该是一个
1
行
(
3
∗
T
0
)
/
T
s
列
1行(3*T0)/Ts列
1行(3∗T0)/Ts列的行向量。而抽样后的序列xs也是一个
1
行
(
3
∗
T
0
)
/
T
s
列
1行(3*T0)/Ts列
1行(3∗T0)/Ts列的行向量,那么就要求
s
a
sa
sa是
(
3
∗
T
0
)
/
T
行乘以
(
3
∗
T
0
)
/
T
s
列
(3*T0)/T行乘以(3*T0)/Ts列
(3∗T0)/T行乘以(3∗T0)/Ts列的矩阵。而且
s
a
sa
sa取决于
t
−
n
T
s
t-nTs
t−nTs
故借助该行代码生成
t
−
n
T
s
t-nTs
t−nTs
TN=ones(length(n),1)*t1-n'*Ts*ones(1,length(t1));
完整代码
%x信号重建 %写出已知条件 f0=1; T0=1/f0; fm=5*f0; Tm=1/fm;%时域时间间隔 t=0:0.1:3*T0; x=sin(2*pi*f0*t)+(1/3)*sin(6*pi*f0*t); subplot(411); plot(t,x); %生成采样后的信号 for i=1:1:3 fs=i*fm; Ts=1/fs; t1=0:Ts:3*T0; xs=sin(2*pi*f0*t1)+(1/3)*sin(6*pi*f0*t1); %生成t-nTs矩阵用于构建插值函数 n=0:(3*T0)/Ts; TN=ones(length(n),1)*t1-n'*Ts*ones(1,length(t1)); x1=xs*sinc(2*pi*fs*TN); subplot(4,1,1+i); plot(t1,x1); axis([min(t1),max(t1),1.1*min(x1),1.1*max(x1)]) end
运行结果
结果分析
由此次实验可以发现,当采样频率大于信号频率的两倍时,才可以进行恢复,也就是进行无失真传输。
经验
学习MATLAB往往先要想的是,我要达成的目的是什么,这个过程中,我需要用到的函数或者是公式是什么,为了实现这个函数的功能,我需要定义哪些变量。也就是说程序往往是先构建框架,再去填充内容。
此外,在这个过程中本人最怕的是矢量长度必须相等,索引超出矩阵维度。今天信号的恢复那里就卡了一下午,所以说,赤裸裸的教训,每一个变量都应该注意他的维度。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。