Professional Documents
Culture Documents
Kalman
Kalman
Py
1
filtered_states = np.zeros((num_steps, 2))
for k in range(num_steps):
# Prediction step
x_hat_minus = A @ x_hat
P_minus = A @ P @ A.T + Q
# Update step
K = P_minus @ H.T @ np.linalg.inv(H @ P_minus @ H.T + R)
x_hat = x_hat_minus + K @ (noisy_signal[k] - H @ x_hat_minus)
P = (np.eye(2) - K @ H) @ P_minus
2
plt.plot(frequencies, 10 * np.log10(psd_filtered), label="Filtered Signal")
plt.legend()
plt.tight_layout()
plt.show()
3
import numpy as np
import matplotlib.pyplot as plt
import soundfile as sf
# Calculate the error between the input audio and the filtered signal
error = audio_signal - filtered_audio
# Plotting
plt.figure(figsize=(12, 10))
plt.subplot(5, 1, 1)
plt.plot(audio_signal, label='Original Audio Signal')
plt.title('Original Audio Signal')
plt.xlabel('Sample')
plt.ylabel('Amplitude')
plt.legend()
plt.subplot(5, 1, 2)
plt.plot(noisy_audio_signal, label='Noisy Audio Signal', alpha=0.7)
plt.title('Noisy Audio Signal')
plt.xlabel('Sample')
plt.ylabel('Amplitude')
plt.legend()
plt.subplot(5, 1, 3)
plt.plot(filtered_audio, label='Filtered Audio Signal (NLMS)',
linestyle='dashed')
plt.title('Filtered Audio Signal (NLMS)')
plt.xlabel('Sample')
plt.ylabel('Amplitude')
plt.legend()
plt.subplot(5, 1, 4)
plt.plot(error, label='Error', color='red')
plt.title('Error Between Original and Filtered Signals')
plt.xlabel('Sample')
plt.ylabel('Amplitude')
plt.legend()
plt.subplot(5, 1, 5)
plt.plot(mse_values, label='Time Domain MSE', color='green')
plt.title('Time Domain MSE')
plt.xlabel('Sample')
plt.ylabel('MSE')
plt.legend()
plt.tight_layout()
plt.show()
import numpy as np
import matplotlib.pyplot as plt
import soundfile as sf
from scipy.signal import welch
for i in range(len(noisy_audio_signal)):
start_idx = max(0, i - wiener_window_size // 2)
end_idx = min(len(noisy_audio_signal), i + wiener_window_size // 2
+ 1)
frame = noisy_audio_signal[start_idx:end_idx]
# Wiener filter
power_signal = np.mean(np.abs(frame) ** 2)
power_noise = np.mean(np.abs(noise[start_idx:end_idx]) ** 2)
wiener_factor = power_signal / (power_signal + power_noise)
plt.tight_layout()
plt.show()
<IPython.lib.display.Audio object>
<IPython.lib.display.Audio object>
<IPython.lib.display.Audio object>
import numpy as np
import matplotlib.pyplot as plt
import soundfile as sf
from IPython.display import Audio
# Plotting
plt.figure(figsize=(12, 15))
plt.subplot(5, 1, 1)
plt.plot(audio_signal, label='Original Audio Signal')
plt.title('Original Audio Signal')
plt.xlabel('Sample')
plt.ylabel('Amplitude')
plt.legend()
plt.subplot(5, 1, 2)
plt.plot(noisy_audio_signal, label='Noisy Audio Signal', alpha=0.7)
plt.title('Noisy Audio Signal')
plt.xlabel('Sample')
plt.ylabel('Amplitude')
plt.legend()
plt.subplot(5, 1, 3)
plt.plot(filtered_audio, label='Filtered Audio Signal (LMS)',
linestyle='dashed')
plt.title('Filtered Audio Signal (LMS)')
plt.xlabel('Sample')
plt.ylabel('Amplitude')
plt.legend()
plt.subplot(5, 1, 4)
plt.plot(audio_signal - filtered_audio, label='Error', color='red')
plt.title('Error Between Original and Filtered Signals')
plt.xlabel('Sample')
plt.ylabel('Amplitude')
plt.legend()
plt.subplot(5, 1, 5)
plt.plot(mse_values, label='Time Domain MSE', color='green')
plt.title('Time Domain MSE')
plt.xlabel('Sample')
plt.ylabel('MSE')
plt.legend()
plt.tight_layout()
plt.show()