实验一、数字信号采样与重建
实验文档
1.
信号降采样
decimate
decimate
函数只能降低采样率,或者说只能实现信号的抽取。
比如:y = decimate(x,r)
x是样本信号,这里将输入信号x的采样率降低r倍,即在x的数据点中每r个点中,只保留一个点。
t = 0:.0003:1;
% Time vector
x = sin(2*pi*30*t) + sin(2*pi*60*t);
y = decimate(x,5)
subplot(1,2,1);
stem(x(1:120)), axis([0 120 -2 2])
% Original signal
title(
‘Original Signal’
)
subplot(1,2,2);
stem(y(1:30))
% Decimated signal
title(
‘Decimated Signal’
)
t=0:0.002:0.029;
x = sin(2*pi*30*t) + sin(2*pi*60*t);
y = interp(x,10);
subplot(211);
stem(x);
title(
‘Original Signal’
);
subplot(212);
stem(y);
title(
‘Interpolated Signal’
);
3.
任意降采样
y=resample(x,p,q,n,beta)
x
:待重采样信号;
p:目标采样率;
q:待重采样信号的采样率;
n:滤波器长度与n成正比,采用chebyshevIIR型低通滤波器的阶数,缺省值为10;
beta:设置低通滤波器使使用Kaiser窗的参数,缺省值为5;
Fs = 100;
tx = linspace(0,1,21) + .015*rand(1,21);
x = sin(2*pi*tx);
[y, ty] = resample(x, tx, Fs);
plot(tx,x,
‘–‘
,ty,y,
‘o:’
)
legend(
‘original’
,
‘resampled’
);
xlabel(
‘Time’
)
axis
tight
4
采样定理与频谱分析
Fs=10000;
tx = 0:0.0002:1;
a=50*sqrt(2)*pi;b=a;
x=exp(-a*tx).*sin(b*tx);
[y, ty] = resample(x, tx, Fs);
[h,w]=freqz(x);
[h1,w1]=freqz(y);
subplot(211);
plot(w(1:512),abs(h(1:512)));
subplot(212);
plot(w1(1:512),abs(h1(1:512)));
Fs=100;
tx = 0:0.0002:1;
a=50*sqrt(2)*pi;b=a;
x=exp(-a*tx).*sin(b*tx);
[y, ty] = resample(x, tx, Fs);
[h,w]=freqz(x);
[h1,w1]=freqz(y);
subplot(211);
plot(w(1:512),abs(h(1:512)));
subplot(212);
plot(w1(1:512),abs(h1(1:512)));
5
连续时间傅里叶变换与离散时间傅里叶变换
连续时间傅里叶变换
dt = 0.00005;
t = -0.005:dt:0.005;
A=100;a=50*sqrt(2)*pi;b=a;
xa=exp(-a*t).*sin(b*t);
%contunites_time fourier transform
Wmax = 2*pi* 2000;
K = 500;
k = 0: 1: K;
W = k*Wmax/K;
Xa = xa * exp(-1i * t’*W)*dt;
Xa = real(Xa);
W = [-fliplr(W),W(2:501)];
Xa = [fliplr(Xa),Xa(2:501)];
subplot(2,1,1);
plot(t*10000,xa);grid
title(
‘analog signal’
);
xlabel(
‘t (ms)’
);
ylabel(
‘xa(t)’
);
subplot(2,1,2);
plot(W/(2*pi*1000),Xa*1000);grid
title(
‘continues_time fourier transform’
);
xlabel(
‘f (Khz)’
);
ylabel(
‘Xa(jw) * 1000’
);
离散时间傅里叶变换
dt = 0.00005;
t = -0.005:dt:0.005;
A=100;a=50*sqrt(2)*pi;b=a;
xa=exp(-a*t).*sin(b*t);
ts = 0.0002;
n = -40:1:40;
x=exp(-a*n*ts).*sin(b*n*ts);
K = 500;
k = 0:1:K;
w = 2*pi*k/K;
X = x*exp(-1i *n’*w);
X= real(X);
w = [-fliplr(w),w(2:K+1)];
X = [fliplr(X),X(2:K+1)];
subplot(2,1,1);
plot(t*1000,xa);
title(
‘discrete signal’
);
xlabel(
‘t in msec’
);
ylabel(
‘x(n)’
);
hold
on
stem(n*ts*1000,x);
gtext(
‘ts = 0.2msec’
); hold
off
subplot(2,1,2);
plot(w/pi, X);
title(
‘discrete_time fourier transform’
);
xlabel(
‘frequence in pi unit’
);
ylabel(
‘X(w)’
);
6.信号采样与重构
clear
all
;
wm=1;
wc=wm;
Ts=pi/wm;
ws=2*pi/Ts;
n=-100:100;
nTs=n*Ts;
f=sinc(nTs/pi);
t=-20:0.005:20;
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(3,1,1);
stem(t1,f1);
xlabel(
‘kTs’
); ylabel(
‘f(kTs)’
);
title(‘sa(t)=sinc(t/pi)
临界采样信号
‘);
subplot(3,1,2);
plot(t,fa);
xlabel(
‘t’
); ylabel(
‘fa(t)’
);
title(‘
由
sa(t)=sinc(t/pi)
的临界采样信号重构
sa(t)’);
grid
on
;
subplot(3,1,3);
plot(t,error);
xlabel(
‘t’
); ylabel(
‘error(t)’
);
title(‘
临界采样信号与原信号的误差
error(t)’);
clear
all
;
wm=1;
wc=wm;
Ts=pi/wm;
ws=4*2*pi/Ts;
n=-100:100;
nTs=n*Ts;
f=sinc(nTs/pi);
t=-20:0.005:20;
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(3,1,1);
stem(t1,f1);
xlabel(
‘kTs’
); ylabel(
‘f(kTs)’
);
title(‘
临界采样信号与原信号的误差
error(t)’);
subplot(3,1,2);
plot(t,fa);
xlabel(
‘t’
); ylabel(
‘fa(t)’
);
title(‘
由
sa(t)=sinc(t/pi)
的过采样信号重构
sa(t)’);
grid
on
;
subplot(3,1,3);
plot(t,error);
xlabel(
‘t’
); ylabel(
‘error(t)’
);
title(‘
过采样信号与原信号的误差
error(t)’);
clear
all
;
wm=1;
wc=wm;
Ts=3*pi/wm;
ws=pi/Ts;
n=-100:100;
nTs=n*Ts;
f=sinc(nTs/pi);
t=-20:0.005:20;
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(3,1,1);
stem(t1,f1);
xlabel(
‘kTs’
); ylabel(
‘f(kTs)’
);
title(‘sa(t)=sinc(t/pi)
欠采样信号
‘);
subplot(3,1,2);
plot(t,fa);
xlabel(
‘t’
); ylabel(
‘fa(t)’
);
title(‘
由
sa(t)=sinc(t/pi)
的欠采样信号重构
sa(t)’);
grid
on
;
subplot(3,1,3);
plot(t,error);
xlabel(
‘t’
); ylabel(
‘error(t)’
);
title(‘
欠采样信号与原信号的误差
error(t)’);