Path: utzoo!utgpu!jarvis.csri.toronto.edu!clyde.concordia.ca!uunet!tut.cis.ohio-state.edu!ucsd!ogicse!blake!judd From: judd@blake.acs.washington.edu (Randall Judd) Newsgroups: comp.dsp Subject: Re: Non-Linear Interpolation-Help! Summary: Using trig identities for interpolation of sine wave Message-ID: <5274@blake.acs.washington.edu> Date: 9 Jan 90 19:21:05 GMT References: <1697@rodan.acs.syr.edu> Organization: Univ of Washington, Seattle Lines: 21 In article <1697@rodan.acs.syr.edu>, isr@rodan.acs.syr.edu (Michael S. Schechter - ISR group account) writes: > > Hi, I need to generate 'nice' sine-wave signals with a 56001 chip. > The built-in ROM table makes this rather simple, except I need > to interpolate (depending on frequency) as many as 40 points between > the sine wave table values. No, I don't have enough memory to store > a full quarter-cycle of my waveform. If interpolating 40 points is > undoable, I HAVE to be able to get at least 10 points. > ---Thanks, > Mike Schechter InterNet:isr@rodan.acs.syr.edu Have you thought about using sin(theta + Dtheta)=sin(theta)*cos(Dtheta) + cos(theta)*sin(Dtheta) cos(theta + Dtheta)=cos(theta)*cos(Dtheta) - sin(theta)*sin(Dtheta) which are of the form a(n+1)=a(n)b0+b(n)a0 and b(n+1)=b(n)b0-a(n)a0 You would want to update your sin and cos at table values (to prevent error propagation), and if Dtheta is a constant you would only need to calculate cos(Dtheta) and sin(Dtheta) once, or load it in as a constant. Since Dtheta is small you should be able to use a short taylor series.