拓冰建站拓冰建站
首页 / 资讯中心 / 正文

利用Pycharm实现维纳滤波、巴特沃斯滤波

一、设计指标三角正余弦信号x(t)sin(1.5πt(1-t)2.1)0.1sin(2.5πt1)0.18cos(7.6πt)1、基于Python编程实现上述三角函数信号并利用随机函数为该信号添加噪声。2、采用Python库中的维纳滤波器和巴特沃斯滤波器对1中的信号进行去噪分别绘制出去噪前和去噪后信号的散点图和曲线。对于巴特沃斯滤波器分析不同阶数、截止频率条件下去噪后的信号波形。二、内容与步骤1.利用Pycharm编程编写实现三角函数正余弦信号的Python语句利用Python库中的random函数给三角正余弦信号加入随机噪声2.可不用定义直接利用Python库中的维纳滤波函数对已加入随机噪声的三角正余弦信号进行滤波3.编写实现巴特沃斯滤波的Python语句需要自己定义巴特沃斯滤波的各个参数如阶数、截止频率用自定义的巴特沃斯滤波函数对加入随机噪点的三角正余弦信号进行滤波4.编写绘图函数分别绘制噪声信号三角正余弦信号经维纳滤波后的信号经不同阶数、截止频率的巴特沃斯滤波后的信号。三、源程序每一句代码我都做了详细注释就不逐句解释了import numpy as np # 导入numpy模块 import matplotlib.pyplot as plt # 导入matplotlib.pyplot模块 import scipy.signal as ss # 导入scipy.signal模块 from scipy.signal import butter, lfilter # 从scipy.signal模块中直接导入butter和lfilter函数 # 创建一个等差数列一维数组作为横坐标 t np.linspace(-1, 1, 201) # 原始信号 clean_signal (np.sin(1.5 * np.pi * t * (1 - t) 2.1) 0.1 * np.sin(2.5 * np.pi * t 1) 0.18 * np.cos(7.6 * np.pi * t)) # 随机数生成器的种子确保随机过程的可重复性。 np.random.seed(42) # 原始信号添加噪声 noise np.random.rand(len(t)) noisy_signal clean_signal noise # 维纳滤波 wiener_filtered_signal ss.wiener(noisy_signal, 9) # 巴特沃斯滤波 def apply_butterworth_filter(signal, cutoff, fs, order): nyq 0.5 * fs # 将采样频率(fs)转换为奈奎斯特频率(nyq)的计算 normal_cutoff cutoff / nyq b, a butter(order, normal_cutoff, analogFalse) filtered_signal lfilter(b, a, signal) return filtered_signal fs 1000 # 采样频率 # 第一种滤波器阶数和截止频率 cutoff_freq1 50 # 截止频率 order1 6 # 滤波器阶数 # 第二种滤波器阶数和截止频率 cutoff_freq2 50 # 截止频率 order2 4 # 滤波器阶数 # 第三种滤波器阶数和截止频率 cutoff_freq3 25 # 截止频率 order3 6 # 滤波器阶数 # 应用巴特沃斯滤波器 butter_filtered_signal1 apply_butterworth_filter(noisy_signal, cutoff_freq1, fs, order1) butter_filtered_signal2 apply_butterworth_filter(noisy_signal, cutoff_freq2, fs, order2) butter_filtered_signal3 apply_butterworth_filter(noisy_signal, cutoff_freq3, fs, order3) # 在一个图形窗口中创建六个子图布局并激活第一个子图以便开始在其上绘制 plt.subplot(3, 2, 1) # 绘制原始信号图像 plt.plot(t, clean_signal, labelClean Signal, colorblue) # 绘制噪声散点图像 plt.scatter(t, noisy_signal, marker., labelNoisy Signal, colorred) plt.legend() # 显示图例 # 在一个图形窗口中创建六个子图布局并激活第二个子图以便开始在其上绘制 plt.subplot(3, 2, 2) # 绘制去噪声后的图像 plt.plot(t, wiener_filtered_signal, labelWiener Filtered Signal, colorgreen) plt.legend() # 显示图例 # 在一个图形窗口中创建六个子图布局并激活第三个子图以便开始在其上绘制 plt.subplot(3, 2, 3) # 绘制去噪声后的图像 plt.plot(t, butter_filtered_signal1, labelButter Filtered Signal 1, colorgreen) plt.legend() # 显示图例 # 在一个图形窗口中创建六个子图布局并激活第四个子图以便开始在其上绘制 plt.subplot(3, 2, 4) # 绘制去噪声后的图像 plt.plot(t, butter_filtered_signal2, labelButter Filtered Signal 2, colorgreen) plt.legend() # 显示图例 # 在一个图形窗口中创建六个子图布局并激活第五个子图以便开始在其上绘制 plt.subplot(3, 2, 5) # 绘制去噪声后的图像 plt.plot(t, butter_filtered_signal3, labelButter Filtered Signal 3, colorgreen) plt.legend() # 显示图例 plt.show() # 显示图表四、结果下图为利用在线工具对三角正余弦信号拟和的图像下图为利用维纳滤波对加入噪声的三角正余弦信号进行滤波前后的图像对比对比绘制的图像和Python编程语句实现的图像得出编程实现三角正余弦信号的语句无误。下图为利用巴特沃斯滤波对加入噪声的三角正余弦信号进行滤波前后的图像对比下图为加入噪声的三角正余弦信号及进行维纳滤波和不同阶数、截止频率巴特沃斯滤波的图像五、分析通过对比Butter Filtered Signal 1和Butter Filtered Signal 2可以得到滤波器阶数order越高滤波器的选择性更好能够更精确地分离想要保留的频率成分和不想要的频率成分。另外虽然巴特沃斯滤波器在设计时尽量保持相位线性但随着阶数的增加相位失真可能也会增大尤其是在较高阶数时。通过对比Butter Filtered Signal 1和Butter Filtered Signal 3可以得到截止频率cutoff_freq决定了信号中哪些频率成分被滤除或保留。对于低通滤波器低于截止频率的信号成分被保留而高于此频率的成分被衰减。选择不当的截止频率可能会影响到信号的主要频率成分导致信号失真。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门