【问题标题】:Apply high pass filter to signal in Matlab在 Matlab 中对信号应用高通滤波器
【发布时间】:2012-09-22 03:18:27
【问题描述】:

我有一组来自 611 个图像(尺寸 3x611)的 ROI 的平均 RGB 像素值。这些图像的拍摄时间超过 64 秒。我将每个颜色流的平均值解释为随时间变化的信号,并将其绘制在 Matlab 中。我还使用 fft() 绘制功率谱。在这个功率谱中,我在低频范围内获得了巨大的价值。我想删除这些值,因此想要一个截止频率为 0.2 Hz 的高通滤波器。我还希望这个滤波器非常锐利,完全抑制低于 0.2 Hz 的频率的功率,并保持高于 0.2 Hz 的频率的功率。请提出一种方法来做到这一点。

代码直到我得到绿色流的功率谱

imageFiles = dir('*.png');      
noFiles = length(imageFiles);    % Number of files found
avgVals = zeros(noFiles,3);

noise = 0;                       %Boolean for noise: if 1, then ROI moves randomly

noiseV = 0;
noiseH = 0;

for i=1:noFiles
   curFileName = imageFiles(i).name;
   curImage = imread(curFileName);

   temp1  = curImage(175:215 , 290:385, 1);
   avgVals(i,1) = (sum(sum(temp1)'))/3936;

   temp2  = curImage(175:215 , 290:385, 2);
   avgVals(i,2) = (sum(sum(temp2)'))/3936;

   temp3  = curImage(175:215 , 290:385, 3);
   avgVals(i,3) = (sum(sum(temp3)'))/3936;
end

Rstream = avgVals(:,1);
Gstream = avgVals(:,2);
Bstream = avgVals(:,3);

%plot actual signal with respect to time
xAxis = (0:64/610:64);
plot(xAxis,Rstream,'r');
hold on;
plot(xAxis,Gstream,'g');
hold on;
plot(xAxis,Bstream,'b');

nfft = 1024;

R = fft(Rstream,nfft);
R = R(1:nfft/2);
mR = abs(R);
G = fft(Gstream,nfft);
G = G(1:nfft/2);
mG = abs(G);
B = fft(Bstream,nfft);
B = B(1:nfft/2);
mB = abs(B);

f=(0:nfft/2-1)*(611/64)/nfft;

figure(2);
plot(f,mG,'g');

谢谢。任何帮助将不胜感激。

【问题讨论】:

    标签: matlab image-processing signal-processing


    【解决方案1】:

    如果您不熟悉 Matlab 过滤器,您可以通过在控制台中输入 filterbuilder 来使用 filterbuilder GUI。

    完成设置后,您将获得一个过滤器对象,您可以将其与filter 函数结合使用。

    http://www.mathworks.de/de/help/signal/ref/filterbuilder.html

    http://www.mathworks.de/de/help/matlab/ref/filter.html

    如果您正在做我认为您正在做的事情,您还可以使用detrend 进行简单的去趋势,以消除您信号中的“DC”部分。

    【讨论】:

      猜你喜欢
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 2020-11-28
      • 2013-03-29
      相关资源
      最近更新 更多