整数倍内插

整数倍内插是先在已知抽样序列的相邻点之间等间隔地插入(I-1)零值点然后进行低通滤波,即可求得I倍内插的结果。整数倍零值内插当然不能简单的等同于提高了数据采样频率,但经过零值内插的数字信号,其频谱一定是增加了I倍。

假设模拟信号在0~1KHz的频段内有信号,利用2KHz的频率进行A/D采样,则采样后的信号没有频谱混叠,频谱周期为2KHz,信号频谱如下图(a)所示。根据零值内插规则,对采样数据进行2倍零值内插后,其信号频谱如下图(b)所示。
在这里插入图片描述
需要注意:插值前的信号采样率为2KHz,频谱周期为2KHz,零值内插后信号速率为4KHz,频谱周期为4KHz。如果在零值内插后增加一级低通滤波器,其截止频率为1KHz,则滤波后的频谱周期依然为4KHz,只是滤掉了频率在1~3KHz之间频谱成分,则滤波后的信号频谱变成了图中(d)所示。也就是说,经过零值内插、低通滤波处理后,即可得到正确的经高速采样后的数字信号。

8倍内插前后仿真时域波形
在这里插入图片描述
源码:

%E6_2_InterSpec.m文件源代码
%用Matlab仿真整数倍内插过程的信号变换关系。假设原始信号为频率为100Hz的正弦波,初始采样频率为400Hz。仿真对信号进行4倍内插后的信号波形
%图。比较内插前后信号的时域波形变化。

%定义参数
f=100;       %信号频率为100Hz
Fs=800;      %采样频率为400Hz
I=8;         %内插倍数

%产生信号
t=0:1/Fs:0.5;
c=2*pi*f*t;
si=sin(c);%产生正弦波

%进行4倍零值内插处理
Isi=zeros(1,length(si)*I);
Isi(1:I:length(Isi))=si;

%经低通滤波器处理
b=fir1(80,1/I);
FilterS=filter(b,1,Isi);
FilterS=FilterS/max(abs(FilterS));

%画图
% subplot(211);
% stem(si(1:20));
% subplot(212);
% stem(FilterS(20:40));
subplot(211);stem(si(1:40));axis([0 40 -1.2 1.2]);
subplot(212);stem(FilterS(40:105));axis([0 66 -1.2 1.2]);
% dt=zeros(1,length(t)/D);
% dt=t(1:D:length(t));
% 
% x=0:length(Spec_sin_noise)-1;
% x=x/length(x)*Fs;
% subplot(311); plot(x,Spec_sin_noise); axis([0 Fs/2 -50 0]);
% xlabel('频率(Hz)','fontsize',8); ylabel('功率','fontsize',8);
% title('C/N0=40dB/Hz的正弦波信号频谱图','fontsize',8);grid;
% x=0:length(Spec_d2)-1;
% x=x/length(x)*Fs/D;
% subplot(312); plot(x,Spec_d2); axis([0 Fs/2/D -50 0]);
% xlabel('频率(Hz)','fontsize',8); ylabel('功率','fontsize',8);
% title('直接进行8倍抽取后的信号频谱图','fontsize',8);grid;
% x=0:length(Spec_Fd2)-1;
% x=x/length(x)*Fs/D;
% subplot(313); plot(x,Spec_Fd2); axis([0 Fs/2/D -50 0]);
% xlabel('频率(Hz)','fontsize',8); ylabel('功率','fontsize',8);
% title('低通滤波后进行8倍抽取后的信号频谱图','fontsize',8);
% grid;
% 

猜你喜欢

转载自blog.csdn.net/gemengxia/article/details/115175996