[PYTHON] Vergleichen wir die Fourier-Transformation der synthetisierten Schallquelle und die Zusammensetzung der Fourier-Transformation

8/1 Ein Diagramm der Fourier-Transformation der Basisschallquelle und andere detaillierte Erklärungen wurden hinzugefügt.

was wirst du tun

Vergleichen Sie die Fourier-Transformation eines Komposits aus zwei Schallquellen mit dem Komposit der Fourier-Transformation jeder Schallquelle.

Was ist Fourier-Transformation?

Die meisten Wellen bestehen aus Sinuskurven verschiedener Frequenzen. Die Fourier-Transformation soll herausfinden, welche Art von Sinuswelle in welchem Verhältnis addiert wird. Wird oft als "Umwandlung vom Zeitbereich in den Frequenzbereich" bezeichnet.

Fourier-Transformationsmethode

Verwenden Sie die diskrete Fourier-Transformation. Ganz einfach, es ist eine Fourier-Transformation eines digitalen Signals. Ich habe Python 3.7 und Numpy verwendet.

import numpy as np
import matplotlib.pyplot as plt
import wave


def wave_open(file):
    wf = wave.open(file, "rb")
    nc = wf.getnchannels() #Anzahl der Kanäle(Mono oder Stereo)
    qn = wf.getsampwidth() #Anzahl der Quantisierungsbytes(1byte=8bit)
    sr = wf.getframerate() #Abtastfrequenz
    fl = wf.getnframes()   #Alle Frames(fl/sr=time(s))
    data = wf.readframes(fl) #Lesen Sie alle Frames(binär)
    
    data = np.frombuffer(data, dtype="int16") #Machen Sie es zu einem Integer-Numpy-Array
    if nc==2:
        data=data[::2]  #Verwenden Sie nur einen Kanal
    
    wf.close()
    
    return nc,qn,sr,fl,data

w_file_gt = wave_open("DisGtr-F.wav")
nc_gt = w_file_gt[0]  #Mono oder Stereo
qn_gt = w_file_gt[1]  #Anzahl der Quantisierungsbytes
sr_gt = w_file_gt[2]  #Abtastfrequenz
fl_gt = w_file_gt[3]  #Alle Frames

# x~x+1[s]Verwenden Sie 1 Sekunde Daten
timex = 5
data_size_s = sr_gt*timex
data_size_e = sr_gt*(timex+1)
data_gt = w_file_gt[4][data_size_s:data_size_e]

Schalldaten und Abtastfrequenz wurden mit dem Wellenmodul erfasst. Als nächstes werden wir eine Fourier-Transformation durchführen. Die Sounddaten sind eine 16-Bit-Gitarren-Soundquelle mit 44,1 kHz, die mit DAW erstellt wurde. Ich spiele den F-Dur-Akkord. Diese Tonquelle ist gtr-f-wave.png Es hat eine solche Wellenform.

Lassen Sie uns nun die Fourier-Transformation durchführen. Ich möchte gehen, aber vorher werde ich die "Fensterfunktion" erklären. Wenn das Tonsignal in Sekunden bis Sekunden unterbrochen wird, wird an beiden Enden ein Geräusch erzeugt, das nicht vorhanden sein sollte. Durch Multiplizieren der gesamten Daten mit der Fensterfunktion kann daher Rauschen auf Kosten einer Verringerung der Genauigkeit der Frequenzzerlegung unterdrückt werden. Dieses Mal werde ich ein allgemeines Summenfenster verwenden. Die Fourier-Transformation verwendet die FFT (Fast Fourier Transform) von numpy. Da es nur für 1 Sekunde geschnitten wurde, beträgt die Datengröße 44100, und die Frequenzzerlegung erfolgt ebenfalls alle 1 Hz.

#Summen Fenster
h_win = np.hamming(data_size)
data_gt_h = data_gt * h_win

#Fourier-Transformation
data_size = sr_gt  #Die Datengröße pro Sekunde entspricht der Abtastfrequenz
#FFT-Daten
fft_data_gt = np.fft.fft(data_gt)  #Schnelle Fourier-Transformation
amp_gt = np.abs(fft_data_gt/(data_size/2))  #Amplitude abrufen
amp_gt = amp_gt[:data_size//2]  #Das Ergebnis von FFT ist ein komplexes Zahlenarray → nur die erste Hälfte ist eine reelle Zahl
#Frequenzdaten
freq = np.fft.fftfreq(data_size,d=1/data_size)  #d ist die Abtastperiode
freq = freq[:data_size//2]  #An FFT-Daten anpassen

Nachdem wir eine Fourier-Transformation haben, zeichnen wir sie auf.

plt.plot(freq,amp_gt)
plt.axis([0,5000,0,3000])
plt.xlabel("Frequency(Hz)")
plt.ylabel("Amplitude")
plt.show()

Dann wird es so. (Da es nach 10000 Hz fast 0 war, habe ich es geschnitten.) disgtr-f.png

Synthetisieren Sie das Ergebnis der Fourier-Transformation

Nun zum Hauptthema. Fügen Sie jedes Element des Ergebnisses der Fourier-Transformation hinzu. Die andere Tonquelle wurde ebenfalls aus der DAW-Basissoundquelle hergestellt. BPM (Tempo) ist die gleiche wie die Gitarrensoundquelle in 8 Minuten F (fa). Die FFT-Methode ist dieselbe wie für die Gitarrensoundquelle. Die Fourier-Transformation der Bass-Klangquelle ist unten dargestellt (3000 Hz werden aus demselben Grund wie die Gitarren-Klangquelle geschnitten). bass-f.png

Lassen Sie uns nun synthetisieren.

fft_data_ba = np.fft.fft(data_ba)  #Bass-Klangquelle FFT
amp_ba = np.abs(fft_data_ba/(data_size/2))[:data_size//2]  #Gleiche Datengröße wie Gitarre

#Synthetik
amp_mix = amp_gt + amp_ba  #Addition für jedes Element

#Handlung
plt.plot(freq,amp_mix)
plt.axis([0,10000,0,8000])
plt.xlabel("Frequency(Hz)")
plt.ylabel("Amplitude")
plt.show()

Dann wird die folgende Abbildung erhalten. mix-f.png

Vergleich

mix-f-pre.png mix-f-plus.png Die Oberseite ist eine zusammengesetzte Schallquelle aus zwei Schallquellen, und die Unterseite ist eine Zusammenstellung jeder Fourier-Transformation. In beiden Fällen werden die Daten so wie sie sind hinzugefügt und kombiniert, ohne die Balance wie die Lautstärke anzupassen. Obwohl es Maximalwerte und kleine Unterschiede gibt, kann gesagt werden, dass die Umrisse fast gleich sind. Aus dem Obigen wurde herausgefunden, dass, wenn die in jeder Schallquelle enthaltenen Frequenzen und ihre Verhältnisse bekannt sind, die Frequenzverteilung der synthetisierten Schallquelle bekannt sein kann, ohne die Schallquellen zu synthetisieren.

Schließlich

Zusammenfassend war es natürlich, aber es scheint nützlich zu sein, wenn das Frequenzband der Gitarre oder des Basses geändert wird, um die Klänge zu trennen. Als nächstes möchte ich die Ursache des etwas anderen Teils zwischen der Fourier-Transformation der synthetisierten Schallquelle und der Synthese der Fourier-Transformation untersuchen. Vielleicht ist es ein Phasenproblem. das ist alles.

Recommended Posts

Vergleichen wir die Fourier-Transformation der synthetisierten Schallquelle und die Zusammensetzung der Fourier-Transformation
Eigenschaften der diskreten Fourier-Transformation
Vergleichen Sie die Geschwindigkeit von Python Append und Map
Vergleichen wir die beiden Bilder und suchen nach Fehlern
Wie man den Satz von Persival mit Matplotlib und der Fourier-Transformation (FFT) von scipy bestätigt
[Einführung in den Klang] Lassen Sie uns die Einführung in den Klang von Python und R arrange arrangieren. Hören Sie sich den Klang der Explosion von Nikkei 255 an.
Überqueren wir die Wand des linkshändigen Koordinatensystems und des rechtshändigen Koordinatensystems.
Lassen Sie uns das Timing von Barus vorhersagen und den Film langsam genießen
Vergleichen Sie die Schriftarten von Jupyter-Themen
Fourier-Transformation von Rohdaten
Quellinstallation und Installation von Python
Die Geschichte von Python und die Geschichte von NaN
Lassen Sie uns den Gewinner des Bingo bestimmen
Die Geschichte einer Soundkamera mit Touch Designer und ReSpeaker
Grundlegendes maschinelles Lernverfahren: ③ Vergleichen und untersuchen Sie die Auswahlmethode für die Merkmalsmenge