学习使用python的矩阵乘法函数np.dot,按照定义,编程实现圆周卷积函数circonv(x1,x2,11),求出序列x1=和x2=[2,5,4,3]的线性卷积和L点圆周卷积,并分别绘图
时间: 2023-06-09 10:04:23 浏览: 110
好的,我会尽力回答您的问题。
首先,让我们来了解一下矩阵乘法函数np.dot的用法。np.dot可以用于计算两个numpy数组的点积(内积),其结果是一个标量、向量、矩阵,具体情况取决于两个数组的维度。下面是一个示例:
```
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[7], [8], [9]])
result = np.dot(a, b)
print(result)
```
这段代码将输出一个2x1的数组:
```
[[ 50]
[122]]
```
现在让我们来编写圆周卷积函数circonv(x1,x2,11)。
根据定义,线性卷积和L点圆周卷积可以通过以下公式计算:
```
L = len(x1)
y1 = np.fft.fft(x1, n=2*L-1)
y2 = np.fft.fft(x2, n=2*L-1)
result = np.real(np.fft.ifft(y1*y2))
```
其中,np.fft.fft和np.fft.ifft是用于计算傅里叶变换和傅里叶逆变换的函数。
圆周卷积可以通过将线性卷积的结果封装到一个长度为L的循环数组中来获得,具体实现如下:
```
L = len(x1)
y1 = np.fft.fft(x1, n=2*L-1)
y2 = np.fft.fft(x2, n=2*L-1)
y3 = y1 * y2
result = np.real(np.fft.ifft(np.roll(y3, L-1)))
```
其中,np.roll函数用于将数组轮转给定数量的元素。这里是将y3轮转了L-1个元素。
接下来,让我们来绘制线性卷积和圆周卷积的图形。我们可以使用matplotlib库来绘制图形。
```
import matplotlib.pyplot as plt
# 绘制x1和x2的图形
plt.subplot(2,2,1)
plt.stem(x1)
plt.title('x1')
plt.subplot(2,2,2)
plt.stem(x2)
plt.title('x2')
# 绘制线性卷积的图形
L = len(x1)
y1 = np.convolve(x1, x2)
plt.subplot(2,2,3)
plt.stem(y1)
plt.title('Linear Convolution')
# 绘制圆周卷积的图形
y2 = circonv(x1, x2, 11)
plt.subplot(2,2,4)
plt.stem(y2)
plt.title('Circular Convolution')
plt.show()
```
这段代码将生成一个图形窗口,其中包含四幅子图:
1. x1的图形
2. x2的图形
3. 线性卷积的图形
4. 圆周卷积的图形
我希望这个回答能够帮助到您!
阅读全文