The Stack Overflow podcast is back! Listen to an interview with our new CEO.
9

This answer provides a quick introduction to decimation concepts and CIC filters which I would consider as one solution given the description. Bottom Line First Given your use of a microcontroller, (implied emphasis on minimizing resources), and that you indicated you do not need a high performance filter- consider doing everything with Cascade-Integrator-...


6

If you want to implement the "standard" NLMS algorithm without cutting any corners, then you're probably not going to find a structure that is significantly more efficient. Block forms of LMS filtering aim to use fast convolution techniques (like overlap-save or overlap-add) to speed that part of the process. However, as you noted, the filter coefficients ...


5

What you're looking for is called a pruned DFT. In principle, it is possible to calculate a subset of outputs from a DFT using fewer mathematical operations. In practice, however, existing highly-optimized FFT implementations like FFTW are designed for full-output transforms. You'll find in many cases, unless you're only concerned with a very small ...


4

The most computationally efficient approach is to set up the data you want in the frequency domain by putting in the tones as "spikes" in the appropriate frequency bins, and then inverse FFT'ing it to get the time domain tones. This approach will likely be a couple of orders of magnitude or so faster than your approach. There are some downsides to doing it ...


3

Top is terrible tool for measuring CPU time. Set up a bunch of counters or timer around the execution of individual and collect statistics on that. Each of your block should have a "should cost" that's based on number of arithmetic operations plus some overhead for looping and conditionals relative to the instruction set of the processor. Compare each blocks ...


2

Assuming the number is reported in dB, a negative value of $E_s/N_0$ means is that the energy per symbol $E_s$ is less than the noise spectral density $N_0$. Even then, a negative $E_s/N_0$ seems hard to obtain if the signal's power is larger than the noise power (as measured on the spectrum analyzer). Assuming that the maximum symbol rate is used ($E_s=2B$,...


2

I have made a benchmark on a Freescale K70 (Arm Cortex M4 120MHz) at https://community.freescale.com/thread/327833 Poul-Erik.


2

You're best off looking one level up, at datasheets or published benchmarks for actual devices that are available. One notable manufacturer of Cortex-M4 parts is Freescale. The Cortex-M4 is just a processor core design that is licensed by silicon manufacturers as the basis for their microprocessors. Each manufacturer designs their own peripherals and memory ...


2

we can get within 5 to 20%, but always underestimating top. Now, if it is always that much underestimated (as you stated so) then multiply your estimate with an approximate scale to get the more accurate (realistic) estimate... The reasons could be many and data transfers within the cpu-ram system are among the leading hard to predict...


2

This is a pretty benign requirement. The Open Source software defined radio community does significantly more than 100 MS/s complex samples in software running on stock PC hardware. The samples come from stock SDR hardware. However, you wouldn't be doing a 100s of taps long channel estimator / LMS filter at that rate. It's impossible to estimate the ...


1

The union bound can indeed result in a BER higher than 1. As you say, it is just an upper bound, and it becomes tighter as the SNR increases. For low SNR, the union bound can be quite loose.


1

There are two things that you can do to speed things up: Do frame based processing, i.e. compute 1000 or so samples at a time before writing them to the wavefile Minimize calls to transcendental functions (such as sine and cosine) The second answer in this question How to create a sine wave generator that can smoothly transition between frequencies shows ...


1

Additive synthesis is always going to be fairly heavy on the CPU. If you are not already I would look at using a Wavetable Oscillator to generate your sin waves. It may also be worth unrolling your loop (be sure to profile so you can see if it makes a difference). You really need to profile your code and identify the bottlenecks unique to your program. ...


Only top voted, non community-wiki answers of a minimum length are eligible