【问题标题】:Code to calculate 1D Median Filter计算一维中值滤波器的代码
【发布时间】:2014-08-05 18:37:01
【问题描述】:

我想知道是否有人知道一些 python 或 java 代码来计算一维中值滤波器。 我有一个文件逗号分隔两个字段:日期和信号。 类似的东西:

2014-06-01 11:22:12, 23.8

2014-06-01 11:23:12, 25.9

2014-06-01 11:24:12, 45.7

我想阅读此文件并应用大小为 23 的一维中值滤波器 对于字段 Signal 并将其保存在另一个文件中以消除噪音。

提前致谢。

亚历山大。

【问题讨论】:

    标签: filter median


    【解决方案1】:

    以防以后有人偶然发现。

    要提取数据,您可以使用正则表达式,而对于自定义中值过滤器,您可以查看here。 我会在这里留下一份副本,以防被删除:

    def medfilt (x, k):
        """Apply a length-k median filter to a 1D array x.
        Boundaries are extended by repeating endpoints.
        """
        assert k % 2 == 1, "Median filter length must be odd."
        assert x.ndim == 1, "Input must be one-dimensional."
        k2 = (k - 1) // 2
        y = np.zeros ((len (x), k), dtype=x.dtype)
        y[:,k2] = x
        for i in range (k2):
            j = k2 - i
            y[j:,i] = x[:-j]
            y[:j,i] = x[0]
            y[:-j,-(i+1)] = x[j:]
            y[-j:,-(i+1)] = x[-1]
        return np.median (y, axis=1)
    
    

    【讨论】:

      【解决方案2】:

      scipy.signal.medfilt 接受一维内核:

      import pandas as pd
      import scipy.signal
      
      
      def median_filter(file_name, new_file_name, kernel_size):
          with open(file_name, 'r') as f:
              df = pd.read_csv(f, header=None)
      
          signal = df.iloc[:, 1].values
          median = scipy.signal.medfilt(signal, kernel_size)
      
          df = df.drop(df.columns[1], 1)
          df[1] = median
          df.to_csv(new_file_name, sep=',', index=None, header=None)
      
      
      if __name__=='__main__':
          median_filter('old_signal.csv', 'new_signal.csv',  23)
      

      【讨论】:

        猜你喜欢
        • 2015-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-10
        • 1970-01-01
        • 2017-09-10
        相关资源
        最近更新 更多