123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- import numpy as np
- from scipy import signal, fft, linalg
- from typing import Tuple, List
- class AntiJammingSignalAlgo:
- @staticmethod
- def time_frequency_filter(rx_signal, sample_rate):
- """时频域联合滤波算法"""
- # 输入信号维度检查
- if rx_signal.size == 0:
- return np.zeros_like(rx_signal)
-
- # 确保信号为1维数组
- rx_signal = np.atleast_1d(rx_signal).ravel()
-
- spectrum = np.fft.fft(rx_signal)
- filtered_spectrum = spectrum * np.hamming(len(spectrum))
- return np.fft.ifft(filtered_spectrum).real
- @staticmethod
- def adaptive_filter(rx_signal, reference_signal):
- """自适应滤波算法"""
- # 实现基于LMS的自适应滤波
- lms_step = 0.01
- weights = np.zeros(10)
- for i in range(len(rx_signal)-10):
- x = rx_signal[i:i+10]
- error = reference_signal[i] - np.dot(weights, x)
- weights += lms_step * error * x
- return np.convolve(weights, rx_signal, mode='valid')
- @staticmethod
- def polarization_filter(rx_signal, sample_rate, polarization_params):
- """极化滤波算法"""
- # 应用极化参数
- angle_rad = np.deg2rad(polarization_params['angle'])
- ellipticity = polarization_params['ellipticity']
-
- # 构建极化滤波矩阵
- filter_matrix = np.array([
- [np.cos(angle_rad), -ellipticity * np.sin(angle_rad)],
- [np.sin(angle_rad), ellipticity * np.cos(angle_rad)]
- ])
-
- # 应用极化滤波
- polarized_signal = filter_matrix @ rx_signal.reshape(2, -1)
- return polarized_signal[0].real
|