interpolating data to different sample rate

22 次查看(过去 30 天)
I have 2 data sets I want to correlate. One is sampled every second, and one is sampled at a much smaller interval (attached). I want to get them both to the same sampling rate by increasing the smaller intervalled one to 1s.
How would I go about this?

回答(2 个)

Benjamin Thompson
Benjamin Thompson 2022-2-14
You can use interp1 to interpolate, or resample, one signal onto the same set of time values as another.

Star Strider
Star Strider 2022-2-14
If they are signals, use resample because it includes an anti-aliasing filter, and these appear to be signals.
format longE
T1 = readtable('https://www.mathworks.com/matlabcentral/answers/uploaded_files/894275/Raw%20Data.xlsx', 'VariableNamingRule','preserve')
T1 = 499×5 table
Time (s) Linear Acceleration x (m/s^2) Linear Acceleration y (m/s^2) Linear Acceleration z (m/s^2) Absolute acceleration (m/s^2) ____________________ _____________________________ _____________________________ _____________________________ _____________________________ 1.86912208300000e-01 8.93268171700000e-03 8.41090908300000e-03 -1.81244389400000e-01 1.81659199800000e-01 1.96983208300000e-01 8.07946331800000e-03 1.19734714000000e-02 -2.56993314000000e-01 2.57398922300000e-01 2.07023208300000e-01 7.70330462600000e-03 -4.94139058500000e-03 -3.28702397300000e-01 3.28829780100000e-01 2.17063208300000e-01 1.09702536500000e-02 -2.36724525700000e-03 -3.19120565100000e-01 3.19317843800000e-01 2.27134208300000e-01 1.50394041100000e-02 -1.41565110900000e-02 -2.72862072600000e-01 2.73642652300000e-01 2.37174208300000e-01 7.19481613500000e-03 -9.09744529100000e-03 -2.18375963000000e-01 2.18683767300000e-01 2.47215208300000e-01 9.69910550900000e-03 1.32750067900000e-04 -1.58347862400000e-01 1.58644684100000e-01 2.57255208300000e-01 1.99553044900000e-02 7.00284473600000e-03 -1.93227673200000e-01 1.94381551800000e-01 2.67326208300000e-01 2.18355497700000e-02 8.38541887700000e-03 -2.33348928100000e-01 2.34518290800000e-01 2.77366208300000e-01 1.39188583200000e-02 1.63915910000000e-02 -2.64484766700000e-01 2.65357514900000e-01 2.87406208300000e-01 1.97226218500000e-02 1.40000798000000e-02 -3.12020875800000e-01 3.12956883600000e-01 2.97477208300000e-01 1.37514086800000e-02 7.38640381000000e-03 -2.80596184700000e-01 2.81030032400000e-01 3.07517208300000e-01 1.23518045200000e-02 1.00708239700000e-02 -2.15932411600000e-01 2.16519733300000e-01 3.17558208300000e-01 1.03200432700000e-02 7.87407986800000e-03 -1.92114363300000e-01 1.92552416300000e-01 3.27598208300000e-01 2.17892471300000e-02 7.59140353600000e-03 -1.70313019800000e-01 1.71868919200000e-01 3.37669208300000e-01 1.13416249300000e-02 1.17506742100000e-02 -1.91676406900000e-01 1.92370880700000e-01
M1 = table2array(T1);
TimeStats = [mean(diff(M1(:,1))); std(diff(M1(:,1))); 1/mean(diff(M1(:,1)))]
TimeStats = 3×1
8.031238955220885e-03 4.503231238111708e-02 1.245137899115712e+02
[y,t] = resample(M1(:,2:end), M1(:,1), 1.25E+2); % Resample To Uniform 1.25 Hz Sampling Frequency
T1r = array2table([t, y], 'VariableNames',T1.Properties.VariableNames)
T1r = 500×5 table
Time (s) Linear Acceleration x (m/s^2) Linear Acceleration y (m/s^2) Linear Acceleration z (m/s^2) Absolute acceleration (m/s^2) ____________________ _____________________________ _____________________________ _____________________________ _____________________________ 1.86912208300000e-01 8.93268171700000e-03 8.41090908300000e-03 -1.81244389400000e-01 1.81659199800000e-01 1.94912208300000e-01 8.25491911229342e-03 1.12408662407798e-02 -2.41416308454712e-01 2.41823809074154e-01 2.02912208300000e-01 7.85732737329203e-03 1.98460519391782e-03 -2.99340241777460e-01 2.99581547389263e-01 2.10912208300000e-01 8.96875928280637e-03 -3.94429385386534e-03 -3.24990868871135e-01 3.25145325889771e-01 2.18912208300000e-01 1.17173352904071e-02 -4.53171279003712e-03 -3.10627669396247e-01 3.10932040097935e-01 2.26912208300000e-01 1.49497058275931e-02 -1.38966345122097e-02 -2.73881771272922e-01 2.74649492982455e-01 2.34912208300000e-01 8.96219242976595e-03 -1.02372467688225e-02 -2.30651618370040e-01 2.31065938402590e-01 2.42912208300000e-01 8.62590989339179e-03 -3.82278530002618e-03 -1.84072483143133e-01 1.84374011359197e-01 2.50912208300000e-01 1.34757158309878e-02 2.66250504678105e-03 -1.71191553687610e-01 1.71803966957261e-01 2.58912208300000e-01 2.02646646755784e-02 7.23032218130206e-03 -1.99828896451842e-01 2.00985322679059e-01 2.66912208300000e-01 2.17582563983467e-02 8.32858383635121e-03 -2.31699618247096e-01 2.32868344424665e-01 2.74912208300000e-01 1.58538743377590e-02 1.44347039093783e-02 -2.56874473082032e-01 2.57819720483526e-01 2.82912208300000e-01 1.71248017998187e-02 1.50705430801594e-02 -2.90743258838307e-01 2.91650951036474e-01 2.90912208300000e-01 1.76438736249956e-02 1.16976720926284e-02 -3.01081051850382e-01 3.01842243513892e-01 2.98912208300000e-01 1.35513656551394e-02 7.77008338466134e-03 -2.71353902389393e-01 2.71809685865289e-01 3.06912208300000e-01 1.24361432168924e-02 9.90906359183266e-03 -2.19828983584612e-01 2.20407057100349e-01
The data need to be resampled regardless, since the standard deviation of the sampling intervals is not near 0 as it should be, indicating irregulal sampling intervals. This is not appropriate for signal processing applications, all of which assuming regular sampling intervals.
To use these data in any signal processing application — and even for fft — they need to be resampled first to a consistent sampling frequency. I chose 125 Hz because the mean sampling frequency of the original data ia 124.514... Hz so this would likely produce the least disruptive resampling.
Resample the other signals at 125 Hz in order to compare them. Ideally, they also need to have identical sampling times (not simply the same sampling frequency) in order to do this correctly.
.
  2 个评论
C.G.
C.G. 2022-2-15
Thank you for your reponse.
My other dataset has been resampled using retime as it is in a different format as its from different equipment. How would I go about getting them identical for correlation?
Star Strider
Star Strider 2022-2-15
My pleasure!
format longE
T1 = readtable('https://www.mathworks.com/matlabcentral/answers/uploaded_files/895055/S%20Raw.xlsx', 'VariableNamingRule','preserve')
T1 = 499×2 table
Var1 Var2 _____________________________ ____________________ {''2022-02-10 18:39:01.000''} 5.12916339756230e-01 {''2022-02-10 18:39:02.000''} 6.04788079457912e-01 {''2022-02-10 18:39:03.000''} 6.96659819159595e-01 {''2022-02-10 18:39:04.000''} 7.00000000000000e-01 {''2022-02-10 18:39:05.000''} 5.44174346120565e-01 {''2022-02-10 18:39:06.000''} 6.37207809050609e-01 {''2022-02-10 18:39:07.000''} 4.59791541906453e-01 {''2022-02-10 18:39:08.000''} 3.51146870578991e-01 {''2022-02-10 18:39:09.000''} 4.41666719473181e-01 {''2022-02-10 18:39:10.000''} 5.64390928432270e-01 {''2022-02-10 18:39:11.000''} 7.45466810577674e-01 {''2022-02-10 18:39:12.000''} 9.64411062348048e-01 {''2022-02-10 18:39:13.000''} 1.39925822374150e+00 {''2022-02-10 18:39:14.000''} 1.30740876133655e+00 {''2022-02-10 18:39:15.000''} 1.21908190407119e+00 {''2022-02-10 18:39:16.000''} 1.20000000000000e+00
T1.Var1 = datetime(T1.Var1, 'InputFormat','''''yyyy-MM-dd HH:mm:ss.SSS''''')
T1 = 499×2 table
Var1 Var2 ____________________ ____________________ 10-Feb-2022 18:39:01 5.12916339756230e-01 10-Feb-2022 18:39:02 6.04788079457912e-01 10-Feb-2022 18:39:03 6.96659819159595e-01 10-Feb-2022 18:39:04 7.00000000000000e-01 10-Feb-2022 18:39:05 5.44174346120565e-01 10-Feb-2022 18:39:06 6.37207809050609e-01 10-Feb-2022 18:39:07 4.59791541906453e-01 10-Feb-2022 18:39:08 3.51146870578991e-01 10-Feb-2022 18:39:09 4.41666719473181e-01 10-Feb-2022 18:39:10 5.64390928432270e-01 10-Feb-2022 18:39:11 7.45466810577674e-01 10-Feb-2022 18:39:12 9.64411062348048e-01 10-Feb-2022 18:39:13 1.39925822374150e+00 10-Feb-2022 18:39:14 1.30740876133655e+00 10-Feb-2022 18:39:15 1.21908190407119e+00 10-Feb-2022 18:39:16 1.20000000000000e+00
TT1 = table2timetable(T1)
TT1 = 499×1 timetable
Var1 Var2 ____________________ ____________________ 10-Feb-2022 18:39:01 5.12916339756230e-01 10-Feb-2022 18:39:02 6.04788079457912e-01 10-Feb-2022 18:39:03 6.96659819159595e-01 10-Feb-2022 18:39:04 7.00000000000000e-01 10-Feb-2022 18:39:05 5.44174346120565e-01 10-Feb-2022 18:39:06 6.37207809050609e-01 10-Feb-2022 18:39:07 4.59791541906453e-01 10-Feb-2022 18:39:08 3.51146870578991e-01 10-Feb-2022 18:39:09 4.41666719473181e-01 10-Feb-2022 18:39:10 5.64390928432270e-01 10-Feb-2022 18:39:11 7.45466810577674e-01 10-Feb-2022 18:39:12 9.64411062348048e-01 10-Feb-2022 18:39:13 1.39925822374150e+00 10-Feb-2022 18:39:14 1.30740876133655e+00 10-Feb-2022 18:39:15 1.21908190407119e+00 10-Feb-2022 18:39:16 1.20000000000000e+00
TotTime = TT1.Var1(end) - TT1.Var1(1)
TotTime = duration
00:08:18
TT1.ssSSS = TT1.Var1;
TT1.ssSSS.Format = 'ss.SSS' % Cumulative Time In s & ms
TT1 = 499×2 timetable
Var1 Var2 ssSSS ____________________ ____________________ ______ 10-Feb-2022 18:39:01 5.12916339756230e-01 01.000 10-Feb-2022 18:39:02 6.04788079457912e-01 02.000 10-Feb-2022 18:39:03 6.96659819159595e-01 03.000 10-Feb-2022 18:39:04 7.00000000000000e-01 04.000 10-Feb-2022 18:39:05 5.44174346120565e-01 05.000 10-Feb-2022 18:39:06 6.37207809050609e-01 06.000 10-Feb-2022 18:39:07 4.59791541906453e-01 07.000 10-Feb-2022 18:39:08 3.51146870578991e-01 08.000 10-Feb-2022 18:39:09 4.41666719473181e-01 09.000 10-Feb-2022 18:39:10 5.64390928432270e-01 10.000 10-Feb-2022 18:39:11 7.45466810577674e-01 11.000 10-Feb-2022 18:39:12 9.64411062348048e-01 12.000 10-Feb-2022 18:39:13 1.39925822374150e+00 13.000 10-Feb-2022 18:39:14 1.30740876133655e+00 14.000 10-Feb-2022 18:39:15 1.21908190407119e+00 15.000 10-Feb-2022 18:39:16 1.20000000000000e+00 16.000
TssSSS = second(TT1.ssSSS);
TimeStats = [mean(diff(TssSSS)); std(diff(TssSSS)); 1/mean(diff(TssSSS))]
TimeStats = 3×1
3.614457831325301e-02 7.550946933513523e+00 2.766666666666667e+01
[y,t] = resample(TT1.Var2, TssSSS, 1.25E+2); % Resample To Uniform 1.25 Hz Sampling Frequency
T1r = array2table([t, y], 'VariableNames',{'Time (ms)','Var2'})
T1r = 7386×2 table
Time (ms) Var2 ____________________ ____________________ 0.00000000000000e+00 5.84632575588755e+01 8.00000000000000e-03 6.09226103576792e+01 1.60000000000000e-02 6.29139951844163e+01 2.40000000000000e-02 6.44317557038368e+01 3.20000000000000e-02 6.54828195436685e+01 4.00000000000000e-02 6.60861145277872e+01 4.80000000000000e-02 6.62715991338979e+01 5.60000000000000e-02 6.60789485631659e+01 6.40000000000000e-02 6.55559499994597e+01 7.20000000000000e-02 6.47566706063528e+01 8.00000000000000e-02 6.37394691873600e+01 8.80000000000000e-02 6.25649269546137e+01 9.60000000000000e-02 6.12937743680878e+01 1.04000000000000e-01 5.99848895005805e+01 1.12000000000000e-01 5.86934389560559e+01 1.20000000000000e-01 5.74665953396047e+01
Now, the previous set and this set are all sampled at the same frequency (125 Hz), so they can all be processed with the same filters or other signal processing procedures.
.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Multirate Signal Processing 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by