HansH schreef: ↑za 26 nov 2022, 10:24
je ziet dan ook dat energie tussen de 2 kringen heen en weer slingert, maar dis niet tot een evenwicht komt met gelijkblijvende amplitudes.
Nog een experiment gedaan krijg iets welke vergelijkbaar is als jouw plot.
Principe:
Het linker kanaal heb ik op: 440 Hz gehouden. Het rechter kanaal pas ik een fase verschuiving toe van 2pi over 15 seconden.
Signaal:
- Wave file gecreëerd zie code onderstaand.
- Kanaal links: \(L=sin(\omega t)\).
- Kanaal rechts: \(R=sin(\omega t + \frac{2 }{15}\pi t)\).
- Hier had ik twijfel of dit toelaatbaar is. De frequentie kanaal rechts veranderd eigenlijk kleine beetjes. Echter de frequentie verandering is periodiek en netto: 0 over 15 seconden. Bij een frequentie van 440 Hz verwaarloosbaar zou ik zeggen.
- Het geluids bestand is dan als volgt
- Door enkel het linker of recht kanaal af te spelen is gecontroleerd of de geluidsterkte constant blijft.
- Het valt op dat de onderste paarse grafiek als: som links en recht uit geluids bestand een envelope laten zien vergelijkbaar als HansH grafiek.
Meting:
- De luidsprekers zijn dicht nabij geplaatst zoals onderstaande foto.
- Observatie: indien de luidsprekers dicht bij elkaar staan is WEL verandering in luissterkte waarneembaar. Indien verder van elkaar is er GEEN verandering in luid strekte waarneembaar door mij.
- Middels de webcam microfoon is er een mono opname gemaakt.
- Observaties: de intensiteit van de opname veranderd net zoals de theoretische som van kanaal links en rechts. Het signaal is sinus vormig. Het spectrogram laat de frequentie zien van 440 Hz en de intensiteit verandering is waarneembaar (donker rood start en einde, licht rood / oranje in het midden.
Conclusie:
- Constructieve/Destructieve interferentie door faseverschuiving is alleen waargenomen indien beide luidsprekers nabij elkaar geplaatst zijn.
Fase verschuiving heeft invloed op de geluidsterkte voornamelijk wanneer bronnen zeer dicht bij elkaar zijn. Ik zou verder moeten studeren welke theorie dit beschrijft mits correct waargenomen.
Geluid Signaal en grafiek:
Code: Selecteer alles
import numpy as np
from scipy.io.wavfile import write
samplerate = 44100;
fs = 440
time = 15
amplitude = np.iinfo(np.int16).max
# time array
t = np.arange(0, int(time*fs)/fs, 1 / samplerate)
# left signal phase constant
left = amplitude * np.sin(2. * np.pi * fs * t)
# right signal phase shift 2pi over time
phase = np.linspace(0, 2*np.pi, len(t))
right = amplitude * np.sin((2. * np.pi ) * fs * t + phase)
# combine left right channel and save wavefile
signal = np.array([np.array(left), np.array(right)]).T
write("Left-Right-Phase_440_Hz.wav", samplerate, signal.astype(np.int16))
# De grafiek:
from matplotlib.ticker import FormatStrFormatter
import matplotlib.pyplot as plt
# Define layout spectrogram plot and time series
layout = [ ["left","left","left"], ["right","right","right"], ["1", "2","3"], ["left+right", "left+right", "left+right"]]
gs_kw = dict(width_ratios=[1,1,1], height_ratios=[1, 1, 1, 1])
fig, axd = plt.subplot_mosaic(layout, figsize=(16, 9), layout="constrained", gridspec_kw=gs_kw)
axd["left"].plot(t, left, color="red", linewidth=0.05)
axd["left"].set_title("Left")
axd["right"].plot(t, right, color="blue", linewidth=0.05)
axd["right"].set_title("Right")
axd["1"].plot(t, left, color="red", linewidth=0.5)
axd["1"].plot(t, right, color="blue", linewidth=0.5)
axd["1"].set_xlim(1.99, 2.01)
axd["1"].xaxis.set_major_formatter(FormatStrFormatter('%.2f'))
axd["2"].plot(t, left, color="red", linewidth=0.5)
axd["2"].plot(t, right, color="blue", linewidth=0.5)
axd["2"].set_xlim(7.49, 7.51)
axd["2"].xaxis.set_major_formatter(FormatStrFormatter('%.2f'))
axd["3"].plot(t, left, color="red", linewidth=0.5)
axd["3"].plot(t, right, color="blue", linewidth=0.5)
axd["3"].set_xlim(12.99, 13.01)
axd["3"].xaxis.set_major_formatter(FormatStrFormatter('%.2f'))
axd["2"].set_title("left and right")
axd["left+right"].plot(t, left+right, color="purple", linewidth=0.05)
axd["left+right"].set_title("Left+Right")
fig.suptitle("Signals In Wave File: Left-Right-Phase_440_Hz.wav", fontsize=26)
plt.show()
Spectrogram van geluidopname:
Code: Selecteer alles
from scipy.io import wavfile
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import numpy as np
from scipy.io.wavfile import write
# Define layout spectrogram plot and time series
layout = [ ["time"], ["timepart"], ["freq"], ["phase"]]
gs_kw = dict(width_ratios=[1], height_ratios=[1, 1, 1, 1])
fig, axd = plt.subplot_mosaic(layout, figsize=(16, 9), layout="constrained", gridspec_kw=gs_kw)
# Sample frequency
fs = 44100
sample_rate, signal = wavfile.read('Left-Right-Phase-Rec_440_Hz.wav')
def spectogram(signal):
# calcuate the spectrogram, determine perios instead of frequency
spec, freq, t = mlab.specgram(signal, Fs=fs, mode="magnitude", NFFT=15000, noverlap=14800)
# Crop frequency range: 0-1500 Hz
difference_array = np.absolute(freq - 500)
end = difference_array.argmin()
difference_array = np.absolute(freq - 380)
start = difference_array.argmin()
return t, freq[start:end:], spec[start:end:]
def phasegram(signal):
# calcuate the spectrogram, determine perios instead of frequency
spec, freq, t = mlab.specgram(signal, Fs=fs, mode="phase", NFFT=15000, noverlap=14800)
# Crop frequency range: 0-1500 Hz
difference_array = np.absolute(freq - 500)
end = difference_array.argmin()
difference_array = np.absolute(freq - 380)
start = difference_array.argmin()
return t, freq[start:end:], spec[start:end:]
# Plot time signal
time = np.arange(np.size(signal))/sample_rate
axd["time"].plot(time, signal, color="black", linewidth=0.1)
axd["time"].set_xlabel("elapsed time [seconds]")
axd["time"].set_ylabel("Amplitude [arb.]")
axd["timepart"].plot(time, signal, color="black", linewidth=0.5)
axd["timepart"].set_xlabel("elapsed time [seconds]")
axd["timepart"].set_ylabel("Amplitude [arb.]")
# Plot Spectogram
time, period, spectrum = spectogram(signal)
axd["freq"].pcolormesh(time, (period), np.log10(spectrum), cmap="coolwarm")
axd["freq"].set_xlabel("elapsed time [seconds]")
axd["freq"].set_ylabel("frequency [Hz]")
# Plot Spectogram
time, period, spectrum = phasegram(signal)
axd["phase"].pcolormesh(time, period, spectrum, cmap="coolwarm")
axd["phase"].set_xlabel("elapsed time [seconds]")
axd["phase"].set_ylabel("frequency [Hz]")
fig.suptitle("Mono Recording Two Speakers", fontsize=26)
plt.show()