实验三 抽样.docx
《实验三 抽样.docx》由会员分享,可在线阅读,更多相关《实验三 抽样.docx(25页珍藏版)》请在冰豆网上搜索。
实验三抽样
实验三抽样
一、实验目的
研究采样过程,分析产生混叠效应的原因,实现不同的重建方案。
二、实验原理
1、抽样引起的混叠
由于在MATLAB中不能产生模拟信号,所以需要做实时
轴的仿真。
因此,把仿真时的
与所研究的抽样周期
明确区分开是很重要的。
对连续时间正弦信号考虑下面的表示式:
可以按抽样频率
对
抽样来获得离散时间信号
2、抽样的频域视图
对连续时间信号抽样时,因为频域以抽样频率延拓,故其频谱显现出混叠效应。
为了实际演示这一效应,需要使用示波器。
在MATLAB中,只能仿真这一效应,而这正是本节的目的。
仿真包括抽样运算,接着做D/A转换(包括一个重建滤波器)。
这个简单的系统由频率不同的信号驱动,而且将这些输入和输出模拟信号的傅里叶变换进行比较。
不同的实验涉及抽样和重建过程的各个部分。
应该把他们结合成一个用以做完整仿真的M文件脚本。
为了仿真模拟信号,必须用非常高的频率——至少是任何模拟信号所允许的最高频率的5倍。
因此在这个问题中将会有两个“抽样率”,一个用于所研究的实际抽样中,另一个用于仿真连续时间信号。
第二个问题是如何显示连续时间信号的傅里叶变换。
同样,这也只能仿真实现。
下面的M文件应该用来绘出模拟频谱。
注意,在仿真的输入中有dt.
functionfmagplot(xa,dt)
%FMAGPLOT
%fmagplot(xa,dt)
%xa:
“ANALOG”signal
%dt:
thesamplingintervalforthesimulationofxa(t)
L=length(xa);
Nfft=round(2.^round(log2(5*L)));%<--nextpowerof2
Xa=fft(xa,Nfft);
range=0:
(Nfft/4);
ff=range/Nfft/dt;
plot(ff/1000,abs(Xa(1:
length(range))))
title('CONT-TIMEFOURIERTRANSFORMATION(MAG)')
xlabel('FREQUENCY(khz)'),grid
end
3、产生信号
要演示混叠效应,需要一个简单的模拟输入信号通过系统。
这里使用正弦信号,但在用正弦信号完成仿真后,应尝试用一下其他信号。
作为开始,必须选择“仿真抽样频率”,将其选定为
。
4、A/D转换
A/D转换器以间隔
抽样。
利用对
抽样所得的样本子集来实现仿真。
为避免不必要的复杂化,令
与A/D转换器抽样率
的比值取为整数
。
这样,
向量每间隔
个的样本都可以用来仿真A/D转换。
5、设计一个重建滤波器
D/A环节由两部分组成:
以抽样时间间隔
分隔离散时间样本,在其之后是一个模拟重建滤波器。
6、D/A转换
实际D/A转换步骤顺序为:
从离散时间信号
产生模拟信号
,然后用Chebyshev滤波器进行滤波。
MATLAB向量仿真的模拟信号
是由在离散时间信号向量
样本之间插入一些零值之后重建得到的。
零的个数取决于
的比值。
7、测试混叠
把上面所有的步骤急集成为一个M文件脚本,然后可以进行测试。
8、从样本重建信号
信号处理在很多其他问题中涉及从数字样本重建模拟信号。
本节探讨各种可用于重建的方法。
因为给定一组时间样本可对应有许多可能的模拟信号,模拟信号的选择取决于对重建特性所做的假设。
考虑下面情形:
模拟信号
的三个样本如下所示:
未给出其他信息。
这些样本对应的是什么模拟信号是不固定的,取决于所做的假设和使用的重建方法。
例如,上面样本所对应的一种可能的模拟波形可通过这些样本点任意画一曲线,不需要说明在显示区间以外的曲线部分,而且可以另画出任何数量的曲线。
更具体的说,需要对假设和重建方法加以说明。
例如,这里看到的三个等间距的抽样,可以假设对
从
到
所有可能的样本,只有这三个是非零点;另一方面,假设这三个样本是对
从
到
所有可能的样本的子集,但是其他非零点的样本都不给出,只给出如图所示的三个抽样样本。
在选择重建方法时,或许选定拟合为一个多项式,或拟合为一个正弦波,或使用线性插值,或使用低通滤波器,或其他大量方法中的某一方法。
三、实验内容
1、正弦信号的混叠
以不同组合的
和
绘出
可以说明混叠问题。
以下,取抽样频率
=8kHz。
a.首先绘出一个被抽样的正弦波单图。
令正弦波的频率为300Hz,然后在10ms长间隔上抽样。
相位
可以任意指定。
使用stem绘出产生的离散时间信号。
b.如果必要,使用plot绘图。
c.把正弦波的频率从100Hz变至475Hz,每次增加125Hz,如在(a)部分中那样,绘出一系列相应的图。
注意,正如所预期的那样,显现的正弦信号的频率在逐渐增加。
最好用subplot指令把四个图放在同一个屏上。
d.把正弦波的频率从7525Hz变至7900Hz,每次增加125Hz,如在(c)部分中那样,绘出一系列相应的图。
注意现在显现的正弦信号的频率在逐渐减少。
解释这一现象。
e.把正弦波的频率从32,100Hz变至32,475Hz,每次增加125Hz,绘出一系列相应的图。
提前预测显现的正弦信号的频率是在逐渐增加还是减少。
问题a、b:
程序:
%%3.1.a.绘出一个被抽样的正弦波
f0=300;%正弦波的频率
fs=8000;%抽样频率
nn=0:
79;%在10ms长间隔上抽样
t=nn/fs;
x=sin(2*pi*300*t);%产生离散时间信号
subplot(211)
stem(nn,x)%使用stem绘出产生的离散时间信号
grid,title('sinussample'),xlabel('n'),ylabel('x(n)')
subplot(212)
plot(nn,x)%使用plot绘出产生的离散时间信号
grid,title('sinussample'),xlabel('n'),ylabel('x(n)')
结果:
图3-1-a、b(上面的是由stem绘出的,下面的是plot绘出的)
结果分析:
(1)由上图可见,使用stem绘出的图可以很容易看到正弦波的轮廓;
(2)使用plot绘出的图可以实现由离散时间样本产生连续时间信号的“信号重建”,因此plot可也以作为信号重建的一种方法。
问题c:
程序:
%%3.1.c.改变正弦波的频率f0从100Hz变至475Hz,每次增加125Hz
f0=-25;
fora=1:
4%采用for循环改变频率
f0=f0+125;%每次增加125Hz,%频率从100Hz变至475Hz
fs=8000;%抽样频率
nn=0:
79;%在10ms长间隔上抽样
t=nn/fs;
x=sin(2*pi*f0*t);%产生离散时间信号
subplot(4,1,a)
stem(nn,x,'.')
grid,title('sinussample'),xlabel('n'),ylabel('x(n)')
end
结果:
图3-1-c
结果分析:
由上图可知,正如预期的一样,当正弦波的频率从100Hz变至475Hz时,显现的正弦波的频率在逐渐增加。
问题d:
程序:
%%3.1.d.改变正弦波的频率f0从7525Hz变至7900Hz,每次增加125Hz
f0=7400;
fora=1:
4%采用for循环改变频率
f0=f0+125;%每次增加125Hz,%频率从7525Hz变至7900Hz
fs=8000;%抽样频率
nn=0:
79;%在10ms长间隔上抽样
t=nn/fs;
x=sin(2*pi*f0*t);%产生离散时间信号
subplot(4,1,a)
stem(nn,x,'.')
grid,title('sinussample'),xlabel('n'),ylabel('x(n)')
end
结果:
图3-1-d
结果分析:
由上图可知,当正弦波的频率从7525Hz变至7900Hz时,抽样显现的正弦波的频率在逐渐减少。
问题e:
程序:
%%3.1.e.改变正弦波的频率f0从32100Hz变至32475Hz,每次增加125Hz
f0=31975;
fora=1:
4%采用for循环改变频率
f0=f0+125;%每次增加125Hz,%频率从32100Hz变至32475Hz
fs=8000;%抽样频率
nn=0:
79;%在10ms长间隔上抽样
t=nn/fs;
x=sin(2*pi*f0*t);%产生离散时间信号
subplot(4,1,a)
stem(nn,x,'.')
grid,title('sinussample'),xlabel('n'),ylabel('x(n)')
end
结果:
图3-1-e
结果分析:
由上图可知,当正弦波的频率从32,100Hz变至32,475Hz时,抽样显现的正弦波的频率在逐渐增加,与提前预测的结果相同。
3、产生信号
a.产生一个模拟频率为
的余弦信号作为仿真的模拟信号。
随机选定相位。
在长度为T的时间间隔上,以速率
产生抽样样本。
选择仿真模拟信号长度T以取得大约900到1000个样本。
b.用plot指令绘出时间信号以便将样本连接起来。
用实际连续时间标记时间轴。
c.绘出此信号的傅里叶变换(参见前面的fmagplot函数)。
问题a:
程序:
%3.3.a产生一个频率为f0的余弦信号作为仿真的模拟信号
clf
nn=0:
999;%样本数量为1000
f0=300;%余弦信号的频率
fsim=80000;%仿真抽样频率
t=nn/fsim;
xa=cos(2*pi*f0*t);%产生余弦信号作为仿真的模拟信号
stem(nn,xa)
grid,title('cosinesample'),xlabel('n'),ylabel('xa')
结果:
图3-3-a
问题b:
程序:
%3.3.b使用plot绘出产生的离散时间信号
plot(nn/8000,xa)%将样本连接起来,并用实际连续时间标记时间轴
grid,title('cosinesample'),xlabel('n'),ylabel('xa')
结果:
图3-3-b
问题c:
程序:
%3.3.c绘出此信号的傅里叶变换
fmagplot(xa,0.0000125)
结果:
图3-3-c
4、A/D转换
a.绘出
=8kHz时产生的离散时间信号。
b.计算离散时间信号的DTFT并解释它如何与模拟信号的傅里叶变换相联系。
问题a:
程序:
%3.4.a绘出fs=8KHz时产生的离散时间信号
L1=fsim/fs;
y=xa(1:
L1:
1000);%产生离散时间信号
L2=1000/L1;%离散时间信号的长度
n1=0:
L2-1;
stem(n1,y)
grid,title('AD'),xlabel('n'),ylabel('x(n)')
结果:
图3-4-a
问题b:
程序:
%3.4.b计算离散时间信号的DTFT
[H,W]=dtft(y,1000);
subplot(211)
plot(W/2/pi,abs(H));
grid,title('幅频响应'),xlabel('NORMALIZEDFREQUENCY'),ylabel('|H(w)|')
subplot(212)
plot(W/2/pi,180/pi*angle(H));
grid,title('相频响应'),xlabel('NORMALIZEDFREQUENC'),ylabel('DEGREES')
结果:
图3-4-b
5、设计一个重建滤波器
a.显然必须以用数字滤波器仿真实际模拟滤波器的方式来实现重建滤波器。
使用MATLAB滤波器设计的cheby2函数来设计这一滤波器:
这样设计出的滤波器将是一个阻带衰减60dB的9阶滤波器。
模拟的截止频率必须是
。
对MATLAB这一频率必须按比例变成
b.使用freqz指令绘出所仿真的重建滤波器的频率响应。
要得到它的实际模拟截止频率,必须记住它是数字滤波器,频率
映射为
。
问题a:
程序:
%%3.5设计一个重建滤波器
fsamp=8000;
fcut=2*(fsamp/2)/fsim;%截止频率
[b,a]=cheby2(9,60,fcut);%设计阻带衰减60dB的9阶滤波器
N=1000;
[HH,WW]=freqz(b,a,N,'whole');%使用freqz指令绘出所仿真的重建滤波器的频率响应
mid=ceil(N/2)+1;
WW(mid:
N)=WW(mid:
N)-2*pi;
WW=fftshift(WW);
HH=fftshift(HH);
subplot(211),plot(WW/2/pi,abs(HH));
grid,title('幅频响应'),xlabel('NORMALIZEDFREQUENCY'),ylabel('|H(w)|')
subplot(212),plot(WW/2/pi,180/pi*angle(HH));
grid,title('相频响应'),xlabel('NORMALIZEDFREQUENCY'),ylabel('DEGREES')
结果:
图3-5
6、D/A转换
a.在对实验3.3中产生的并在实验3.4中抽样的信号进行插零操作,然后应用Chebyshev重建滤波器以得到平滑的输出
。
b.绘出得到的连续时间输出信号
及它的傅里叶变换。
程序:
%%3.6D/A转换
r=zeros(1,L2);%建立0序列,长度L2
fori=0:
L2-1%每两个数之间补9个零
r(i*L1+1)=y(i+1);
end
r=[r,zeros(1,9)];%序列最后补9个0
xr=filter(b,a,r);%应用chebyshev重建滤波器得到平滑的输出xr
clf
n=0:
999;
figure
(1)
plot(n,xr)
grid,xlabel('t'),ylabel('xr(t)')
figure
(2)
fmagplot(xr,0.0000125)%得到xr的傅里叶变换
图3-6-a
图3-6-b
7、测试混叠
a.取抽样频率
:
并令输入信号的频率
kHz。
绘出输入和输出的傅里叶变换,把它们绘在一起进行比较。
b.现在实验几个不同的输入信号频率:
kHz,7kHz,9kHz,10kHz和15kHz。
由于
只是100kHz,所取输入频率不应大于20kHz,绘出输入和输出的傅里叶变换,并作比较,注意何处开始混叠。
c.为了在同一张图上说明混叠效应,使用subplot指令把下面的四个信号
、
、
及插入零点后重建的模拟信号
绘在一起。
另一有意义的多子图是把
、
及他们的傅里叶变换一起显示。
问题a、b:
程序:
functiontest(f0)%产生一个频率为f0的余弦信号作为仿真的模拟信号
%f0;余弦信号的频率
nn=0:
999;%样本数量为1000
fs=8000;%抽样频率8kHz
fsim=100000;%仿真抽样频率100kHz
t=nn/fsim;
xa=cos(2*pi*f0*t);%产生余弦信号作为仿真的模拟信号
%绘出此信号的傅里叶变换
subplot(211)
fmagplot(xa,0.00001)%注意横轴坐标是f,且单位是kHz
%fs=8KHz时产生的离散时间信号
L1=fix(fsim/fs);
y=xa(1:
L1:
1000);%产生离散时间信号
L2=fix(1000/L1);%离散时间信号的长度
%D/A转换
r=zeros(1,L2);%建立0序列,长度L2
fori=0:
L2-1%每两个数之间补9个零
r(i*L1+1)=y(i+1);
end
r=[r,zeros(1,9)];%序列最后补9个0
%重建滤波器
fsamp=8000;
fcut=2*(fsamp/2)/fsim;%截止频率
[b,a]=cheby2(9,60,fcut);%设计阻带衰减60dB的9阶滤波器
xr=filter(b,a,r);%应用chebyshev重建滤波器得到平滑的输出xr
subplot(212)
fmagplot(xr,0.00001)%横轴坐标是f,且单位是kHz
结果如下:
f=2kHz时,
图3-7-a2khz
f=6kHz时,
图3-7-b6khz
f=7khz
图3-7-b7khz
f=9khz
图3-7-b9khz
f=10khz
图3-7-b10khz
f=15khz
图3-7-b15khz
问题c: