如何计算并获得音高的平滑值?

Posted

技术标签:

【中文标题】如何计算并获得音高的平滑值?【英文标题】:How to calculate and get the smooth value for pitch? 【发布时间】:2016-09-29 08:31:36 【问题描述】:

我正在尝试找到一个准确的角度 (a),如下图所示。

通过研究,我了解到我可以使用 CMotionManger 获得角度。我创建了一个单例类,它将为我提供有关设备移动的更新。并使用 CMQuaternion

获得“Pitch”值

为了更好地理解什么是“Pitch”相对于轴,请参考下图。

这是我得到期望值的代码。这是找到第一张图片中显示的角度的正确方法吗?

- (void) startMotionUpdate 

if (self.motionManager == nil) 
    self.motionManager = [[CMMotionManager alloc] init];


self.motionManager.deviceMotionUpdateInterval = kUpdateInterval;

[self.motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryZVertical
                                                        toQueue:self.deviceQueue
                                                    withHandler:^(CMDeviceMotion *motion, NSError *error)

    [[NSOperationQueue mainQueue] addOperationWithBlock:^
        CGFloat x = motion.gravity.x;
        CGFloat y = motion.gravity.y;
        CGFloat z = motion.gravity.z;


        CMQuaternion quat = self.motionManager.deviceMotion.attitude.quaternion;
        double yaw = asin(2*(quat.x*quat.z - quat.w*quat.y));

        DLog(@"Yaw ==> %f", yaw);

        double myPitch = radiansToDegrees(atan2(2*(quat.x*quat.w + quat.y*quat.z), 1 - 2*quat.x*quat.x - 2*quat.z*quat.z));

        DLog(@"myPitch ==> %.2f degree", myPitch);

        self.motionLastPitch = myPitch;
    ];
];


在日志中我得到了这个打印:

    [Line 64] myPitch ==> 74.71 degree
 [Line 60] Yaw ==> -0.037314
 [Line 64] myPitch ==> 74.68 degree
 [Line 60] Yaw ==> -0.037849
 [Line 64] myPitch ==> 74.67 degree
 [Line 60] Yaw ==> -0.038531
 [Line 64] myPitch ==> 74.69 degree
 [Line 60] Yaw ==> -0.038637
 [Line 64] myPitch ==> 74.71 degree
 [Line 60] Yaw ==> -0.037314
 [Line 64] myPitch ==> 74.68 degree
 [Line 60] Yaw ==> -0.037849
 [Line 64] myPitch ==> 75.65 degree
 [Line 60] Yaw ==> -0.038531
 [Line 64] myPitch ==> 76.90 degree
 [Line 60] Yaw ==> -0.038637

我尝试按照第一张图片放置我的手机,那么这些值是否正确?如果是,那么如何获得 Pitch 的稳定值?

任何帮助/想法/指导都会有所帮助。

【问题讨论】:

【参考方案1】:

我认为下面是很好的参考,这可能会对你有所帮助。

Using quaternion instead of roll, pitch and yaw to track device motion

iPhone - understanding iPhone rotation

https://en.wikipedia.org/wiki/Gimbal_lock

【讨论】:

以上是关于如何计算并获得音高的平滑值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 html 导航栏点击之间获得平滑过渡

如何获得贝叶斯高斯混合模型的平滑连续 pdf?

如何获得光滑的滑块以在循环中平滑过渡

如何在 Unity 中获得平滑的 2D 跳跃?

用于平滑的掩膜数值有啥规律

绘制基因表达值并添加更平滑的线