带通滤波器的matlab实现

带通滤波器的matlab实现,matlab,filtering,lowpass-filter,Matlab,Filtering,Lowpass Filter,我有两个原始信号X和Y,它们测量的是恒速旋转轴的振动。速度633.33赫兹。我的目标是只提取特定的频率分量(比如1X或.35X)并为它们绘制轨道(X信号与Y信号绘制)。我获取原始信号,使用巴特沃斯滤波器应用低通滤波器。它给了我平稳的时域信号。现在,当我尝试在频率(630Hz到640Hz)之间应用巴特沃斯带通滤波器时,它不能正常工作。我不知道我做得对不对。 下图是应用低通滤波器(巴特沃斯)后的图像 这是我应用巴特沃斯低通和带通滤波器后的另一个例子。原始信号完全改变 我希望滤波器能像这样做,为1

我有两个原始信号X和Y,它们测量的是恒速旋转轴的振动。速度633.33赫兹。我的目标是只提取特定的频率分量(比如1X或.35X)并为它们绘制轨道(X信号与Y信号绘制)。我获取原始信号,使用巴特沃斯滤波器应用低通滤波器。它给了我平稳的时域信号。现在,当我尝试在频率(630Hz到640Hz)之间应用巴特沃斯带通滤波器时,它不能正常工作。我不知道我做得对不对。 下图是应用低通滤波器(巴特沃斯)后的图像

这是我应用巴特沃斯低通和带通滤波器后的另一个例子。原始信号完全改变

我希望滤波器能像这样做,为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
我还附上了我的简历供参考


我是滤波器和DSP的新手。有没有人能给我一些建议、提示或想法来解决这个问题

低通信号后(即[b2,a2]=butter(6,5*633/(fs/2),“低”);您可以将采样频率从2 MHz降低到~4 kHZ,并且不会看到结果有太大变化。在这种情况下,下采样不会改变滤波器尚未降低的任何分辨率

你可以用e。应用低通后,使用重采样(x,1500)将您的2 MHz信号降采样到4 kHz。那么窄带通就不会有问题了。确保将新的取样格栅传递到过滤器上


此外,如果您有完整的信号可用,请使用filtfilt而不是filt以避免相位失真。在这种情况下,您可以稍微降低滤波器阶数,但低通和带通的第四阶(重采样后)应该可以正常工作。

您制作了一个通带极窄的滤波器,因此其脉冲响应非常长。这就是你在过滤的X/Y组件中看到的;它还在上升。如果你的实验持续更长的时间,你会看到一个基本上是两个正弦波的稳态。有没有其他方法来设计绝对窄带通滤波器?@OliverCharlesworth我试着做抽取,这样我也失去了信号的分辨率。我试图探索MATLAB文档。这有点令人困惑,我仍然找不到任何有用的提示或想法。你能帮我找到更好的方法来设计绝对窄带吗?提前谢谢。正如我在你的另一个问题中所说的,你的采样频率高得离谱!650Hz信号的两兆赫采样简直是荒谬可笑。对于带宽高达20kHz的信号,CDs采样频率为44.1kHz。它们通常被认为对高保真听觉来说是合理的(尽管发烧友们会不同意)。@peter K.我试图降低采样频率,但我正在失去分辨率,最终大量噪音开始发挥作用。我还尝试了“抽取”的方法,这给了我不利的结果。