我目前正在研究 Robert Bond Randall 的《基于振动的状态监测》一书(第二版)。
我试图在 Matlab 中实现一种算法来“增加”给定信号的采样率。本书第 148 页说明了两种方式:
- 在时域中“在每个实际样本之间插入适当数量的零,然后应用数字低通滤波器将频率范围限制为原始最大值(它还需要与采样因子成比例地重新调整);
- 在频域中“通过在中心用零填充 FFT 频谱,然后将增加的(两侧)频谱逆变换为相同数量的时间样本。”
我的实现如下
N = 32;
pad = 34;
t1 = linspace(0,1,N);
t2 = linspace(0,1,N+pad);
s = sin(2*pi*t1);
N = length(s);
% FFT
S = fft(s);
paddedS = [S(1:N/2-1) S(N/2)/2 zeros(1,pad-1) S(N/2)/2 S(N/2+1:end)];
% Inverse transform
K = (N+pad)/N; % Scaling factor
i = ifft(S);
paddedI = ifft(paddedS)*K;
% Plot
plot(t1,i, '-o')
hold on
plot(t2,paddedI, '-o')
不过我对结果不满意,函数的最后部分有一个工件,如下所示
我认为问题出在“paddedS”定义中,但对我来说似乎是正确的,你能发现错误吗?
先感谢您。
