傅立叶变换详解:从周期信号到三角分解

需积分: 33 28 下载量 71 浏览量 更新于2024-07-20 1 收藏 1.07MB PDF 举报
"傅立叶详细推导_看了绝对懂.pdf" 傅立叶分析是一种将复杂信号分解为简单周期成分的方法,广泛应用于信号处理、通信、图像处理和许多其他工程领域。这一理论的核心在于,任何周期性的或在某种意义上可视为周期的连续信号,都可以表示为无穷多个正弦和余弦函数的和,这就是傅立叶级数。 在描述傅立叶变换时,我们首先要理解周期性和非周期性信号的概念。周期信号是指在一段时间内重复出现的信号,比如正弦波或方波,它们具有固定的周期T,频率则由f = 1/T定义。非周期信号看似不重复,但实际上也可以看作是具有极长周期的周期信号,只是这个周期可能远超人类能观测到的时间尺度。 傅立叶分解的原理是,任何一个连续周期信号x(t)可以用一组无限级数表示,具体形式如下: \[ x(t) = \sum\limits_{i=-\infty}^{\infty} c_i e^{j 2\pi f_i t} \] 其中,\( c_i \) 是复系数,\( f_i \) 是谐波频率,\( j \) 是虚数单位。当信号为实数时,\( c_i \) 对应的复共轭项会出现在级数的对称位置。 对于三角分解,也就是傅立叶级数,我们将信号表示为直流分量加上一系列正弦和余弦函数的和: \[ x(t) = a_0 + \sum\limits_{n=1}^{\infty} [a_n \cos(2\pi f_n t) + b_n \sin(2\pi f_n t)] \] 这里,\( a_0 \) 是直流分量,\( a_n \) 和 \( b_n \) 是对应于频率 \( f_n = n f_1 \) 的谐波的幅度,\( f_1 \) 是信号的基本频率,n 是谐波的阶数。\( a_n \) 和 \( b_n \) 可以通过计算傅立叶系数得到,这通常涉及到对信号的积分。 2.1.1 三角分解的实例中,信号被分解为不同频率的正弦和余弦函数的叠加,每个频率成分对应于信号周期的一个谐波。例如,第一阶谐波(\( n=1 \))的频率与信号的基波频率相同,即 \( f_1 = f_T \),而更高阶的谐波则为 \( f_T \) 的整数倍。 傅立叶变换进一步扩展了这一概念,允许处理非周期信号或者在有限时间区间内的信号。对于非周期信号,傅立叶变换将信号从时域转换到频域,这样可以分析信号包含的各个频率成分及其强度。 总结来说,傅立叶变换是数学工具,它提供了一种将复杂信号分解为基本频率成分的方法,这对于理解和处理各种工程和物理问题至关重要。无论是周期信号还是非周期信号,通过傅立叶变换,我们都能洞察信号的本质,提取其内在的频率特征。

def add_noise(image, epsilon, k): # 添加拉普拉斯噪声 # 进行离散傅里叶变换 f = np.fft.fft2(image) # 将零频率分量移到频谱中心 fshift = np.fft.fftshift(f) rows, cols = image.shape b = laplas(fshift, epsilon, k) # print(b) p = 0.5 noise = np.random.laplace(scale=b, size=(rows, cols)) + np.mean(f) * p # noise = np.random.laplace(0, 1/b, (rows, cols)) image_noise = fshift + noise f_ishift = np.fft.ifftshift(image_noise) # 进行逆离散傅里叶变换 image_back = np.fft.ifft2(f_ishift) image_back = np.real(image_back) return image_back def laplas(FIM, epsilon, k): FIM_k = FIM[:k, :k] # 给定隐私预算 epsilon # 计算给定隐私预算时的拉普拉斯机制的参数的最小值 # 计算每个系数的灵敏度 sensitivity = np.abs(FIM_k) / np.sqrt(epsilon) sensitivity2 = np.abs(FIM) / np.sqrt(epsilon) scale = sensitivity2 / epsilon # 计算拉普拉斯机制的参数 # 计算前 k×k 个 DFT 系数的最大值和最小值之差 delta_f = np.max(np.sqrt(np.real(FIM[:k, :k]) ** 2 + np.imag(FIM[:k, :k]) ** 2)) - np.min( np.sqrt(np.real(FIM[:k, :k]) ** 2 + np.imag(FIM[:k, :k]) ** 2)) # 计算拉普拉斯噪声的尺度参数 c = delta_f / epsilon d = delta_f * math.sqrt(2 * math.log(1.25 / 0.1)) / epsilon # a = np.min(sensitivity) / (epsilon * k**2) return d def add_noisy_image(): # 读取人脸图像 image = cv2.imread("image.jpg", cv2.IMREAD_GRAYSCALE) image = cv2.resize(image, (128, 128), interpolation=cv2.INTER_LINEAR) # 进行离散傅里叶变换 epsilon = 0.3 k = 50 image_back = add_noise(image, epsilon, k) im = cv2.resize(image_back, (47, 62), interpolation=cv2.INTER_LINEAR) # 将图像转换为整型并保存 image_back = np.uint8(im) cv2.imwrite("face_privacy.jpg", image_back) return image_back

2023-06-06 上传