1050 lines
167 KiB
Plaintext
1050 lines
167 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#Funktionen und Abhängigkeiten\n",
|
|
"\n",
|
|
"import time\n",
|
|
"import os\n",
|
|
"from ipywidgets import interact\n",
|
|
"from scipy import signal\n",
|
|
"from scipy.signal import savgol_filter\n",
|
|
"from scipy.stats import pearsonr\n",
|
|
"import numpy as np\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import soundfile as sf\n",
|
|
"import pandas as pd\n",
|
|
"import csv\n",
|
|
"\n",
|
|
"# Soundfile laden\n",
|
|
"def load_wav(filename):\n",
|
|
" y, fs = sf.read(filename, dtype='float32')\n",
|
|
" return fs, y.T\n",
|
|
"\n",
|
|
"# Sensitivätskurve Mikrofon laden (normiert auf 1000 Hz)\n",
|
|
"def load_transfer_function(filename):\n",
|
|
" df = pd.read_csv(filename, skiprows=3, header=None, dtype=float, sep=\";\")\n",
|
|
" frequencies = df.iloc[:, 0]\n",
|
|
" gain = df.iloc[:, 1]\n",
|
|
" return frequencies, gain\n",
|
|
"\n",
|
|
"# Transferfunktion für frequenzabhängige Veränderung von Signal anlegen\n",
|
|
"def apply_transfer_function_freq(signal, fs, frequencies, gain_dB):\n",
|
|
" # Signal in Frequenzbereich fouriertransformieren, Frequenzbins berechnen, linearen Gain berechnen\n",
|
|
" N = len(signal)\n",
|
|
" freq_signal = np.fft.rfft(signal)\n",
|
|
" freq_bins = np.fft.rfftfreq(N, d=1/fs)\n",
|
|
" gain_linear = 10 ** (gain_dB / 20.0) \n",
|
|
" # Gain Werte interpolieren auf die tatsächlichen Frequenzbins\n",
|
|
" # Phasenshift für die Verzögerung berechnen\n",
|
|
" # Signalfrequenzen modifizieren. \n",
|
|
" # Signal wieder zurück in Zeitbereich\n",
|
|
" gain_interp = np.interp(freq_bins, frequencies, gain_linear)\n",
|
|
" modified_freq_signal = freq_signal * gain_interp\n",
|
|
" modified_signal = np.fft.irfft(modified_freq_signal, n=N)\n",
|
|
" return modified_signal\n",
|
|
"\n",
|
|
"# High-Level ANR Algorithmmus\n",
|
|
"def anr_function(input, ref_noise, coefficients, mu, adaption_step = 1):\n",
|
|
" coefficient_matrix = np.zeros((len(input), coefficients), dtype=np.float32)\n",
|
|
" output=np.zeros(input.shape[0], dtype=np.float32)\n",
|
|
" filter = np.zeros(coefficients, dtype=np.float32)\n",
|
|
" adaption_step = 1\n",
|
|
" \n",
|
|
" for j in range(0, len(input) - len(filter)): \n",
|
|
" accumulator=0\n",
|
|
" for i in range(coefficients):\n",
|
|
" noise=ref_noise[j+i]\n",
|
|
" accumulator+=filter[i] * noise\n",
|
|
" output[j] = input[j] - accumulator\n",
|
|
" corrector = mu * output[j]\n",
|
|
" if (j % adaption_step) == 0:\n",
|
|
" for k in range(coefficients):\n",
|
|
" filter[k] += corrector*ref_noise[j+k]\n",
|
|
" coefficient_matrix[j, :] = filter[:]\n",
|
|
" return output, coefficient_matrix\n",
|
|
"\n",
|
|
"# Low-Level ANR Algorithmmus (wie in C)\n",
|
|
"def anr_function_c(input, ref_noise, coefficients, mu, adaption_step = 1):\n",
|
|
" sample_count = len(input)\n",
|
|
" filter_line = np.zeros(coefficients)\n",
|
|
" sample_line = np.zeros(coefficients)\n",
|
|
" output = np.zeros(sample_count)\n",
|
|
" coeffient_matrix = np.zeros((sample_count, coefficients))\n",
|
|
" \n",
|
|
" for n in range(sample_count):\n",
|
|
" # Reference Noise Signal in Sample Line\n",
|
|
" sample_line = np.roll(sample_line, 1)\n",
|
|
" sample_line[0] = ref_noise[n]\n",
|
|
" # apply_fir_filter: Akkumulator berechnen\n",
|
|
" accumulator = np.dot(filter_line, sample_line)\n",
|
|
" # update_output: Output/Error berechnen\n",
|
|
" error = input[n] - accumulator\n",
|
|
" output[n] = error\n",
|
|
" # update_filter_coeffcients: Filterkoeffizienten adaptieren\n",
|
|
" filter_line += mu * error * sample_line\n",
|
|
" # Filterkoeffizienten expoertieren\n",
|
|
" coeffient_matrix[n, :] = filter_line\n",
|
|
" return output, coeffient_matrix\n",
|
|
"\n",
|
|
"\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#Plots für Simple Usecases\n",
|
|
"\n",
|
|
"SIMULATION = True\n",
|
|
"AUDIO = False\n",
|
|
"PLOT = True\n",
|
|
"COMPLEX = True\n",
|
|
"\n",
|
|
"plot = 'sine_1'\n",
|
|
"\n",
|
|
"# Chirp Generator\n",
|
|
"n=2000 #Sampleanzahl\n",
|
|
"fs=20000 #Samplingrate\n",
|
|
"f0=100 #Startfrequenz\n",
|
|
"f1=1000 #Stopfrequenz\n",
|
|
"t1=n/fs #Chirpdauer (Samples/Samplingrate)\n",
|
|
"if plot == 'sine_1':\n",
|
|
" f_disturber=2000 #Störfrequenz\n",
|
|
"else:\n",
|
|
" f_disturber=500 #Störfrequenz\n",
|
|
"\n",
|
|
"signal_amplitude=0.5\n",
|
|
"disturber_amplitude=0.25\n",
|
|
"\n",
|
|
"# Parameter setzen\n",
|
|
"coefficients = 16\n",
|
|
"step_size = 0.01\n",
|
|
"noise_delay = 0.000\n",
|
|
"indices = [0, coefficients // 2, coefficients - 1]\n",
|
|
"\n",
|
|
"t = np.linspace(0, t1, n)\n",
|
|
"\n",
|
|
"# Zielsignal anlegen\n",
|
|
"desired_signal = signal.chirp(t, f0=f0, f1=f1, t1=t1, method='linear')*signal_amplitude\n",
|
|
"\n",
|
|
"# Störsignal anlegen\n",
|
|
"if plot == 'sine_1' or plot == 'sine_2':\n",
|
|
" noise_signal = np.sin(2*np.pi*f_disturber*t) * disturber_amplitude\n",
|
|
"else:\n",
|
|
" noise_signal = np.random.normal(0, 1, n) * disturber_amplitude\n",
|
|
"\n",
|
|
"# Sensitivätskurve Mikrofon laden (normiert auf 1000 Hz)\n",
|
|
"frequency_r11, gain_r11 = load_transfer_function('./transfer_functions/R11_normalized.csv')\n",
|
|
"frequency_vpu, gain_vpu = load_transfer_function('./transfer_functions/VPU17BA01_normlized.csv')\n",
|
|
"\n",
|
|
"if COMPLEX == True:\n",
|
|
" desired_signal_r11 = apply_transfer_function_freq(desired_signal, fs, frequency_r11, gain_r11)\n",
|
|
" noise_signal_r11 = apply_transfer_function_freq(noise_signal, fs, frequency_r11, gain_r11)\n",
|
|
" noise_signal_vpu = apply_transfer_function_freq(noise_signal, fs, frequency_vpu, gain_vpu)\n",
|
|
"else:\n",
|
|
" desired_signal_r11 = desired_signal\n",
|
|
" noise_signal_r11 = noise_signal\n",
|
|
" noise_signal_vpu = noise_signal\n",
|
|
"\n",
|
|
"# Noise Delay bedeutet, dass das Corruption Noise Signal im Corrupted Signal verzögert ist (zum Reference Noise Signal)\n",
|
|
"if noise_delay != 0:\n",
|
|
" # Delay von ms in Samples umrechnen, 0-Array erzeugen\n",
|
|
" delay_samples = int(noise_delay * fs)\n",
|
|
" noise_signal_r11_delayed = np.zeros_like(noise_signal_r11)\n",
|
|
" # Schneided die Delay Samples vom ursprünglichen Array ab und schreibt sie nach entsprechend vielen Nullen ins neue Array\n",
|
|
" noise_signal_r11_delayed[delay_samples:] = noise_signal_r11[:-delay_samples]\n",
|
|
" # Corrupted Signal mit verzögertem Noise\n",
|
|
" corrupted_signal = desired_signal_r11 + noise_signal_r11_delayed\n",
|
|
"else:\n",
|
|
" corrupted_signal = desired_signal_r11 + noise_signal_r11\n",
|
|
"\n",
|
|
"# Zeitachse anlegen, ANR Algorithmus ausführen\n",
|
|
"t = np.linspace(0, len(corrupted_signal), len(corrupted_signal))/1000\n",
|
|
"output, coefficient_matrix = anr_function_c(corrupted_signal, noise_signal_vpu, coefficients, step_size, adaption_step=1)\n",
|
|
"\n",
|
|
"# Koeffizientenmatrix und Vergleich um Koeffizientenanzahl kürzen, um Tail zu vermeiden, 2.te Zeitachse anlegen\n",
|
|
"coefficient_matrix = coefficient_matrix[:-coefficients]\n",
|
|
"error_signal = (output - desired_signal_r11)[:-coefficients]\n",
|
|
"t2 = np.linspace(0, len(error_signal), len(error_signal))/20000\n",
|
|
"\n",
|
|
"# SNR davor/danach in dB berechnen, SNR Ratio berechnen, \n",
|
|
"snr_before = 10 * np.log10(np.trapz(desired_signal_r11**2, t) / np.trapz(noise_signal_r11**2, t))\n",
|
|
"snr_after = 10 * np.log10(np.trapz(desired_signal_r11**2, t) / np.trapz(error_signal**2, t2))\n",
|
|
"delta_snr = round(snr_after - snr_before, 2)\n",
|
|
"\n",
|
|
"if SIMULATION == True:\n",
|
|
" # Soundfiles zu 16 Bit skalieren und als .txt speichern für DSP Simulation\n",
|
|
" dsp_desired_signal_r11 = desired_signal_r11*(2**(15)-1)\n",
|
|
" dsp_noise_signal_r11 = noise_signal_r11*(2**(15)-1)\n",
|
|
" dsp_noise_signal_vpu = noise_signal_vpu*(2**(15)-1)\n",
|
|
" dsp_corrupted_signal = dsp_desired_signal_r11 + dsp_noise_signal_r11\n",
|
|
" python_output = output*(2**(15)-1)\n",
|
|
" np.savetxt('simulation_data/simple_dsp_desired_signal_r11.txt', dsp_desired_signal_r11, fmt='%d')\n",
|
|
" np.savetxt('simulation_data/simple_dsp_noise_signal_r11.txt', dsp_noise_signal_r11, fmt='%d')\n",
|
|
" np.savetxt('simulation_data/simple_dsp_noise_signal_vpu.txt', dsp_noise_signal_vpu, fmt='%d', delimiter=\"\\n\")\n",
|
|
" np.savetxt('simulation_data/simple_dsp_corrupted_signal.txt', dsp_corrupted_signal, fmt='%d', delimiter=\"\\n\")\n",
|
|
" np.savetxt('filter_output/simple_python_output.txt', python_output, fmt='%d', delimiter=\"\\n\")\n",
|
|
" np.savetxt('filter_output/simple_python_filter_coefficients.txt', coefficient_matrix, fmt='%.4f', delimiter=\",\")\n",
|
|
"\n",
|
|
"# Plots des Filterprozesses\n",
|
|
"figure1, (ax0, ax1, ax2, ax3) = plt.subplots(4, 1, figsize=(15, 12), sharex=True, sharey=True)\n",
|
|
"ax0.set_ylim(-1, 1)\n",
|
|
"ax0.plot(t, desired_signal, c='deepskyblue', label='Desired signal')\n",
|
|
"ax1.plot(t, corrupted_signal, c='royalblue', label='Corrupted signal')\n",
|
|
"ax2.plot(t, noise_signal, c='chocolate', label='Reference noise signal')\n",
|
|
"ax3.plot(t, output, c='green', label=f'SNR Gain = {delta_snr} dB')\n",
|
|
"\n",
|
|
"ax0.text(0.5, -0.3, '(a) Desired signal',\n",
|
|
" transform=ax0.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax1.text(0.5, -0.3, '(b) Corrupted signal',\n",
|
|
" transform=ax1.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax2.text(0.5, -0.3, '(c) Reference noise signal',\n",
|
|
" transform=ax2.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax3.text(0.5, -0.5, f'(d) Filter output (SNR Gain = {delta_snr} dB)',\n",
|
|
" transform=ax3.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax3.set_xlabel('time(s)', x=0.05)\n",
|
|
"ax0.set_ylabel('Amplitude')\n",
|
|
"ax1.set_ylabel('Amplitude')\n",
|
|
"ax2.set_ylabel('Amplitude')\n",
|
|
"ax3.set_ylabel('Amplitude')\n",
|
|
"\n",
|
|
"# Plots der Filterperfomanz\n",
|
|
"figure2, (ax4, ax5) = plt.subplots(2, 1, figsize=(15, 7), sharex=True)\n",
|
|
"ax4.set_ylim(-1, 1)\n",
|
|
"ax4.plot(t2, error_signal, c='purple', label='Error (Desired signal - Filter output)')\n",
|
|
"for i in indices:\n",
|
|
" ax5.plot(t2, coefficient_matrix[:,i], label=f'Coefficient {i+1}')\n",
|
|
"\n",
|
|
"ax4.text(0.5, -0.3, '(a) Error signal',\n",
|
|
" transform=ax4.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax5.text(0.5, -0.5, '(b) Coefficient values (1st, 8th, 16th)',\n",
|
|
" transform=ax5.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax5.set_xlabel('time(s)', x=0.05)\n",
|
|
"ax4.set_ylabel('Amplitude')\n",
|
|
"ax5.set_ylabel('Coeffcient value')\n",
|
|
"\n",
|
|
"#Grids direkt auf Subplots anwenden\n",
|
|
"ax0.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax1.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax2.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax3.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax4.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax5.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"\n",
|
|
"#Spines direkt auf Subplots anwenden\n",
|
|
"ax0.spines['top'].set_visible(False)\n",
|
|
"ax1.spines['top'].set_visible(False)\n",
|
|
"ax2.spines['top'].set_visible(False)\n",
|
|
"ax3.spines['top'].set_visible(False)\n",
|
|
"ax4.spines['top'].set_visible(False)\n",
|
|
"ax5.spines['top'].set_visible(False)\n",
|
|
"ax0.spines['right'].set_visible(False)\n",
|
|
"ax1.spines['right'].set_visible(False)\n",
|
|
"ax2.spines['right'].set_visible(False)\n",
|
|
"ax3.spines['right'].set_visible(False)\n",
|
|
"ax4.spines['right'].set_visible(False)\n",
|
|
"ax5.spines['right'].set_visible(False)\n",
|
|
"\n",
|
|
"# Schriftgrößen für LaTeX-Dokument\n",
|
|
"plt.rcParams.update({\n",
|
|
" \"text.usetex\": True,\n",
|
|
" \"font.family\": \"serif\",\n",
|
|
" 'font.size': 16, # Standardtext\n",
|
|
" 'axes.labelsize': 30, # Achsenbeschriftungen\n",
|
|
" 'xtick.labelsize': 25, # Tick-Beschriftungen\n",
|
|
" 'ytick.labelsize': 25,\n",
|
|
" 'legend.fontsize': 15 # Legende\n",
|
|
"})\n",
|
|
"\n",
|
|
"figure1.tight_layout()\n",
|
|
"figure2.tight_layout()\n",
|
|
"if PLOT == True:\n",
|
|
" figure1.savefig(f'plots/fig_plot_1_{plot}', dpi=600)\n",
|
|
" figure2.savefig(f'plots/fig_plot_2_{plot}', dpi=600)\n",
|
|
"plt.show()\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#Plots für intermediate/komplexen Usecases\n",
|
|
"\n",
|
|
"from pandas import Series\n",
|
|
"\n",
|
|
"COMPLEX= True\n",
|
|
"SIMULATION = True\n",
|
|
"AUDIO = False\n",
|
|
"PLOT = False\n",
|
|
"SERIES = False\n",
|
|
"\n",
|
|
"# Chirp Generator\n",
|
|
"n=2000 #Sampleanzahl\n",
|
|
"fs=20000 #Samplingrate\n",
|
|
"f0=100 #Startfrequenz\n",
|
|
"f1=1000 #Stopfrequenz\n",
|
|
"t1=n/fs #Chirpdauer (Samples/Samplingrate)\n",
|
|
"f_disturber=2000 #Störfrequenz\n",
|
|
"\n",
|
|
"# Parameter setzen\n",
|
|
"coefficients = 16\n",
|
|
"step_size = 0.01\n",
|
|
"noise_delay = 0.000\n",
|
|
"indices = [0, coefficients // 2, coefficients - 1]\n",
|
|
"\n",
|
|
"# .wav File laden, Tonspuren den Signalen zuordnen, Corrputed Target Signal erstellen, Reduced Noise Signal erstellen\n",
|
|
"fs, data_1 = load_wav(f'./audio_data/Nutzsignal/male.wav')\n",
|
|
"fs, data_2 = load_wav(f'./audio_data/Störsignal/breathing.wav')\n",
|
|
"\n",
|
|
"# Sensitivätskurve Mikrofon laden (normiert auf 1000 Hz)\n",
|
|
"frequency_r11, gain_r11 = load_transfer_function('./transfer_functions/R11_normalized.csv')\n",
|
|
"frequency_vpu, gain_vpu = load_transfer_function('./transfer_functions/VPU17BA01_normlized.csv')\n",
|
|
"\n",
|
|
"# Signale laden und zuordnen\n",
|
|
"desired_signal = data_1\n",
|
|
"noise_signal = data_2\n",
|
|
"if COMPLEX == True:\n",
|
|
" desired_signal_r11 = apply_transfer_function_freq(desired_signal, fs, frequency_r11, gain_r11)\n",
|
|
" noise_signal_r11 = apply_transfer_function_freq(noise_signal, fs, frequency_r11, gain_r11)\n",
|
|
" noise_signal_vpu = apply_transfer_function_freq(noise_signal, fs, frequency_vpu, gain_vpu)\n",
|
|
"else:\n",
|
|
" desired_signal_r11 = desired_signal\n",
|
|
" noise_signal_r11 = noise_signal\n",
|
|
" noise_signal_vpu = noise_signal\n",
|
|
"\n",
|
|
"# Noise Delay bedeutet, dass das Corruption Noise Signal im Corrupted Signal verzögert ist (zum Reference Noise Signal)\n",
|
|
"if noise_delay != 0:\n",
|
|
" # Delay von ms in Samples umrechnen, 0-Array erzeugen\n",
|
|
" delay_samples = int(noise_delay * fs)\n",
|
|
" noise_signal_r11_delayed = np.zeros_like(noise_signal_r11)\n",
|
|
" # Schneided die Delay Samples vom ursprünglichen Array ab und schreibt sie nach entsprechend vielen Nullen ins neue Array\n",
|
|
" noise_signal_r11_delayed[delay_samples:] = noise_signal_r11[:-delay_samples]\n",
|
|
" # Corrupted Signal mit verzögertem Noise\n",
|
|
" corrupted_signal = desired_signal_r11 + noise_signal_r11_delayed\n",
|
|
"else:\n",
|
|
" corrupted_signal = desired_signal_r11 + noise_signal_r11\n",
|
|
"\n",
|
|
"# Zeitachse anlegen, ANR Algorithmus ausführen\n",
|
|
"t = np.linspace(0, len(corrupted_signal), len(corrupted_signal))/20000\n",
|
|
"\n",
|
|
"if SERIES == True:\n",
|
|
" for i in range(16, coefficients+2, 2):\n",
|
|
" output, coefficient_matrix = anr_function_c(corrupted_signal, noise_signal_vpu, i, step_size, adaption_step=1)\n",
|
|
"\n",
|
|
" # Koeffizientenmatrix und Vergleich um Koeffizientenanzahl kürzen, um Tail zu vermeiden, 2.te Zeitachse anlegen\n",
|
|
" coefficient_matrix = coefficient_matrix[:-coefficients]\n",
|
|
" error_signal = (output - desired_signal_r11)[:-coefficients]\n",
|
|
" t2 = np.linspace(0, len(error_signal), len(error_signal))/20000\n",
|
|
"\n",
|
|
" # SNR davor/danach in dB berechnen, SNR Ratio berechnen, \n",
|
|
" snr_before = 10 * np.log10(np.trapz(desired_signal_r11**2, t) / np.trapz(noise_signal_r11**2, t))\n",
|
|
" snr_after = 10 * np.log10(np.trapz(desired_signal_r11**2, t) / np.trapz(error_signal**2, t2))\n",
|
|
" delta_snr = round(snr_after - snr_before, 2)\n",
|
|
"\n",
|
|
" with open('snr_evaluation/male+breathing', 'a', newline='') as f:\n",
|
|
" writer = csv.writer(f)\n",
|
|
" writer.writerow([i, delta_snr])\n",
|
|
"else:\n",
|
|
" output, coefficient_matrix = anr_function_c(corrupted_signal, noise_signal_vpu, coefficients, step_size, adaption_step=1)\n",
|
|
"\n",
|
|
"# Koeffizientenmatrix und Vergleich um Koeffizientenanzahl kürzen, um Tail zu vermeiden, 2.te Zeitachse anlegen\n",
|
|
"coefficient_matrix = coefficient_matrix[:-coefficients]\n",
|
|
"error_signal = (output - desired_signal_r11)[:-coefficients]\n",
|
|
"t2 = np.linspace(0, len(error_signal), len(error_signal))/20000\n",
|
|
"\n",
|
|
"# SNR davor/danach in dB berechnen, SNR Ratio berechnen, \n",
|
|
"snr_before = 10 * np.log10(np.trapz(desired_signal_r11**2, t) / np.trapz(noise_signal_r11**2, t))\n",
|
|
"snr_after = 10 * np.log10(np.trapz(desired_signal_r11**2, t) / np.trapz(error_signal**2, t2))\n",
|
|
"delta_snr = round(snr_after - snr_before, 2)\n",
|
|
"\n",
|
|
"if AUDIO == True:\n",
|
|
" # Audiodateien zum Vergleich abspeichern\n",
|
|
" sf.write('corrupted_signal.wav', corrupted_signal, fs)\n",
|
|
" sf.write('filter_output.wav', output, fs)\n",
|
|
"\n",
|
|
"if SIMULATION == True:\n",
|
|
" # Soundfiles zu 16 Bit skalieren und als .txt speichern für DSP Simulation\n",
|
|
" dsp_desired_signal_r11 = desired_signal_r11*(2**(15)-1)\n",
|
|
" dsp_noise_signal_r11 = noise_signal_r11*(2**(15)-1)\n",
|
|
" dsp_noise_signal_vpu = noise_signal_vpu*(2**(15)-1)\n",
|
|
" dsp_corrupted_signal = dsp_desired_signal_r11 + dsp_noise_signal_r11\n",
|
|
" python_output = output*(2**(15)-1)\n",
|
|
" python_coefficient_matrix = coefficient_matrix*(2**(15)-1)\n",
|
|
" np.savetxt('simulation_data/complex_dsp_desired_signal_r11.txt', dsp_desired_signal_r11, fmt='%d')\n",
|
|
" np.savetxt('simulation_data/complex_dsp_noise_signal_r11.txt', dsp_noise_signal_r11, fmt='%d')\n",
|
|
" np.savetxt('simulation_data/complex_dsp_noise_signal_vpu.txt', dsp_noise_signal_vpu, fmt='%d', delimiter=\"\\n\")\n",
|
|
" np.savetxt('simulation_data/complex_dsp_corrupted_signal.txt', dsp_corrupted_signal, fmt='%d', delimiter=\"\\n\")\n",
|
|
" np.savetxt('filter_output/complex_python_output.txt', python_output, fmt='%d', delimiter=\"\\n\")\n",
|
|
" np.savetxt('filter_output/complex_python_filter_coefficients.txt', python_coefficient_matrix, fmt='%d', delimiter=\",\")\n",
|
|
"\n",
|
|
"# Plots des Filterprozesses\n",
|
|
"figure1, (ax0, ax1, ax2, ax3) = plt.subplots(4, 1, figsize=(15, 12), sharex=True, sharey=True)\n",
|
|
"ax0.set_ylim(-1, 1)\n",
|
|
"ax0.plot(t, desired_signal, c='deepskyblue', label='Desired signal')\n",
|
|
"ax1.plot(t, corrupted_signal, c='royalblue', label='Corrupted signal')\n",
|
|
"ax2.plot(t, noise_signal_vpu, c='chocolate', label='Reference noise signal')\n",
|
|
"ax3.plot(t, output, c='green', label=f'SNR Gain = {delta_snr} dB')\n",
|
|
"\n",
|
|
"ax0.text(0.5, -0.3, '(a) Desired signal',\n",
|
|
" transform=ax0.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax1.text(0.5, -0.3, '(b) Corrupted signal',\n",
|
|
" transform=ax1.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax2.text(0.5, -0.3, '(c) Reference noise signal',\n",
|
|
" transform=ax2.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax3.text(0.5, -0.5, f'(d) Filter output (SNR Gain = {delta_snr} dB)',\n",
|
|
" transform=ax3.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax3.set_xlabel('time(s)', x=0.05)\n",
|
|
"ax0.set_ylabel('Amplitude')\n",
|
|
"ax1.set_ylabel('Amplitude')\n",
|
|
"ax2.set_ylabel('Amplitude')\n",
|
|
"ax3.set_ylabel('Amplitude')\n",
|
|
"\n",
|
|
"# Plots der Filterperfomanz\n",
|
|
"figure2, (ax4, ax5) = plt.subplots(2, 1, figsize=(15, 7), sharex=True)\n",
|
|
"ax4.set_ylim(-1, 1)\n",
|
|
"ax4.plot(t2, error_signal, c='purple', label='Error (Desired signal - Filter output)')\n",
|
|
"for i in indices:\n",
|
|
" ax5.plot(t2, coefficient_matrix[:,i], label=f'Coefficient {i+1}')\n",
|
|
"\n",
|
|
"ax4.text(0.5, -0.3, '(a) Error signal',\n",
|
|
" transform=ax4.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax5.text(0.5, -0.5, '(b) Coefficient values (1st, 8th, 16th)',\n",
|
|
" transform=ax5.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax5.set_xlabel('time(s)', x=0.05)\n",
|
|
"ax4.set_ylabel('Amplitude')\n",
|
|
"ax5.set_ylabel('Coeffcient value')\n",
|
|
"\n",
|
|
"# Plot Sensitivitätskurve\n",
|
|
"figure3, (ax6, ax7) = plt.subplots(2, 1, figsize=(15, 7), sharex=True)\n",
|
|
"ax6.set_ylim(min(gain_r11), max(gain_r11))\n",
|
|
"ax7.set_ylim(min(gain_vpu), max(gain_vpu))\n",
|
|
"ax6.plot(frequency_r11, gain_r11, c='indianred', label='Sensitivity Curve (Primary sensor)' )\n",
|
|
"ax7.plot(frequency_vpu, gain_vpu, c='orangered', label='Sensitivity Curve (Secondary sensor)')\n",
|
|
"\n",
|
|
"ax6.text(0.5, -0.3, '(a) Sensitivity Curve (Primary sensor)',\n",
|
|
" transform=ax6.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"ax7.text(0.5, -0.5, '(b) Sensitivity Curve (Secondary sensor)',\n",
|
|
" transform=ax7.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax7.set_xlabel('Frequency (Hz)', x=0.1)\n",
|
|
"ax6.set_ylabel('Gain (dB)')\n",
|
|
"ax7.set_ylabel('Gain (dB)')\n",
|
|
"\n",
|
|
"# Plot für Störsignalvergleich\n",
|
|
"figure4, (ax8, ax9, ax10) = plt.subplots(3, 1, figsize=(15, 10), sharex=True, sharey=True)\n",
|
|
"ax8.set_ylim(1.0, -1.0)\n",
|
|
"ax8.plot(t, noise_signal, c='orange', label='Noise signal')\n",
|
|
"ax9.plot(t, noise_signal_r11, c='darkorange', label='Corruption noise signal (Primary sensor)')\n",
|
|
"ax10.plot(t, noise_signal_vpu, c='peru', label='Reference noise signal (Secondary sensor)')\n",
|
|
"\n",
|
|
"ax8.text(0.5, -0.3, '(a) Noise signal',\n",
|
|
" transform=ax8.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax9.text(0.5, -0.3, '(b) Corruption noise signal (Primary sensor)',\n",
|
|
" transform=ax9.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax10.text(0.5, -0.5, '(c) Reference noise signal (Secondary sensor)',\n",
|
|
" transform=ax10.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax10.set_xlabel('time(s)', x=0.05)\n",
|
|
"ax8.set_ylabel('Amplitude')\n",
|
|
"ax9.set_ylabel('Amplitude')\n",
|
|
"ax10.set_ylabel('Amplitude')\n",
|
|
"\n",
|
|
"#Grids direkt auf Subplots anwenden\n",
|
|
"ax0.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax1.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax2.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax3.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax4.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax5.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax6.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax7.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax8.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax9.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax10.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"\n",
|
|
"#Spines direkt auf Subplots anwenden\n",
|
|
"ax0.spines['top'].set_visible(False)\n",
|
|
"ax1.spines['top'].set_visible(False)\n",
|
|
"ax2.spines['top'].set_visible(False)\n",
|
|
"ax3.spines['top'].set_visible(False)\n",
|
|
"ax4.spines['top'].set_visible(False)\n",
|
|
"ax5.spines['top'].set_visible(False)\n",
|
|
"ax6.spines['top'].set_visible(False)\n",
|
|
"ax7.spines['top'].set_visible(False)\n",
|
|
"ax8.spines['top'].set_visible(False)\n",
|
|
"ax9.spines['top'].set_visible(False)\n",
|
|
"ax10.spines['top'].set_visible(False)\n",
|
|
"ax0.spines['right'].set_visible(False)\n",
|
|
"ax1.spines['right'].set_visible(False)\n",
|
|
"ax2.spines['right'].set_visible(False)\n",
|
|
"ax3.spines['right'].set_visible(False)\n",
|
|
"ax4.spines['right'].set_visible(False)\n",
|
|
"ax5.spines['right'].set_visible(False)\n",
|
|
"ax6.spines['right'].set_visible(False)\n",
|
|
"ax7.spines['right'].set_visible(False)\n",
|
|
"ax8.spines['right'].set_visible(False)\n",
|
|
"ax9.spines['right'].set_visible(False)\n",
|
|
"ax10.spines['right'].set_visible(False)\n",
|
|
"\n",
|
|
"# Schriftgrößen für LaTeX-Dokument\n",
|
|
"plt.rcParams.update({\n",
|
|
" \"text.usetex\": True,\n",
|
|
" \"font.family\": \"serif\",\n",
|
|
" 'font.size': 16, # Standardtext\n",
|
|
" 'axes.labelsize': 30, # Achsenbeschriftungen\n",
|
|
" 'xtick.labelsize': 25, # Tick-Beschriftungen\n",
|
|
" 'ytick.labelsize': 25,\n",
|
|
" 'legend.fontsize': 15 # Legende\n",
|
|
"})\n",
|
|
"\n",
|
|
"figure1.tight_layout()\n",
|
|
"figure2.tight_layout()\n",
|
|
"figure3.tight_layout()\n",
|
|
"figure4.tight_layout()\n",
|
|
"if PLOT == True:\n",
|
|
" if COMPLEX == True:\n",
|
|
" figure1.savefig(f'plots/fig_plot_1_wav_complex', dpi=600)\n",
|
|
" figure2.savefig(f'plots/fig_plot_2_wav_complex', dpi=600)\n",
|
|
" figure3.savefig(f'plots/fig_plot_3_wav_complex', dpi=600)\n",
|
|
" figure4.savefig(f'plots/fig_plot_4_wav_complex', dpi=600)\n",
|
|
" else:\n",
|
|
" figure1.savefig(f'plots/fig_plot_1_wav', dpi=600)\n",
|
|
" figure2.savefig(f'plots/fig_plot_2_wav', dpi=600)\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#Plots für SNR Vergleich\n",
|
|
"\n",
|
|
"PLOT = True\n",
|
|
"\n",
|
|
"# Daten aus .csv laden\n",
|
|
"data_male_breathing = np.loadtxt('snr_evaluation/male+breathing', delimiter=\",\")\n",
|
|
"data_male_chewing = np.loadtxt('snr_evaluation/male+chewing', delimiter=\",\")\n",
|
|
"data_male_scratching = np.loadtxt('snr_evaluation/male+scratching', delimiter=\",\")\n",
|
|
"data_male_drinking = np.loadtxt('snr_evaluation/male+drinking', delimiter=\",\")\n",
|
|
"data_male_coughing = np.loadtxt('snr_evaluation/male+coughing', delimiter=\",\")\n",
|
|
"\n",
|
|
"\n",
|
|
"# Daten laden\n",
|
|
"x = data_male_breathing[:, 0]\n",
|
|
"male_breathing = savgol_filter(data_male_breathing[:, 1], 10, 3)\n",
|
|
"male_chewing = savgol_filter(data_male_chewing[:, 1], 10, 3)\n",
|
|
"male_scratching = savgol_filter(data_male_scratching[:, 1], 10, 3)\n",
|
|
"male_drinking = savgol_filter(data_male_drinking[:, 1], 10, 3)\n",
|
|
"male_coughing = savgol_filter(data_male_coughing[:, 1], 10, 3)\n",
|
|
"\n",
|
|
"# Alle Kurven in ein Array stapeln\n",
|
|
"all_curves = np.vstack([\n",
|
|
" male_breathing,\n",
|
|
" male_chewing,\n",
|
|
" male_scratching,\n",
|
|
" male_drinking,\n",
|
|
" male_coughing\n",
|
|
"])\n",
|
|
"\n",
|
|
"# Punktweiser Mittelwert\n",
|
|
"mean_curve = np.mean(all_curves, axis=0)\n",
|
|
"\n",
|
|
"# Plot\n",
|
|
"plt.figure(figsize=(15, 7))\n",
|
|
"plt.plot(x, male_breathing, linestyle='-', linewidth=1.5, alpha=0.7, label='Breathing Noise')\n",
|
|
"plt.plot(x, male_chewing, linestyle='--', linewidth=1.5, alpha=0.7, label='Chewing Noise')\n",
|
|
"plt.plot(x, male_scratching, linestyle='-.', linewidth=1.5, alpha=0.7, label='Scratching Noise')\n",
|
|
"plt.plot(x, male_drinking, linestyle=':', linewidth=1.5, alpha=0.7, label='Drinking Noise')\n",
|
|
"plt.plot(x, male_coughing, linestyle=(0, (3, 1, 1, 1)), linewidth=1.5, alpha=0.7, label='Coughing Noise')\n",
|
|
"plt.plot(x, mean_curve, linestyle='--', color='red', linewidth=2.5, label='Mean SNR-Gain')\n",
|
|
"\n",
|
|
"plt.rcParams.update({\n",
|
|
" \"text.usetex\": True,\n",
|
|
" \"font.family\": \"serif\",\n",
|
|
" 'font.size': 16, # Standardtext\n",
|
|
" 'axes.labelsize': 30, # Achsenbeschriftungen\n",
|
|
" 'xtick.labelsize': 25, # Tick-Beschriftungen\n",
|
|
" 'ytick.labelsize': 25,\n",
|
|
" 'legend.fontsize': 25 # Legende\n",
|
|
"})\n",
|
|
"\n",
|
|
"plt.xlabel(\"Filter length\")\n",
|
|
"plt.ylabel(\"SNR-Gain (dB)\")\n",
|
|
"plt.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"#Spines auf ganzen Plot anwenden\n",
|
|
"plt.gca().spines['top'].set_visible(False)\n",
|
|
"plt.gca().spines['right'].set_visible(False)\n",
|
|
"plt.legend(frameon=False, loc='upper left')\n",
|
|
"plt.tight_layout()\n",
|
|
"if PLOT == True:\n",
|
|
" plt.savefig(f'plots/fig_snr_comparison', dpi=600)\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#Plots der Störsignale\n",
|
|
"\n",
|
|
"PLOT = True\n",
|
|
"\n",
|
|
"fs, data_1 = load_wav(f'./audio_data/Störsignal/breathing.wav')\n",
|
|
"fs, data_2 = load_wav(f'./audio_data/Störsignal/coughing.wav')\n",
|
|
"fs, data_3 = load_wav(f'./audio_data/Störsignal/scratching.wav')\n",
|
|
"fs, data_4 = load_wav(f'./audio_data/Störsignal/drinking.wav')\n",
|
|
"fs, data_5 = load_wav(f'./audio_data/Störsignal/chewing.wav')\n",
|
|
"\n",
|
|
"t = np.linspace(0, len(data_1), len(data_1))/20000\n",
|
|
"\n",
|
|
"figure1, (ax1, ax2, ax3, ax4, ax5) = plt.subplots(5, 1, figsize=(15, 15), sharex=True, sharey=True)\n",
|
|
"ax1.set_ylim(1.0, -1.0)\n",
|
|
"ax1.plot(t, data_1, c='darkorange', label='Breathing Noise')\n",
|
|
"ax2.plot(t, data_2, c='indianred', label='Coughing Noise')\n",
|
|
"ax3.plot(t, data_3, c='deepskyblue', label='Scratching Noise')\n",
|
|
"ax4.plot(t, data_4, c='forestgreen', label='Drinking Noise')\n",
|
|
"ax5.plot(t, data_5, c='darkorchid', label='Chewing Noise')\n",
|
|
"\n",
|
|
"ax1.text(0.5, -0.3, '(a) Breathing Noise',\n",
|
|
" transform=ax1.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax2.text(0.5, -0.3, '(b) Coughing Noise',\n",
|
|
" transform=ax2.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax3.text(0.5, -0.3, '(c) Scratching Noise',\n",
|
|
" transform=ax3.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax4.text(0.5, -0.3, '(d) Drinking Noise',\n",
|
|
" transform=ax4.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax5.text(0.5, -0.5, '(e) Chewing Noise',\n",
|
|
" transform=ax5.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax5.set_xlabel(\"time (s)\", x=0.05)\n",
|
|
"ax1.set_ylabel(\"Amplitude\")\n",
|
|
"ax2.set_ylabel(\"Amplitude\")\n",
|
|
"ax3.set_ylabel(\"Amplitude\")\n",
|
|
"ax4.set_ylabel(\"Amplitude\")\n",
|
|
"ax5.set_ylabel(\"Amplitude\")\n",
|
|
"#ax5.xaxis.set_label_coords(0.5, -0.4)\n",
|
|
"\n",
|
|
"ax1.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax2.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax3.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax4.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax5.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"\n",
|
|
"#Spines direkt auf Subplots anwenden\n",
|
|
"ax1.spines['top'].set_visible(False)\n",
|
|
"ax2.spines['top'].set_visible(False)\n",
|
|
"ax3.spines['top'].set_visible(False)\n",
|
|
"ax4.spines['top'].set_visible(False)\n",
|
|
"ax5.spines['top'].set_visible(False)\n",
|
|
"ax1.spines['right'].set_visible(False)\n",
|
|
"ax2.spines['right'].set_visible(False)\n",
|
|
"ax3.spines['right'].set_visible(False)\n",
|
|
"ax4.spines['right'].set_visible(False)\n",
|
|
"ax5.spines['right'].set_visible(False)\n",
|
|
"\n",
|
|
"# Schriftgrößen für LaTeX-Dokument\n",
|
|
"plt.rcParams.update({\n",
|
|
" \"text.usetex\": True,\n",
|
|
" \"font.family\": \"serif\",\n",
|
|
" 'font.size': 16, # Standardtext\n",
|
|
" 'axes.labelsize': 30, # Achsenbeschriftungen\n",
|
|
" 'xtick.labelsize': 25, # Tick-Beschriftungen\n",
|
|
" 'ytick.labelsize': 25,\n",
|
|
" 'legend.fontsize': 15 # Legende\n",
|
|
"})\n",
|
|
"\n",
|
|
"figure1.tight_layout()\n",
|
|
"if PLOT == True:\n",
|
|
" plt.savefig(f'plots/fig_noise_signals', dpi=600)\n",
|
|
"figure1.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Filterlänge und Update-Schritte Vergleich\n",
|
|
"\n",
|
|
"import numpy as np\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"\n",
|
|
"PLOT = True\n",
|
|
"\n",
|
|
"# Filterlänge\n",
|
|
"N = np.arange(1, 128)\n",
|
|
"# Verschiedene Updateschritte\n",
|
|
"U_values = [1, 0.5, 0.25]\n",
|
|
"\n",
|
|
"C_total_1 = N + (6*N + 8)*U_values[0] + 34\n",
|
|
"C_total_2 = N + (6*N + 8)*U_values[1] + 34\n",
|
|
"C_total_3 = N + (6*N + 8)*U_values[2] + 34\n",
|
|
"\n",
|
|
"plt.figure(figsize=(15, 7))\n",
|
|
"plt.plot(N, C_total_1, linestyle='-', linewidth=1.5, alpha=0.7, label=f'1/U = {U_values[0]}')\n",
|
|
"plt.plot(N, C_total_2, linestyle='--', linewidth=1.5, alpha=0.7, label=f'1/U = {U_values[1]}')\n",
|
|
"plt.plot(N, C_total_3, linestyle='-.', linewidth=1.5, alpha=0.7, label=f'1/U = {U_values[2]}')\n",
|
|
"\n",
|
|
"plt.rcParams.update({\n",
|
|
" \"text.usetex\": True,\n",
|
|
" \"font.family\": \"serif\",\n",
|
|
" 'font.size': 16, # Standardtext\n",
|
|
" 'axes.labelsize': 30, # Achsenbeschriftungen\n",
|
|
" 'xtick.labelsize': 25, # Tick-Beschriftungen\n",
|
|
" 'ytick.labelsize': 25,\n",
|
|
" 'legend.fontsize': 25 # Legende\n",
|
|
"})\n",
|
|
"\n",
|
|
"plt.xlabel(\"Filter length\")\n",
|
|
"plt.ylabel(\"Cycles/Sample\")\n",
|
|
"plt.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"#Spines auf ganzen Plot anwenden\n",
|
|
"plt.gca().spines['top'].set_visible(False)\n",
|
|
"plt.gca().spines['right'].set_visible(False)\n",
|
|
"plt.legend(frameon=False, loc='lower right')\n",
|
|
"plt.tight_layout()\n",
|
|
"if PLOT == True:\n",
|
|
" plt.savefig(f'plots/fig_c_total', dpi=600)\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Vergleich Output High/Low-Level\n",
|
|
"\n",
|
|
"PLOT = False\n",
|
|
"COMPLEX = False\n",
|
|
"\n",
|
|
"if COMPLEX == True:\n",
|
|
" python_output = np.loadtxt('filter_output/complex_python_output.txt', delimiter=\",\")/(2**(15)-1)\n",
|
|
" dsp_output = np.loadtxt('filter_output/complex_dsp_output.txt', delimiter=\",\")[:-1]/(2**(15)-1)\n",
|
|
"else:\n",
|
|
" python_output = np.loadtxt('filter_output/simple_python_output.txt', delimiter=\",\")/(2**(15)-1)\n",
|
|
" dsp_output = np.loadtxt('filter_output/simple_dsp_output.txt', delimiter=\",\")[:-1]/(2**(15)-1)\n",
|
|
"\n",
|
|
"from scipy.stats import pearsonr\n",
|
|
"from scipy import signal\n",
|
|
"\n",
|
|
"# 1. Mean Squared Error (MSE)\n",
|
|
"mse = np.mean((python_output - dsp_output) ** 2)\n",
|
|
"# 2. Root Mean Squared Error (RMSE)\n",
|
|
"rmse = np.sqrt(mse)\n",
|
|
"# 3. Mean Absolute Error (MAE)\n",
|
|
"mae = np.mean(np.abs(python_output - dsp_output))\n",
|
|
"# 4. Pearson Correlation Coefficient (Lineare Korrelation)\n",
|
|
"correlation, p_value = pearsonr(python_output, dsp_output)\n",
|
|
"# 5. Normalized Mean Squared Error (NMSE) - normalisiert durch Varianz des Referenzsignals\n",
|
|
"nmse = np.sum((python_output - dsp_output) ** 2) / np.sum(dsp_output ** 2)\n",
|
|
"\n",
|
|
"diff = python_output - dsp_output\n",
|
|
"if COMPLEX == True:\n",
|
|
" t = np.linspace(0, 200000, 200000)/20000\n",
|
|
"else:\n",
|
|
" t = np.linspace(0, 2000, 2000)/200\n",
|
|
"\n",
|
|
"figure1, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(15, 9), sharex=True, sharey=True)\n",
|
|
"ax1.set_ylim(1.0, -1.0)\n",
|
|
"ax1.plot(t, python_output, linestyle='-', c='deepskyblue', linewidth=1, alpha=1, label='High Level Simulation')\n",
|
|
"ax2.plot(t, dsp_output, linestyle='-', c='indianred', linewidth=1, alpha=1, label='Low Level Simulation')\n",
|
|
"ax3.plot(t, python_output, linestyle='-', c='deepskyblue', linewidth=1, alpha=1, label='High Level Simulation')\n",
|
|
"ax3.plot(t, dsp_output, linestyle='-', c='indianred', linewidth=1, alpha=0.7, label=f'Low Level Simulation (Mean squared error: {mse:.3f})')\n",
|
|
"ax3.plot(t, diff, linestyle='-', c='green', linewidth=1, alpha=0.7, label=f'Difference')\n",
|
|
"\n",
|
|
"plt.rcParams.update({\n",
|
|
" \"text.usetex\": True,\n",
|
|
" \"font.family\": \"serif\",\n",
|
|
" 'font.size': 16, # Standardtext\n",
|
|
" 'axes.labelsize': 30, # Achsenbeschriftungen\n",
|
|
" 'xtick.labelsize': 25, # Tick-Beschriftungen\n",
|
|
" 'ytick.labelsize': 25,\n",
|
|
" 'legend.fontsize': 25 # Legende\n",
|
|
"})\n",
|
|
"\n",
|
|
"ax1.text(0.5, -0.3, '(a) High Level Simulation',\n",
|
|
" transform=ax1.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax2.text(0.5, -0.3, '(b) Low Level Simulation',\n",
|
|
" transform=ax2.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax3.text(0.5, -0.5, f'(c) Comparision High/Low Level Simulation (Mean squared error: {mse:.3f})',\n",
|
|
" transform=ax3.transAxes,\n",
|
|
" fontsize=25,\n",
|
|
" fontweight='normal',\n",
|
|
" ha='center',\n",
|
|
" va='bottom')\n",
|
|
"\n",
|
|
"ax3.set_xlabel(\"time (s)\", x=0.05)\n",
|
|
"ax1.set_ylabel(\"Amplitude\")\n",
|
|
"ax2.set_ylabel(\"Amplitude\")\n",
|
|
"ax3.set_ylabel(\"Amplitude\")\n",
|
|
"\n",
|
|
"ax1.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax2.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"ax3.grid(True, linestyle='--', alpha=0.4)\n",
|
|
"\n",
|
|
"#Spines direkt auf Subplots anwenden\n",
|
|
"ax1.spines['top'].set_visible(False)\n",
|
|
"ax2.spines['top'].set_visible(False)\n",
|
|
"ax3.spines['top'].set_visible(False)\n",
|
|
"ax1.spines['right'].set_visible(False)\n",
|
|
"ax2.spines['right'].set_visible(False)\n",
|
|
"ax3.spines['right'].set_visible(False)\n",
|
|
"\n",
|
|
"\n",
|
|
"figure1.tight_layout()\n",
|
|
"if PLOT == True:\n",
|
|
" plt.savefig(f'plots/fig_high_low_comparison', dpi=600)\n",
|
|
"figure1.show()\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 59,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 1500x700 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Reduced Update Plot\n",
|
|
"\n",
|
|
"import matplotlib.ticker as mtick\n",
|
|
"from scipy.interpolate import make_interp_spline\n",
|
|
"\n",
|
|
"PLOT = True\n",
|
|
"\n",
|
|
"# Daten aus .csv laden\n",
|
|
"data_reduced_update = np.loadtxt('snr_evaluation/reduced_update', delimiter=\",\")\n",
|
|
"\n",
|
|
"# Daten laden\n",
|
|
"x = data_reduced_update[:, 0]\n",
|
|
"reduced_gain = data_reduced_update[:, 2]\n",
|
|
"reduced_cycles = data_reduced_update[:, 4]\n",
|
|
"reduced_computing = data_reduced_update[:, 5]\n",
|
|
"\n",
|
|
"# Sortieren\n",
|
|
"idx = np.argsort(x)\n",
|
|
"x = x[idx]\n",
|
|
"reduced_gain = reduced_gain[idx]\n",
|
|
"reduced_cycles = reduced_cycles[idx]\n",
|
|
"reduced_computing = reduced_computing[idx]\n",
|
|
"\n",
|
|
"# Smoothing\n",
|
|
"x_smooth = np.linspace(x.min(), x.max(), 300)\n",
|
|
"\n",
|
|
"gain_smooth = make_interp_spline(x, reduced_gain)(x_smooth)\n",
|
|
"cycles_smooth = make_interp_spline(x, reduced_cycles)(x_smooth)\n",
|
|
"comp_smooth = make_interp_spline(x, reduced_computing)(x_smooth)\n",
|
|
"\n",
|
|
"diff_smooth = np.abs(gain_smooth - cycles_smooth)\n",
|
|
"idx_max = np.argmax(diff_smooth)\n",
|
|
"x_max = x_smooth[idx_max]\n",
|
|
"y1_max = gain_smooth[idx_max]\n",
|
|
"y2_max = cycles_smooth[idx_max]\n",
|
|
"\n",
|
|
"# Plot\n",
|
|
"plt.figure(figsize=(15, 7))\n",
|
|
"plt.plot(x_smooth, gain_smooth, linestyle='--', color='indianred', linewidth=2, alpha=0.9, label='SNR-Gain')\n",
|
|
"plt.plot(x_smooth, cycles_smooth, linestyle='-.', color='skyblue', linewidth=2, alpha=0.9, label='Cycles/Sample')\n",
|
|
"plt.plot(x_smooth, comp_smooth, linestyle=':', color='forestgreen', linewidth=2, alpha=0.9, label='DSP Computing')\n",
|
|
"plt.plot([x_max, x_max], [y1_max, y2_max], color='black', linestyle=':', linewidth=2)\n",
|
|
"\n",
|
|
"plt.scatter(x, reduced_gain, color='indianred', s=40)\n",
|
|
"plt.scatter(x, reduced_cycles, color='skyblue', s=40)\n",
|
|
"plt.scatter(x, reduced_computing, color='forestgreen', s=40)\n",
|
|
"\n",
|
|
"plt.text(x_max, (y1_max + y2_max)/2+0.1,\n",
|
|
" f'Maximum Offset at {x_max:.2f}',\n",
|
|
" fontsize=20,\n",
|
|
" ha='left')\n",
|
|
"\n",
|
|
"plt.rcParams.update({\n",
|
|
" \"text.usetex\": True,\n",
|
|
" \"font.family\": \"serif\",\n",
|
|
" 'font.size': 16, # Standardtext\n",
|
|
" 'axes.labelsize': 30, # Achsenbeschriftungen\n",
|
|
" 'xtick.labelsize': 25, # Tick-Beschriftungen\n",
|
|
" 'ytick.labelsize': 25,\n",
|
|
" 'legend.fontsize': 25 # Legende\n",
|
|
"})\n",
|
|
"\n",
|
|
"\n",
|
|
"plt.xlabel(\"Update Rate\")\n",
|
|
"plt.ylabel(\"Relative Performance\")\n",
|
|
"plt.grid(True, linestyle='-.', alpha=0.4)\n",
|
|
"#Spines auf ganzen Plot anwenden\n",
|
|
"plt.gca().yaxis.set_major_formatter(mtick.PercentFormatter(1.0))\n",
|
|
"plt.gca().spines['top'].set_visible(False)\n",
|
|
"plt.gca().spines['right'].set_visible(False)\n",
|
|
"plt.gca().invert_xaxis()\n",
|
|
"plt.legend(frameon=False, loc='upper right')\n",
|
|
"plt.tight_layout()\n",
|
|
"if PLOT == True:\n",
|
|
" plt.savefig(f'plots/fig_snr_reduced_update', dpi=600)\n",
|
|
"plt.show()\n"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": ".venv",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.9.13"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|