数字信号处理——序列的抽取与插值
对序列的抽取和插值可以实现多抽样率。多种媒体——语音、视频、数据——的传输,它们的频率很不相同,抽样率自然不同,必须实行抽样率的转换;又如,为了减小由于抽样率太高造成的数据冗余,有时需要降低抽样率。
序列的抽取
对于序列的抽 取是在对模拟信号采样后的x[n]序列在进行等间隔的抽取。
MATLAB仿真
N = 256; %数据的长度
L = 512;%DFT的点数
f1 = 50; f2 =120; fs =600;
Ts = 1/fs;
ws = 2*pi*fs;
t = (0:N -1 )*Ts;
x = cos(2*pi*f1*t) ;
% x = cos(2*pi*f1*t) + cos(2*pi*f2*t);
% X = fftshift(fft(x,L));
X = fft(x,L);
% w = (-ws/2+(0:L-1)*ws/L)/(2*pi);
w = ((0:L-1)*ws/L)/(2*pi);
K =0:L-1;
% plot(t,x,'-*');
% % stem(t,x,'o');
%title('时域波形');
% figure
% % plot(K/L,abs(X));
% plot(w,abs(X));
% ylabel('幅度谱');
%title('频谱图');
% %***********************序列的抽取************************
% M =4;
% k = 0:N -1;
% x1 = downsample(x,M);
%
% %时域波形
% subplot(2,1,1);stem(k,x,'.');
% title('x[k]');
% subplot(2,1,2);stem(0:length(x1)-1,x1,'.');
% title('x1[k]');
% figure
% %频域波形
% X1 = fft(x1,L);
% % subplot(2,1,1);
% plot(w,abs(X));
% hold on
% % subplot(2,1,2);
% plot(w,abs(X1),'-r');
对序列抽取进行分析
对信号进行M抽取后,其频谱的变化,首先频谱的宽度变为原来的M倍,序列抽取M倍不混叠的条件:X(e^jΩ)=0,|Ω|>pi/M,即原序列的截止频率乘以M要小于Pi。频谱的高度变为原来的1/M。
序列的插值
对序列的插值是对采样后的序列,每个数据之间插入0值,注意要区分于对序列末尾的补0。
N = 256; %数据的长度
L = 512;%DFT的点数
f1 = 50; f2 =120; fs =600;
Ts = 1/fs;
ws = 2*pi*fs;
t = (0:N -1 )*Ts;
x = [ones(1,128),zeros(1,128)];
% X = fftshift(fft(x,L));
X = fft(x,L);
% w = (-ws/2+(0:L-1)*ws/L)/(2*pi);
w = ((0:L-1)*ws/L)/(2*pi);
K =0:L-1;
% plot(t,x,'-*');
% % stem(t,x,'o');
%title('时域波形');
% figure
% % plot(K/L,abs(X));
% plot(w,abs(X));
% ylabel('幅度谱');
%title('频谱图');
% ***********************序列的内插************************
M = 4;
k = 0:N -1;
x2 = upsample(x,M);
% [x2,h] = interp(x,M);
%时域波形
subplot(2,1,1);stem(k,x,'.');
title('x[k]');
subplot(2,1,2);stem(0:length(x2)-1,x2,'.');
title('x1[k]');
figure
%频域波形
X2 = fft(x2,L);
% subplot(2,1,1);
plot(w,abs(X));
hold on
% subplot(2,1,2);
plot(w,abs(X2),'-r');
对序列内插分析
对信号进行M倍内插后,频谱的宽度进行了M倍的压缩,0到1的范围内会出现多个频谱,频谱的幅度不会受到影响。
多速率的实现
在抽取和内插的应用中都要配合合适的滤波器。对序列的抽取前要先做防混叠的低通滤波,再进行抽取。对于序列的内插,首先对序列进行内插,然后要通过低通滤波器,消除不需要的映像部分。
本文引用了其他文章资料,如有侵权,联系本人会做出修改。版本1.0,2019.10.14 作者小飞。