【问题标题】:Resampling of time signal in MATLABMATLAB中时间信号的重采样
【发布时间】:2018-05-27 03:45:35
【问题描述】:

我想将我的信号重新采样到新的时间。目前我的信号的采样时间是0.01s,我的信号和时间数组的大小是1*90001

我正在尝试在 MATLAB 中使用 resample(x,p,q),但我有点困惑。

有人可以建议使用此功能的正确方法以及如何将我的数据重新采样为0.02s 而不是0.01s 的速率吗?

代码 - 这就是我尝试使用resample 的方式,以及示例数据。

t = [0:0.03:1];
x = sin(4*pi*t);
y = resample(x, 1, 2);
ty = resample(t,1,2);

figure (1);
stem(ty, y, 'r*');
hold on;
stem(t,x,'b')
hold off

更新代码:

t = [0 2 3 7 8 9 10 11 12 17 18 19 20 24 25 26 27 28 29 31 32 33 35 37 41 ];
A = [0 0 1 2 3 5.2 0 -1.4 0 2 2.7 2 2.3 6 7.3 0 0 -8.6 0 1 1 2.5 3 4.8 2];
plot(t,A)
% Tx = min(diff(t));
Tx = 1:0.1:25;
B = interp1(t,A,Tx); %re-make example data to have decimal points on the x-axis
 y = resample(B, 2, 1); 
 T = 0.05;
 Ty = T / (2 / 1); 
 ty = (0:length(y)-1)*Ty;
% A = interp1(t,ref,t2);
% A = ref;
figure 
plot(Tx,B,'b')
hold on
plot(ty,y,'r')
plot(t,A,'g')
hold off

【问题讨论】:

    标签: matlab signals signal-processing resampling


    【解决方案1】:

    您的原始信号以 10 毫秒的统一采样间隔进行采样,您希望将采样时间减少到 20 毫秒。为什么不只获取原始信号的每一秒数据点?

    y = x(1:2:end);
    ty = t(1:2:end);
    

    更新

    对于非规则间隔的数据集,可以使用函数resample,如下所示:https://au.mathworks.com/help/signal/ref/resample.html#bungoxs

    你可以试试

    fs = 1/0.02;
    [y, ty] = resample(x, t, fs, 1, 2)
    

    【讨论】:

    • 这是绝对错误的,因为别名:en.wikipedia.org/wiki/Aliasing
    • 对不起,但在我的情况下它不起作用我已经尝试过了,因为在我的情况下,时间和数据样本数组值都不是统一采样的,所以这在我的情况下没有意义,因为它会导致错误为我采样数据信号。很抱歉,非常感谢为其他人提供有用的补充,这是一种简单的采样方法。
    • @john 您在问题中声明您的原始数据每 10 毫秒采样一次,这是定义上的统一采样...
    • 是的,这是错误的。使用这些输入参数,函数会做一些完全不同的事情。你有什么 Matlab 版本?
    • 我会使用@AndreiDavydov 提出的建议。与插值一起重采样
    【解决方案2】:

    首先,您不需要重新采样时间线。 定义时间采样间隔变量或采样频率变量要容易得多: T = 0.03; Fs = 1/T;

    所以, x 重新采样您执行正确的方式: y = resample(x, 1, 2);

    但新的时间线必须通过调整后的采样间隔重建: Ty = T / (1 / 2); ty = (0:length(y)-1)*Ty;

    resample 函数仅适用于时间均匀分布的数据点。如果您的原始点分布不均匀,您需要:

    1. 将您的 x 信号插入到具有原始时间线最小采样间隔的统一时间线: Tx = min(diff(t)); 。参见例如 interp1 函数。
    2. 将插值的均匀时间分布(采样)信号重新采样到新的采样间隔( resample 函数)。

    【讨论】:

    • Andrei Davydov 非常感谢,给我几分钟我会玩弄它并回复你,但这似乎是一个很好的逻辑,看起来它对我来说只需要几分钟就可以了深入研究它。非常感谢。
    • resample 也可用于非均匀采样信号。这个例子展示了它:au.mathworks.com/help/signal/ref/resample.html#bungoxs 另外 resample 提供了新的网格作为输出参数(参见相同的链接)
    • @john 我更新了我原来的错误答案。试着看看我在那里给出的建议。有不明白的地方请留言
    • @Andrei Davydov 请查看我使用您解释的逻辑制作的更新代码,但一个问题是这种方法不会影响我们的原始信号,这意味着我们正在添加额外的点并再次重新采样这些意味着原始数据会失真,如果我弄错了,请纠正我。
    【解决方案3】:

    还有另一种以较低频率重新采样数据的方法。 使用这个代码

    fs=1/(timesignal(2)-timesignal(1)); %for example 48000Hz
    fs_resampled=100; % [Hz] example goal value 
    t_original = [0:1/fs:(1/fs*(length(signal)-1))];%current time signal
    t_resampled = [0:1/fs_resampled:max(t_original)];%new time signal
    Signal_resampled = interp1(t_original,signal,t_resampled,'spline');
    

    我希望这就是你想要的。 问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      • 2021-11-13
      • 2013-08-09
      • 2018-12-27
      相关资源
      最近更新 更多