class SawtoothSignal(Sinusoid): """Represents a sawtooth signal.""" def evaluate(self, ts): """Evaluates the signal at the given times. ts: float array of times returns: float wave array """ cycles = self.freq * ts + self.offset / np.pi / 2 frac, _ = np.modf(cycles) ys = normalize(unbias(frac), self.amp) return ys sawtooth = SawtoothSignal().make_wave(duration=0.5, framerate=40000) from thinkdsp import SquareSignal sawtooth.make_spectrum().plot(color='black') square = SquareSignal(amp=0.5).make_wave(duration=0.5, framerate=40000) square.make_spectrum().plot() decorate(xlabel='Frequency (Hz)') sawtooth.make_spectrum().plot(color='yellow') sawtooth.make_spectrum().plot() decorate(xlabel='Frequency (Hz)') from thinkdsp import TriangleSignal sawtooth.make_spectrum().plot(color='red') triangle = TriangleSignal(amp=0.79).make_wave(duration=0.5, framerate=40000) triangle.make_spectrum().plot() decorate(xlabel='Frequency (Hz)') plt.show()
def filter_spectrum(spectrum): spectrum.hs[1:] /= spectrum.fs[1:] spectrum.hs[0] = 0 plt.subplot(311) spectrum = wave.make_spectrum() spectrum.plot(high=10000, color='gray') filter_spectrum(spectrum) spectrum.scale(440) spectrum.plot(high=10000) decorate(xlabel='Frequency (Hz)') plt.subplot(312) spectrum1 = wave1.make_spectrum() spectrum1.plot(high=10000, color='red') filter_spectrum(spectrum1) spectrum1.scale(440) spectrum1.plot(high=10000) decorate(xlabel='Frequency (Hz)') plt.subplot(313) spectrum2 = wave2.make_spectrum() spectrum2.plot(high=10000, color='green') filter_spectrum(spectrum2) spectrum2.scale(440) spectrum2.plot(high=10000) decorate(xlabel='Frequency (Hz)') filtered = spectrum.make_wave()
from thinkdsp import SawtoothSignal from thinkdsp import decorate import matplotlib.pyplot as plt def filter_spectrum(spectrum): spectrum.hs[1:] /= spectrum.fs[1:] spectrum.hs[0] = 0 wave = SawtoothSignal(freq=440).make_wave(duration=0.5) spectrum = wave.make_spectrum() spectrum.plot(high=10000, color='gray') filter_spectrum(spectrum) spectrum.scale(440) spectrum.plot(high=10000) decorate(xlabel='Frequency (Hz)') plt.show()
filter_spectrum(spectrum2) spectrum2.scale(440) plt.subplot(3,3,4) spectrum2.plot(high=10000, color='red') plt.title("方波") plt.subplot(3,3,5) wave2.plot(color='red') plt.title('方波变换前') plt.subplot(3,3,6) spectrum2.make_wave().plot(color='red') plt.title("方变换后") spectrum1.make_wave.write(filename='output2-3.wav') wave3=SawtoothSignal(freq=440).make_wave(duration=0.5) spectrum3 = wave3.make_spectrum() filter_spectrum(spectrum3) spectrum3.scale(440) plt.subplot(3,3,7) spectrum3.plot(high=10000, color='green') plt.title("方波") plt.subplot(3,3,8) wave3.plot(color='green') plt.title('方波变换前') plt.subplot(3,3,9) spectrum3.make_wave().plot(color='green') plt.title("方变换后") plt.show()
from thinkdsp import decorate from thinkdsp import Sinusoid from thinkdsp import normalize, unbias from thinkdsp import SinSignal from thinkdsp import SquareSignal from thinkdsp import TriangleSignal from thinkdsp import SawtoothSignal import numpy as np import matplotlib.pyplot as plt sawtooth = SawtoothSignal().make_wave(duration=0.5, framerate=40000) sawtooth.make_audio() plt.subplot(311) sawtooth.make_spectrum().plot() decorate(xlabel='Frequency (Hz)') plt.subplot(312) sawtooth.make_spectrum().plot(color='red') square = SquareSignal(amp=0.5).make_wave(duration=0.5, framerate=40000) square.make_spectrum().plot() decorate(xlabel='Frequency (Hz)') plt.subplot(313) sawtooth.make_spectrum().plot(color='green') triangle = TriangleSignal(amp=0.79).make_wave(duration=0.5, framerate=40000) triangle.make_spectrum().plot() decorate(xlabel='Frequency (Hz)') plt.show()
trangle.write("三角波声音.wav") play("三角波声音.wav", flags=1) square = SquareSignal(freq=440).make_wave(duration=0.01, framerate=10000) plt.subplot(232) plt.title("square") square.plot() square.write("方波声音.wav") play("方波声音.wav", flags=1) sawtooth = SawtoothSignal(freq=440).make_wave(duration=0.01, framerate=10000) plt.subplot(233) plt.title("sawtooth") sawtooth.plot() sawtooth.write("斜波声音.wav") play("斜波声音.wav", flags=1) spectrum_tra = trangle.make_spectrum() filter_spectrum(spectrum_tra) plt.subplot(234) spectrum_tra.plot() spectrum_squ = square.make_spectrum() filter_spectrum(spectrum_squ) plt.subplot(235) spectrum_squ.plot() spectrum_saw = sawtooth.make_spectrum() filter_spectrum(spectrum_saw) plt.subplot(236) spectrum_saw.plot() plt.show()
import numpy as np import matplotlib.pyplot as plt from thinkdsp import decorate from thinkdsp import Sinusoid from thinkdsp import normalize, unbias from thinkdsp import SawtoothSignal sawtooth = SawtoothSignal().make_wave(duration=0.5, framerate=40000) plt.subplot(4, 1, 1) sawtooth.make_spectrum().plot() decorate(xlabel='Frequency (Hz)') from thinkdsp import SquareSignal sawtooth.make_spectrum().plot(color='gray') square = SquareSignal(amp=0.5).make_wave(duration=0.5, framerate=40000) plt.subplot(4, 1, 2) square.make_spectrum().plot() decorate(xlabel='Frequency (Hz)') from thinkdsp import TriangleSignal plt.subplot(4, 1, 3) sawtooth.make_spectrum().plot(color='gray') triangle = TriangleSignal(amp=0.79).make_wave(duration=0.5, framerate=40000) plt.subplot(4, 1, 4) triangle.make_spectrum().plot() decorate(xlabel='Frequency (Hz)') plt.show()