频域插值改变了信号频谱

时间:2014-12-09 16:41:20

标签: matlab fft interpolation frequency

我正在研究一些与正弦扫描激发相关的实验数据。

我首先使用从数据文件中获得的幅度和频率信息重建信号:

% finz: frequency
% ginz: amplitude
R = 4; % sweep rate
tz = 60/R*log2(finz/finz(1)); % time
u_swt = sin(2*pi*((60*finz(1)/(R*log(2.))*(2.^(R/60*tz)-1))));
time_sign = ginz.*u_swt;
freq_sign = fft(time_sign);

这是我获得的: enter image description here

然后我尝试在计算时间信号之前插入频率数据以获得更好的频率数据。信号(有更多样本,应该更容易重建它):

ginz = interp(ginz,200);
finz = interp(finz,200);

但现在光谱发生了变化: enter image description here

为什么频谱如此不同?我在插值中做错了吗?我不应该插入数据吗?

1 个答案:

答案 0 :(得分:1)

您正在使用的信号的详细信息对我来说并不清楚。例如,您能否提供finz和ginz的典型示例?此外,目前还不清楚你希望通过插值实现什么,因此很难就其使用提出建议。

但是,如果插入时间序列,您应该期望其频谱发生变化,因为会增加采样频率。内插信号的频率相对于新的采样频率将变得更小。因此,信号频谱将(在这里不是非常技术性)推向零。我在下面提供了一个脚本,它创建了白高斯噪声,并绘制了不同插值级别的频谱。在没有插值的第一个子图中,频谱被均匀地占用(通过设计 - 白噪声)。在随后的子图中,随着插值的增加,占用的频谱变得越来越小。希望这会有所帮助。

% white Gaussian noise (WGN)
WGN = randn(1,1000);
% DFT of WGN
DFT_WGN = abs(fft(WGN));
% one-sided spectrum
DFT_WGN = DFT_WGN(1:length(WGN)/2);

% interpolated WGN by factor of 2 (q = 2)
WGN_interp_2 = interp(WGN,2);
% DFT of interpolated WGN
DFT_WGN_interp_2 = abs(fft(WGN_interp_2));
% one-sided spectrum
DFT_WGN_interp_2 = DFT_WGN_interp_2(1:length(DFT_WGN_interp_2 )/2);

% interpolated WGN by factor of 10 (q = 10)
WGN_interp_10 = interp(WGN,10);
% DFT of interpolated WGN
DFT_WGN_interp_10 = abs(fft(WGN_interp_10));
% one-sided spectrum
DFT_WGN_interp_10 = DFT_WGN_interp_10(1:length(DFT_WGN_interp_10 )/2);

figure
subplot(3,1,1)
plot(DFT_WGN)
ylabel('DFT')
subplot(3,1,2)
plot(DFT_WGN_interp_2)
ylabel('DFT (q:2)')
subplot(3,1,3)
plot(DFT_WGN_interp_10)
ylabel('DFT (q:10)')

Effect of interpolation on WGN