Phase or Doppler observations are widely used to smooth the pseudo-range to improve the navigation performance of the global navigation satellite system (GNSS) currently. However, in the urban environment, the GNSS observation signal is severely interrupted, and the movement of pedestrians and other carriers is very random. Conventional phase smoothing pseudo-range, or constant speed/constant acceleration navigation algorithms have limited effects. Therefore, a stand-alone GNSS navigation algorithm based on the constraint of the carrier position variation between epochs is proposed. This algorithm uses the phase difference observations between epochs to calculate the high-precision position variation between epochs, and uses this to describe the movement of the carrier to construct the equation of state for the filtering model. Meanwhile observational equations are constructed using pseudo-range observations, and carrier positions are estimated in real time using extended Kalman filtering. The experiments use the low-cost single-frequency u-blox receiver measured data with the algorithm for navigation solution. The results show that, under static conditions, the plane accuracy of the navigation results is better than 0.56 m, and the plane accuracy is better than 1.0 m under dynamic conditions. What's more, once the number of GNSS differential corrections broadcast by the base station is obtained, the navigation plane accuracy and vertical accuracy can be increased by approximately 49% and 46% respectively. The performance of the algorithm is reliable, even if only four satellites are observed consecutively before and after the epoch, it can still provide continuous and smooth real-time positioning results and provide users with a better navigation experience.