【发布时间】:2015-05-20 15:07:05
【问题描述】:
我有 2 个原始信号 X 和 Y 在 const 测量旋转轴的振动。速度 633.33 赫兹。我的目标是只提取特定的频率分量(比如 1X 或 .35X)并为它们绘制轨道(X 信号相对于 Y 信号绘制)。我采用了原始信号,并使用巴特沃斯滤波器应用了低通滤波器。它在时域给了我平滑的信号。现在,当我尝试在频率(630 Hz 到 640 Hz)之间应用巴特沃斯带通滤波器时,它无法正常工作。我不知道我做得对不对。 下图是应用低通滤波器(butterworth)后的效果。
这是我应用了巴特沃斯低通和带通滤波器之后的另一个。原来的信号完全变了。
我希望滤波器能够为 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 领域的新手。有人可以通过建议或提示或想法来帮助解决这个问题。
【问题讨论】:
-
您制作了一个通带极窄的滤波器,因此它的脉冲响应非常长。这就是您在过滤后的 X/Y 组件中看到的内容;它仍在上升。如果您的实验运行时间更长,您会看到一个基本上是两个正弦曲线的稳态。
-
有没有其他方法可以设计绝对窄带通滤波器?
-
@OliverCharlesworth 我尝试进行抽取,因此我也失去了信号的分辨率。我试图探索 MATLAB 文档。这有点令人困惑,我仍然找不到任何帮助提示或想法。你能帮助我为绝对窄带设计它的更好方法吗?提前致谢。
-
正如我在您的另一个问题中所说,您的采样频率高得离谱!对 650Hz 信号进行两兆赫兹采样简直荒谬。对于带宽高达 20kHz 的信号,CD 以 44.1kHz 采样。而且它们通常被认为适合高保真聆听(尽管发烧友会不同意)。
-
@peter K. 我试图降低采样频率,但我失去了分辨率,最终大量噪音开始发挥作用。我还尝试了“抽取”方法,这也给了我不利的结果。
标签: matlab filtering lowpass-filter