Re: create waveform sawtooth

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: create waveform sawtooth

Michael Tiemann
My tuneR sawtooth wave function generator is broken.

When I use the sine function, I get exactly what I expect: a sine wave whose frequency is defined by the freq parameter.  In particular, higher frequencies have shorter wavelengths (more cycles per second means shorter waves).  When I create a sawtooth wave, the opposite seems to occur: higher frequencies result in longer waves.  But that’s not all: as frequencies increase, it appears that wavelengths increase to infinite length, then get shorter again as the wave reverses, then it gets longer and flips again.

Here’s a small file that demonstrates the bad sawtooth waves:

library(tuneR)

sample_rate <- 12000
reverse <- FALSE
mycolors=c("red","orange","yellow","green","cyan","blue","violet","magenta")
plot(sawtooth(110,duration=round(sample_rate/100),samp.rate=sample_rate,xunit="samples")@left,type="l")
freqs <- c(111,112,113,114,115,116,117,118)
for (i in 1:length(freqs)) {
    temp <- sine(freqs[i],duration=round(sample_rate/100),samp.rate=sample_rate,xunit="samples")
    lines(temp@left,type="l",lty=2,col=mycolors[i])
}




        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: create waveform sawtooth

Jeff Newmiller
Ccing the maintainer if the tuneR package.

Looks to me like sawtooth (and square) don't behave as expected when using xunit="samples". Workaround is to use xunit="time" instead:

sawtooth(110,duration=1/100,samp.rate=sample_rate,xunit="time")

I looked at the code but found it to be opaque.
--
Sent from my phone. Please excuse my brevity.

On November 12, 2017 6:15:45 AM PST, Michael Tiemann <[hidden email]> wrote:

>My tuneR sawtooth wave function generator is broken.
>
>When I use the sine function, I get exactly what I expect: a sine wave
>whose frequency is defined by the freq parameter.  In particular,
>higher frequencies have shorter wavelengths (more cycles per second
>means shorter waves).  When I create a sawtooth wave, the opposite
>seems to occur: higher frequencies result in longer waves.  But that’s
>not all: as frequencies increase, it appears that wavelengths increase
>to infinite length, then get shorter again as the wave reverses, then
>it gets longer and flips again.
>
>Here’s a small file that demonstrates the bad sawtooth waves:
>
>library(tuneR)
>
>sample_rate <- 12000
>reverse <- FALSE
>mycolors=c("red","orange","yellow","green","cyan","blue","violet","magenta")
>plot(sawtooth(110,duration=round(sample_rate/100),samp.rate=sample_rate,xunit="samples")@left,type="l")
>freqs <- c(111,112,113,114,115,116,117,118)
>for (i in 1:length(freqs)) {
>temp <-
>sine(freqs[i],duration=round(sample_rate/100),samp.rate=sample_rate,xunit="samples")
>    lines(temp@left,type="l",lty=2,col=mycolors[i])
>}
>
>
>
>
> [[alternative HTML version deleted]]
>
>______________________________________________
>[hidden email] mailing list -- To UNSUBSCRIBE and more, see
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide
>http://www.R-project.org/posting-guide.html
>and provide commented, minimal, self-contained, reproducible code.

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: create waveform sawtooth

Michael Tiemann
Here is perhaps a better sawtooth wave generator:

sawtooth <- function(freq, duration = samp.rate, from = 0, samp.rate =
44100, bit = 1,

                     stereo = FALSE, xunit = c("samples", "time"), reverse
= FALSE, ...){

    xunit <- match.arg(xunit)

    durFrom <- preWaveform(freq = freq, duration = duration, from = from,

xunit = xunit, samp.rate = samp.rate)

    channel <-
rep(seq(1,-1,length=samp.rate/freq),length=durFrom["duration"])

    if(!is.logical(reverse) || length(reverse) != 1)

stop("'reverse' must be a logical value of length 1")

    if(reverse) channel <- rev(channel)

    postWaveform(channel = channel, samp.rate = samp.rate,

bit = bit, stereo = stereo, ...)

}


On Sun, Nov 12, 2017 at 6:57 PM, Jeff Newmiller <[hidden email]>
wrote:

> Ccing the maintainer if the tuneR package.
>
> Looks to me like sawtooth (and square) don't behave as expected when using
> xunit="samples". Workaround is to use xunit="time" instead:
>
> sawtooth(110,duration=1/100,samp.rate=sample_rate,xunit="time")
>
> I looked at the code but found it to be opaque.
> --
> Sent from my phone. Please excuse my brevity.
>
> On November 12, 2017 6:15:45 AM PST, Michael Tiemann <[hidden email]>
> wrote:
> >My tuneR sawtooth wave function generator is broken.
> >
> >When I use the sine function, I get exactly what I expect: a sine wave
> >whose frequency is defined by the freq parameter.  In particular,
> >higher frequencies have shorter wavelengths (more cycles per second
> >means shorter waves).  When I create a sawtooth wave, the opposite
> >seems to occur: higher frequencies result in longer waves.  But that’s
> >not all: as frequencies increase, it appears that wavelengths increase
> >to infinite length, then get shorter again as the wave reverses, then
> >it gets longer and flips again.
> >
> >Here’s a small file that demonstrates the bad sawtooth waves:
> >
> >library(tuneR)
> >
> >sample_rate <- 12000
> >reverse <- FALSE
> >mycolors=c("red","orange","yellow","green","cyan","blue",
> "violet","magenta")
> >plot(sawtooth(110,duration=round(sample_rate/100),samp.
> rate=sample_rate,xunit="samples")@left,type="l")
> >freqs <- c(111,112,113,114,115,116,117,118)
> >for (i in 1:length(freqs)) {
> >temp <-
> >sine(freqs[i],duration=round(sample_rate/100),samp.rate=
> sample_rate,xunit="samples")
> >    lines(temp@left,type="l",lty=2,col=mycolors[i])
> >}
> >
> >
> >
> >
> >       [[alternative HTML version deleted]]
> >
> >______________________________________________
> >[hidden email] mailing list -- To UNSUBSCRIBE and more, see
> >https://stat.ethz.ch/mailman/listinfo/r-help
> >PLEASE do read the posting guide
> >http://www.R-project.org/posting-guide.html
> >and provide commented, minimal, self-contained, reproducible code.
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.