Home |
Search |
Today's Posts |
#4
![]() |
|||
|
|||
![]()
On Sun, 16 Jan 2005 15:36:09 -0800, Tim Wescott
wrote: You could also do this by coding up the digital filters using only shifts. This is not for the faint of heart if you haven't done DSP before, but it can be done and should get you fairly good results. With FIR filters and 100-200 bytes of RAM, the shifting needs to be done only once when the sample arrives, by saving each intermediate value after each shift into a table. When the next sample arrives, the old sample table (instead of the original sample value only) is shifted into the next position (tap) of the FIR. This shifting can be done either by block copying or pointer arithmetics. Since all taps in the FIR have access to all shifted versions of the corresponding sample, all that needs to be done, is adding together those values selected by the coefficient multiplier. If the tap multipliers are constant and there are sufficiently ROM to have a separate routine for each tap, the elements selected are known at compile time, so you do not have to shift and test the multiplier. Assuming the original sample value is in Shifted[0] and the left shifted values in Shifted[1..7] and the sample value needs to be multiplied e.g. by 19 (00010011) the multiply by 19 routine would be similar to Mul_19: Add Shifted[0] Add Shifted[1] Add Shifted[4] return Thus,even if the processor lacks the multiply instruction, you only need to make on average 4 additions (for 8 bit multipliers) at each tap. However, the additions must be 16 bit wide for 8 bit samples and coefficients. Paul OH3LWR |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Looking for Baycom Packet modem | Homebrew | |||
computer modem problem | Digital | |||
computer modem problem | Digital | |||
Hammarlund SP-600 how vernier tuning dials operated ? | Boatanchors | |||
FS PayPac BP-1 Packet Modem | Equipment |