I'm trying to do some terrain and hydrologic analysis from a 1/3 arcsecond DEM that I downloaded from the USGS National Map website. The issue I'm having is that the area in question is central Florida, which is relatively flat. The DEM is a Float64 geotiff, but all the elevation appear to be integer values. What is happening is that in some spots there are large 'flat' areas with a sudden 1 unit drop in elevation. In generating things like slope and water accumulation maps, this is causing clear issues:
(Top: DEM. Middle: slope. Bottom: flow accumulation)
With the slope (middle), there are flat areas with sudden spots of steep slope, when in reality, it should be much more uniform. Similar with the flow accumulation, where there are these sudden areas of low accumulation (white lines) running throughout the map.
Clearly, I need to do some sort of smoothing/interpolation on this map to resolve this. Something simple like a 3x3 or 5x5 sliding window seems like it wouldn't work because it'll just smooth out the immediate area around the elevation change, but still leave large flat areas that don't necessarily make sense. At the same time, I want to avoid smoothing out the finer details in the more complex areas.
I don't have a really proficient understanding of reconditioning gis data in a meaningful way, so I'm wondering what would be an appropriate method (or methods) of smoothing this data? Primarily, I'm looking for a more theoretical answer than an actual implementation, but if there is also a place I can start looking for an implementation, then that's great as well (I'm on Linux, so no ArcGIS; I use gdal, grass, and R, but can look into other options as well).