Questions tagged «smoothing»

对信号或数据集进行平滑处理可以使数据近似,从而揭示出图案并排除噪声,小尺度结构和快速变化的现象。

5
这种简单的信号平滑方法是否有技术术语?
首先,我是DSP的新手,没有任何实际知识,但是我正在开发一个音频可视化程序,并且像典型的频谱可视化一样,我将FFT数组表示为竖线。 我的问题是,如果我直接映射FFT值,音频信号值变化太快而无法产生令人愉悦的视觉输出: 因此,我对这些值应用了一个简单的函数,以便“平滑”结果: // pseudo-code delta = fftValue - smoothedFftValue; smoothedFftValue += delta * 0.2; // 0.2 is arbitrary - the lower the number, the more "smoothing" 换句话说,我正在获取当前值并将其与最后一个值进行比较,然后将该增量的一部分添加到最后一个值。结果看起来像这样: 所以我的问题是: 这是一个已经存在的完善的模式或功能吗?是的,这是什么意思?我在上面使用了“平滑”功能,但是我知道这意味着DSP中的某些功能非常具体,可能不正确。除此之外,它似乎与容量包络有关,但也不完全相同。 我是否应该寻找更好的方法或进一步研究解决方案? 感谢您的时间和歉意,如果这是一个愚蠢的问题(在这里阅读其他讨论,我知道我的知识比平均水平低很多)。

4
袋装技巧,可在保持尖锐过渡的同时对信号进行降噪
此问题是从Stack Overflow 迁移而来的,因为可以在Signal Processing Stack Exchange上回答。 迁移 7年前。 我知道这与信号有关,但是当面对一个新的噪声信号时,在保持尖锐过渡的同时尝试去噪信号的诀窍是什么(例如,任何一种简单的平均,即与高斯卷积)。我经常发现自己正面临着这个问题,并且不觉得我知道我应该尝试的方法(除了样条曲线,但它们也可以严重挫败正确的急剧过渡)。 PS附带说明一下,如果您知道一些使用小波的好方法,请告诉我它是什么。似乎它们在这一领域具有很大的潜力,但是尽管90年代有一些论文被引证充分,表明该论文的方法取得了不错的成绩,但我找不到关于哪种方法最终在2002年成为最佳候选者的任何信息。中间的几年。从那以后肯定可以肯定有些方法通常是“首先要尝试的方法”。

5
Savitzky-Golay平滑滤波器,用于间隔不相等的数据
我有一个在100Hz下测量的信号,我需要对该信号应用Savitzky-Golay平滑滤波器。但是,仔细检查后,我的信号并不是以完全恒定的速率测量的,测量之间的差值介于9.7到10.3 ms之间。 有没有办法对不等距的数据使用Savitzky-Golay滤波器?还有其他可以应用的方法吗?

3
Savitzky–Golay滤波器与IIR或FIR线性滤波器
传统的IIR / FIR滤波器(通过低通消除高频率振荡),例如移动平均, 或Savitzky-Golay滤镜 都可以使信号平滑,例如包络信号: Savitzky-Golay滤波器对于哪种应用比经典的低通更有趣? 它与标准过滤器有什么不同?与标准过滤器相比,它有什么优点? 它是否适应输入数据? 暂时保存更好吗? 您是否曾经有一天决定“让我们使用SG滤波器而不是移动平均线或另一个FIR低通!这是更好的选择,因为这,这个和这个...”是不是处于工程状况?那么这个问题适合您!

2
查找样品之间的局部峰
我有地震信号y [ n ]的离散样本: ñnnÿ[ n ]y[n]y[n] 我想在信号中找到局部最大值。 ÿ[ n ]y[n]y[n]y[n]:maxima if y[n]>y[n−1] and y[n]>y[n+1]y[n]:maxima if y[n]>y[n−1] and y[n]>y[n+1]y[n]: maxima \textbf{ if } y[n] > y[n-1] \textbf{ and } y[n] > y[n+1] i=4.25i=4.25i=4.25 y[n]y[n]y[n] 如何使用插值法找到最大值? 我应该使用哪种插值形式? 如您所见,我的信号不是很嘈杂,但是如果该方法还进行了一些滤波以使最大值超过阈值并具有一定的宽度(没有尖峰),那将是很好的。 但是,我最大的问题只是在样品之间找到峰。有什么建议可以做到这一点吗? 预先感谢您的任何回答!

2
如何找到信号的导数和二阶导数的平滑估计?
我有一个信号在处采样:其中。我想找到信号的一阶和二阶导数:f'(t)和f''(t)。Δ ŤΔt\Delta tF一世(吨一世= 我Δ 吨)fi(ti=iΔt)f_i(t_i=i\Delta t)i = 0 ,… ,n − 1i=0,…,n−1i = 0,\ldots,n-1F′(吨)f′(t)f'(t)F′(吨)f″(t)f''(t) 我的第一个想法是通过集中差异来估计导数: F′(吨一世)F′(吨一世)= f(吨我+ 1)− f(吨i − 1)2 Δ 吨= f(吨我+ 1)- 2 ˚F(吨一世)+ f(吨i − 1)(Δ 吨)2f′(ti)=f(ti+1)−f(ti−1)2Δtf″(ti)=f(ti+1)−2f(ti)+f(ti−1)(Δt)2\begin{align} f'(t_{i})&=\frac{f(t_{i+1})-f(t_{i-1})}{2\Delta t}\\ f''(t_{i})&=\frac{f(t_{i+1})-2f(t_{i})+f(t_{i-1})}{(\Delta t)^2} \end{align} 但是,信号可能会有很多高频噪声,可能会导致F′f′f'和f''的快速波动F′f″f''。 找到F′f′f'和f''的 “平滑”估计值的最佳方法是F′f″f''什么?

1
直接比较两个光谱之间的亚像素位移-并获得可信的误差
我有同一个天文物体的两个光谱。基本问题是:如何计算这些光谱之间的相对位移,并在该位移上获得准确的误差? 如果您仍在我身边,请提供更多详细信息。每个光谱将是一个具有x值(波长),y值(通量)和误差的数组。波长偏移将是子像素。假设像素是规则间隔的,并且将只有一个波长偏移应用于整个光谱。因此,最终答案将类似于:0.35 +/- 0.25像素。 这两个光谱将是许多无特征的连续体,它们被一些不容易建模(且不是周期性的)的相当复杂的吸收特征(凹陷)所打断。我想找到一种直接比较两个光谱的方法。 每个人的第一个本能是进行互相关,但是随着子像素的移动,您将不得不在光谱之间进行插值(首先要进行平滑处理?),而且,错误似乎很难纠正。 我目前的方法是通过与高斯核卷积来平滑数据,然后对平滑结果进行样条化处理,并比较两个样条化谱线-但我不信任它(尤其是错误)。 有人知道正确执行此操作的方法吗? 这是一个简短的python程序,将产生两个可以播放的玩具光谱,这些光谱偏移了0.4个像素(写在toy1.ascii和toy2.ascii中)。即使此玩具模型使用了简单的高斯特征,也要假设实际数据不能与简单的模型拟合。 import numpy as np import random as ra import scipy.signal as ss arraysize = 1000 fluxlevel = 100.0 noise = 2.0 signal_std = 15.0 signal_depth = 40.0 gaussian = lambda x: np.exp(-(mu-x)**2/ (2 * signal_std)) mu = 500.1 np.savetxt('toy1.ascii', zip(np.arange(arraysize), np.array([ra.normalvariate(fluxlevel, …

1
如何使用Savitzky Golay滤波器在离散采样的1D信号中找到局部最大值(在采样之间)?
我有一个地震信号y(i): 在这里,我找到了一个最大值:手动将i = 152.54,y = 222.29绘制为红色。 我想自动查找所有最大值。 我读到,Savitzky Golay滤波器(SGF)可用于找到信号及其导数的平滑估计,并且SGF的好处之一是它比其他滤波器更好地保留了最小值和最大值。这对我来说听起来很棒。 我发现了一个生成SGF系数的Matlab脚本。 并以此发现导数的四阶SGF系数。我编写了一个小的Matlab脚本 通过将信号与导数的4阶SGF系数进行卷积来找到信号的导数 查找导数更改符号的样本对(i,i + 1) 通过i和i + 1之间的线性插值找到导数的零交叉 脚本: function [maxX,maxY] = findLocalMax(y) % Kernel for 4th order Savitzky-Golay filter for finding derivative: d4 = [0.0724 -0.1195 -0.1625 -0.1061 0 0.1061 0.1625 0.1195 -0.0724]; dy = conv(y,d4,'same'); % derivative [m …

1
通过使用较大步长的差=与矩形窗卷积来计算信号的平滑导数
我在采样的信号其中,i = 0到n-1。我想找到信号的一阶导数:f'(t)。Δ 吨:˚F我(吨我= 我Δ 吨)Δt:fi(ti=iΔt)\Delta t: fi(ti=i\Delta t) 我首先想到的是通过一个中心差异来估算: f′(ti)=f(ti+1)−f(ti−1)2Δtf′(ti)=f(ti+1)−f(ti−1)2Δtf'(t_i) =\frac{f(t_{i+1})−f(t_{i−1})}{2\Delta t} 但是,该信号可能会有很多高频噪声,可能会导致f'的快速波动。我猜正确的选择可能是通过与窗口函数(例如Hann)进行卷积来平滑信号,然后从差异中找到导数。 一位同事建议了一种更快的求导数平滑估计的方法:对2n个样本使用中心差,其中n >> 1: f′(ti)=f(ti+n)−f(ti−n)2nΔtf′(ti)=f(ti+n)−f(ti−n)2nΔtf'(t_i) =\frac{f(t_{i+n})−f(t_{i−n})}{2n\Delta t} 当然,这将比首先使用窗口函数进行卷积运算具有更快的速度,但这是一个好的解决方案吗? 如果我们求和: S=2Δt[f′(ti−n+1)+f′(ti−n+2)+..+f′(ti+n−1)]S=2Δt[f′(ti−n+1)+f′(ti−n+2)+..+f′(ti+n−1)]S=2\Delta t[f'(t_{i-n+1})+f'(t_{i-n+2})+..+f'(t_{i+n-1})] 并扩大通过与步骤中央差各衍生物:ΔtΔt\Delta t S=f(ti−n+2)−f(ti−n)+f(ti−n+3)−f(ti−n+2)+..+f(ti+n)−f(ti+n−2)S=f(ti−n+2)−f(ti−n)+f(ti−n+3)−f(ti−n+2)+..+f(ti+n)−f(ti+n−2)S=f(t_{i-n+2})-f(t_{i-n})+f(t_{i-n+3})-f(t_{i-n+2})+..+f(t_{i+n})-f(t_{i+n-2}) 除两个以外的所有条款都被取消: S=f(ti+n)−f(ti−n)=2nΔtf′(ti)S=f(ti+n)−f(ti−n)=2nΔtf′(ti)S=f(t_{i+n})-f(t_{i-n})=2n\Delta tf'(t_i) 因此: f′(ti)=1n[f′(ti−n+1)+f′(ti−n+2)+..+f′(ti+n−1)]f′(ti)=1n[f′(ti−n+1)+f′(ti−n+2)+..+f′(ti+n−1)]f'(t_i)=\frac{1}{n}[f'(t_{i-n+1})+f'(t_{i-n+2})+..+f'(t_{i+n-1})] 因此,取2n个样本的中心差等于先对大小为2n-2的矩形窗口进行卷积,然后取+/- 1个样本的中心差。 用矩形窗口平滑有多“不好”? 如果我们进行FFT,这将导致“振铃”,但是我们不需要进行FFT。 预先感谢您的任何回答!
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.