我有两个原始信号X和Y,测量恒定速度633.33 Hz下旋转轴的振动。我的目标是仅提取特定频率分量(比如1X或.35X)并绘制轨道(X信号对Y信号)。我取原始信号,用巴特沃思滤波器进行低通滤波。它给了我时域中的平滑信号。现在当我'我尝试在频率(630 Hz到640 Hz)之间应用巴特沃思带通滤波器,但它不能正常工作。我不知道我是否做对了。下图是应用低通滤波器(巴特沃斯)后的图像。
这是另一个后,我应用巴特沃思低通和带通滤波器。有完全改变了原来的信号。
我希望滤波器能做类似这样的事情,对于1X频率分量,轨道更干净。
我的MATLAB代码如下。
L = length(X); % length of signal
fs= 2e6; % sampling frequency
df = fs/L; % Frequency window
dt = 1/df; % time window
%calculate time axis
T = (0:dt:(L-1)*dt)';
subplot(3,2,1);
plot(T,X);
title('before filtering X signal')
subplot (3,2,2);
plot(T,Y);
title('before filtering Y signal')
subplot(3,2,5);
plot(X,Y);
title('Orbits before filtering')
X = detrend(X,0); % Removing DC Offset
Y = detrend(Y,0); % Removing DC Offset
% Butterworth low pass filter to remove high frequency components
[b2,a2] = butter(6,5*633/(fs/2),'low');
dataInX = X;
X = filter(b2,a2,dataInX); %filter command filters
dataInY = Y;
Y = filter(b2,a2,dataInY);
% butter worth band pass to only plot for 1X frequency component
[b1,a1] = butter(1,[633/(fs/2) 640/(fs/2)],'bandpass');
dataInX = X;
X = filter(b1,a1,dataInX); %filter command filters
dataInY = Y;
Y = filter(b1,a1,dataInY);
subplot(3, 2 ,3);
plot(T,X);
axis tight
title('X signal after filtering')
subplot(3,2,4);
plot(T,Y);
axis tight
title('Y signal after filtering')
subplot(3,2,6);
plot(X,Y);
title('Orbit after filtering')
axis tight
我还附上了我的data file以供参考。
我是过滤器和DSP的新手。有人能提供建议或提示或想法来解决这个问题吗?
1条答案
按热度按时间b5lpy0ml1#
在低通信号之后(即[b2,a2] = butter(6.5 *633/(fs/2),“低”);)你可以从2 MHz下采样到~ 4 kHz,结果不会有太大的变化。在这种情况下,下采样不会改变滤波器尚未降低的任何分辨率。
在应用低通滤波器后,你可以使用resample(x,1,500)将2 MHz信号降采样到4 kHz。这样你的窄带通就不会有问题了。确保将新的采样率传递到滤波器上。
此外,如果您有完整的信号可用,请使用filtfilt而不是filt来避免相位失真。在这种情况下,您可以稍微降低滤波器阶数,但低通和带通(重采样后)的4阶应该可以正常工作。