【问题标题】:Band pass implementation matlab带通实现matlab
【发布时间】: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


【解决方案1】:

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

你可以在应用低通后,使用 resample(x,1,500) 将 2 MHz 信号下采样到 4 kHz。那么你的窄带通应该没有问题。确保将新的采样率传递给过滤器。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 2017-08-30
    • 2017-08-01
    • 1970-01-01
    • 2017-04-06
    相关资源
    最近更新 更多