A server operable to determine a type of surface on which a mobile device resides, the server comprising: memory; and one or more processors configured to: receive a plurality of vibration signals from the mobile device, wherein the plurality of vibration signals corresponds to a vibration generated at the mobile device; provide the plurality of vibration signals to a model running on the server, wherein the model includes a plurality of predefined patterns that correspond to vibration signals produced by mobile devices residing on different surfaces; identify, using the model, a predefined pattern in the plurality of predefined patterns that substantially corresponds to the plurality of vibration signals based on a confidence level that exceeds a threshold, wherein the predefined pattern corresponds to a predefined type of surface; determine the type of surface on which the mobile device resides based on the predefined pattern identified using the model; and send an indication of the type of surface to the mobile device wherein the one or more processors are further configured to: receive a plurality of training vibration signals when a training vibration is generated for a predefined type of surface; apply linear predictive coding, LPC, to the plurality of training vibration signals to generate a predefined pattern that corresponds to the predefined type of surface using the plurality of training vibration signals; and train or test the model using the predefined pattern that corresponds to the predefined type of surface. memory; and one or more processors configured to: receive a plurality of vibration signals from the mobile device, wherein the plurality of vibration signals corresponds to a vibration generated at the mobile device; provide the plurality of vibration signals to a model running on the server, wherein the model includes a plurality of predefined patterns that correspond to vibration signals produced by mobile devices residing on different surfaces; identify, using the model, a predefined pattern in the plurality of predefined patterns that substantially corresponds to the plurality of vibration signals based on a confidence level that exceeds a threshold, wherein the predefined pattern corresponds to a predefined type of surface; determine the type of surface on which the mobile device resides based on the predefined pattern identified using the model; and send an indication of the type of surface to the mobile device receive a plurality of vibration signals from the mobile device, wherein the plurality of vibration signals corresponds to a vibration generated at the mobile device; provide the plurality of vibration signals to a model running on the server, wherein the model includes a plurality of predefined patterns that correspond to vibration signals produced by mobile devices residing on different surfaces; identify, using the model, a predefined pattern in the plurality of predefined patterns that substantially corresponds to the plurality of vibration signals based on a confidence level that exceeds a threshold, wherein the predefined pattern corresponds to a predefined type of surface; determine the type of surface on which the mobile device resides based on the predefined pattern identified using the model; and send an indication of the type of surface to the mobile device wherein the one or more processors are further configured to: receive a plurality of training vibration signals when a training vibration is generated for a predefined type of surface; apply linear predictive coding, LPC, to the plurality of training vibration signals to generate a predefined pattern that corresponds to the predefined type of surface using the plurality of training vibration signals; and train or test the model using the predefined pattern that corresponds to the predefined type of surface. receive a plurality of training vibration signals when a training vibration is generated for a predefined type of surface; apply linear predictive coding, LPC, to the plurality of training vibration signals to generate a predefined pattern that corresponds to the predefined type of surface using the plurality of training vibration signals; and train or test the model using the predefined pattern that corresponds to the predefined type of surface.