मुझे एक्सेलेरोमीटर से कच्चे त्वरण डेटा मिल रहा है और स्थिति प्राप्त करने के लिए इसे एकीकृत करने की कोशिश कर रहा हूं।MATLAB जब त्वरण से वेग तक स्थिति में एकीकृत हो रहा है तो मुझे बहुत उच्च मूल्य मिल रहा है
डेटा प्राप्त करने के लिए उपयोग किया जाने वाला एंड्रॉइड फोन 3 सेकंड के लिए एक सपाट सतह पर सेट होता है ताकि बहाव कम हो सके। मैं आराम की अवधि में त्वरण का मतलब शुरुआत से शून्य करने के लिए लेता हूं। यह ठीक काम करता है, लेकिन जब हम वेग और स्थिति (cumtrapz का उपयोग करके) को एकीकृत करते हैं, तो हम अवास्तविक रूप से उच्च वाई मान (वेग के लिए मीटर/मीटर और स्थिति के लिए मीटर) प्राप्त कर रहे हैं।
कच्चा डेटा फ़ोन पर एक निश्चित रूप से लहरा रहा है गति।
क्या किसी के पास विचार है कि स्थिति इतनी उच्च मूल्य क्यों प्राप्त करती है? नीचे दिए गए ग्राफ दिखाए गए हैं जो मैंने वर्णित किए हैं और साथ ही मेरे कोड।
संपादित करें: यहां तक कि जब फोन घुमाया नहीं जाता है, तो मूल्य अवास्तविक होते हैं और यह संकेत नहीं देते कि फ़ोन कैसे स्थानांतरित हो जाता है। संलग्न चित्रों में, फोन को एक सपाट सतह पर एक बॉक्स के आकार में स्थानांतरित किया गया था जिसमें कोई रोटेशन शामिल नहीं था।
%VarName2 = accelerometer values in X direction
%VarName3 = accelerometer values in Y direction
%VarName4 = accelerometer values in Z direction
%elapsedArray = time values for each sample of accelerometer data
ddx = VarName2 - mean(VarName2(1:limit));
ddx = ddx(1:length(ddx)-200);
elapsedArray = elapsedArray(1:length(elapsedArray)-200);
ddy = VarName3 - mean(VarName3(1:limit));
ddy = ddy(1:length(ddy)-200);
ddz = VarName4 - mean(VarName4(1:limit));
ddz = ddz(1:length(ddz)-200);
velX = cumtrapz(ddx .* elapsedArray);
velY = cumtrapz(ddy .* elapsedArray);
velZ = cumtrapz(ddz .* elapsedArray);
dx = velX - mean(velX(1:limit));
dy = velY - mean(velY(1:limit));
dz = velZ - mean(velZ(1:limit));
posX = cumtrapz(dx .* elapsedArray);
posY = cumtrapz(dy .* elapsedArray);
posZ = cumtrapz(dz .* elapsedArray);
x = posX - mean(posX(1:limit));
y = posY - mean(posY(1:limit));
z = posZ - mean(posZ(1:limit));
figure;
plot(ddx);
title('Acceleration in X')
xlabel('Time (sec)')
ylabel('Acc (meters squared');
figure;
plot(dx);
title('Velocity in X')
xlabel('Time (sec)')
ylabel('Velocity (meters)');
figure;
plot(x);
title('Position X')
xlabel('Time (sec)')
ylabel('Position (meters)');
figure;
plot(y);
title('Position Y')
xlabel('Time (sec)')
ylabel('Position (meters)');
figure;
plot(z);
title('Position Z')
xlabel('Time (sec)')
ylabel('Position (meters)');
एक्स दिशा
वेग और एक्स दिशा में स्थिति में त्वरण
आप प्रारंभिक साजिश है कि वाकई * वास्तव में:
यहाँ एक गूगल टेक टॉक इस मुद्दे समझा रहा है? इसके अलावा आपके एक्सेलेरोमीटर की नमूना अवधि क्या है? मुझे लगता है कि आपका एक्स अक्ष गलत है (यानी आप सीधे 13 मिनट के लिए फोन हिला नहीं रहे थे)। यदि आप थे, तो आप किस आवृत्ति पर फोन हिला रहे थे? (आप समय में undersampling रास्ता हो सकता है) – Suever
हां, प्रारंभिक साजिश त्वरण है क्योंकि यह सीधे एक्सेलेरोमीटर से नमूने। नमूना अवधि एक सेकंड के लगभग 100 वें नमूने का नमूना देती है और एक्स अक्ष समय सारणी की अनुक्रमणिका है, इसलिए वे एक दूसरे के प्रत्येक 1/100 वें के अनुरूप हैं। एक्स-अक्ष लेबल अभी भी पिछले परीक्षण से कुछ सेकंड कहता है - क्षमा करें। –
क्या आप वाकई फोन को घुमाने के दौरान घूर्णन नहीं कर रहे हैं?एक्सेलेरोमीटर एक निश्चित धुरी के साथ माप रहा है, और यदि आप फोन को घुमाते हैं तो इस समन्वय फ्रेम में एक्स-अक्ष आपके नमूना खिड़की के दौरान स्थिर नहीं है (पृथ्वी-निर्धारित फ्रेम के संबंध में)। – mikkola