Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用信号包的R低通滤波器_R_Signals_Lowpass Filter_Highpass Filter - Fatal编程技术网

使用信号包的R低通滤波器

使用信号包的R低通滤波器,r,signals,lowpass-filter,highpass-filter,R,Signals,Lowpass Filter,Highpass Filter,我是R新手,在为我的数据安装低通滤波器时遇到困难。我正在以250/s或250 Hz的采样率测量在30秒内施加在踏板上的力 这是由于信号或背景噪声中的涟漪造成的。我需要能够过滤掉任何力信号序言 我不确定我能在数据中看到任何暗示你的“罪魁祸首”频率是250赫兹的东西,或者你应该把频率降低到这个值以上 如果您试图去除特定频率的信号噪声,则需要首先找到噪声频率频谱是你的朋友 但是,假设您确实想要过滤250 Hz以上的频率: 简短回答 如果要过滤250 Hz以上的频率,采样频率必须至少为500 Hz 长

我是R新手,在为我的数据安装低通滤波器时遇到困难。我正在以250/s或250 Hz的采样率测量
30秒内施加在踏板上的

这是由于信号或背景噪声中的涟漪造成的。我需要能够过滤掉任何力信号
序言
我不确定我能在数据中看到任何暗示你的“罪魁祸首”频率是250赫兹的东西,或者你应该把频率降低到这个值以上

如果您试图去除特定频率的信号噪声,则需要首先找到噪声频率<代码>频谱
是你的朋友

但是,假设您确实想要过滤250 Hz以上的频率:

简短回答 如果要过滤250 Hz以上的频率,采样频率必须至少为500 Hz

长话短说 您的滤波器只能在0和奈奎斯特频率之间进行滤波,即0到(采样频率)/2。这是信息理论的硬限制,而不是实现问题

你要求它过滤两倍于奈奎斯特频率的东西

help(butter)
提供了有关
W
参数的以下信息:

W:滤波器的临界频率。。。对于数字滤波器,W必须介于0和1之间,其中1是奈奎斯特频率


尝试分配给过滤器的截止值为(250)/(250/2)=2。函数告诉您这超出了它的能力(或任何数字滤波器的能力)。

从问题来看,您似乎没有费心阅读
?butter
手册的全部输出。软件包中几乎所有滤波器设计功能的频率都仅相对于奈奎斯特频率使用,因此,每当功能要求您提供频率
f_1
时,您应向其提供
f_1/(f_样本/2)
,结果应介于0和1之间,因为您的信号不应具有不可恢复的失真。他们没有准确地告诉你简单的方程,手册中也有一些错误(比如双线性变换函数的公式),但是在你尝试使用这个软件包之前,你当然需要对这个主题有一些一般和基本的知识,所以这不是什么大问题


此外,如果不管什么原因,唯一让你担心的是负信号值,那么为什么还要费心去过滤它呢?这里我使用DSP相关书籍中“过滤”一词的定义,当然这可能不是你在问题中的意思。您可以执行类似于
guest$Fz的操作[guest$FzThanks Jason-我的问题是,如果我想消除任何小于0牛顿的力数据,我如何才能做到这一点,以便在Y轴上没有负值?最重要的是,首先:你是否有理由消除负力值?设置中是否没有弹性或弹性?至于如何消除它们:我认为在频域中解决这个问题是很困难的。如果您只想绘制正值,但保留相同的数据:
plot(x,y,type=“l”,ylim=c(0,这里是您的上限)
。如果要删除y<0的数据:
y\u pos好发现Jason-负力值是由于弹簧反冲,但不应包含在数据分析中,这就是我必须删除它们的原因。力数据来自用于模拟在月球等低重力下运行的垂直跑步机-这是由s实现的U使用弹簧和滑轮系统将跑步机垂直悬挂在空中,这样它确实会产生一些不必要的负作用力。我将实现您的代码以消除负作用力。谢谢。好的,如果您试图消除弹簧振动的影响,并且弹簧频率与其他强制频率不同,您将在在频域中使用陷波滤波器。简单地切换负片仍将包括弹簧的正贡献,我想这是您不想要的。使用
频谱
查看弹簧频率是否可以分离。
ritLowPass = function(s, frqCutOff, bPlot = F ) 

  {
  f = butter( 4, frqCutOff/(smpRate/2), "low" ); # lowpass filter 

  s.lp = rev( filter( f, rev( filter( f, s ))) );
  if( bPlot ) {


    idx=(1*smpRate):(4*smpRate);
    plot( x=idx/smpRate, y=s[idx], xlab="time/s", ylab="signal", ty="l" );
    lines( x=idx/smpRate, y=s.lp[idx], col="red", lwd=2) 
  }


  return(data.frame(s.lp));
}


VT_filter <- ritLowPass(guest$Fz, 250, bPlot)
Time    Fz
0        3.769
0.004   -32.94
0.008   -117.305
0.012   -142.329
0.016   -55.35
0.02    -27.362
0.024   29.039
0.028   73.718
0.032   76.633
0.036   4.482
0.04    -80.949
0.044   -114.279
0.048   -102.968
0.052   -9.76
0.056   35.405
0.06    152.541
0.064   79.249
0.068   50.147
0.072   22.547
0.076   47.757
0.08    -29.123
0.084   57.384
0.088   88.715
0.092   195.115
0.096   118.752
0.1     183.22
0.104   157.957
0.108   37.992
0.112   -7.893
 VT_filter <- ritLowPass(guest$Fz, 250, bPlot)
Error in butter.default(4, frqCutOff/(smpRate/2), "low") : 
  butter: critical frequencies must be in (0 1)
Called from: butter.default(4, frqCutOff/(smpRate/2), "low")