Rowan-Classes/6th-Semester-Spring-2024/DSP/Quizzes/FinalExam/circular_convolve.py
2024-05-04 14:19:03 -04:00

39 lines
1002 B
Python

import numpy as np
import scipy.signal
def shifter(matrix):
last = matrix[len(matrix)-1]
x = len(matrix)
result = [0] * x
for i in range(1,len(matrix)):
result[i] = matrix[i-1]
result[0] = last
return result
def circular_convolve(x,h,n,m):
primary_matrix = np.zeros((max(n,m),max(n,m)))
for i in range(0,len(primary_matrix[0])):
primary_matrix[0][i] = x[i]
for i in range(1,max(n,m)):
primary_matrix[i] = shifter(primary_matrix[i-1])
ultimate_matrix = np.transpose(primary_matrix)
difference_in_length = abs(n-m)
for i in range(m,m+difference_in_length):
h.append(0)
resultant = np.dot(ultimate_matrix,h)
return resultant
X = np.ones(10)
X[0] += 2
H = np.zeros(10)
H[0] += 1
y = np.fft.ifft(H*X)
print(np.sum(y))
#lin_conv = scipy.signal.fftconvolve(x,h,"full")
#circ_conv = circular_convolve(x, h, len(x), len(x))
#
#print(f"Linear convolution: {lin_conv}")
#print(f"Circular convolution: {circ_conv}")