sinc卷积代码
时间: 2023-07-02 14:08:22 浏览: 120
以下是一个简单的 Sinc 卷积的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
def sinc(x):
return np.where(x == 0, 1, np.sin(x) / x)
def sinc_kernel(cutoff, kernel_size):
h = np.zeros(kernel_size)
midpoint = kernel_size // 2
for i in range(kernel_size):
if i == midpoint:
h[i] = 2 * np.pi * cutoff
else:
h[i] = np.sin(2 * np.pi * cutoff * (i - midpoint)) / (i - midpoint)
return h / np.sum(h)
def convolve(signal, kernel):
kernel_size = len(kernel)
padded_signal = np.pad(signal, (kernel_size - 1, kernel_size - 1), mode='constant')
output_size = len(signal) + kernel_size - 1
output = np.zeros(output_size)
for i in range(output_size):
output[i] = np.sum(padded_signal[i:i+kernel_size] * kernel)
return output
# Generate a test signal
x = np.linspace(-10, 10, 1000)
signal = np.sin(x)
# Generate a Sinc kernel with a cutoff frequency of 0.1
kernel_size = 101
cutoff = 0.1
kernel = sinc_kernel(cutoff, kernel_size)
# Convolve the signal with the kernel
convolved_signal = convolve(signal, kernel)
# Plot the original signal and the convolved signal
plt.plot(x, signal, label='Original Signal')
plt.plot(x, convolved_signal, label='Convolved Signal')
plt.legend()
plt.show()
```
在这个示例代码中,我们定义了三个函数:
- `sinc(x)`:一个 Sinc 函数的实现。
- `sinc_kernel(cutoff, kernel_size)`:用于生成一个 Sinc 卷积核的函数。输入参数 `cutoff` 表示截止频率, `kernel_size` 表示卷积核的大小。
- `convolve(signal, kernel)`:用于对信号进行卷积的函数。输入参数 `signal` 表示输入信号, `kernel` 表示卷积核。
利用这三个函数,我们可以生成一个测试信号,并且对其进行 Sinc 卷积。在这个示例中,我们使用了一个正弦函数作为测试信号,并且将截止频率设置为 0.1。最后,我们将原始信号和卷积后的信号绘制在同一张图上,以便进行比较。
阅读全文
相关推荐














