设采样频率fs = 10 kHz,s(n)是一个方波信号,而噪声信号w(n)是两个高频(f1 =3.5kHz, f2 = 4 kHz)正弦叠加信号,设计一个低通滤波器,将x(n)中的干扰信号滤除,画出滤波后信号y(n)的波形和幅度谱。
时间: 2024-03-07 07:47:48 浏览: 86
好的,这是一个信号处理的问题。根据你提供的信息,我们可以采用数字滤波器来处理这个问题。下面是解决问题的步骤和代码:
步骤1: 生成信号
首先,我们需要生成一个包含方波信号和高频噪声信号的信号。代码如下:
```python
import numpy as np
fs = 10000 # 采样频率
t = np.arange(0, 1, 1/fs) # 时间轴
f1 = 3500 # 高频噪声1
f2 = 4000 # 高频噪声2
s = np.sign(np.sin(2*np.pi*50*t)) # 方波信号
w = np.sin(2*np.pi*f1*t) + np.sin(2*np.pi*f2*t) # 高频噪声信号
x = s + w # 合成信号
```
步骤2: 设计低通滤波器
为了滤除高频噪声信号,我们需要设计一个低通滤波器。这里我们采用巴特沃斯滤波器,滤波器的截止频率为2.5kHz。代码如下:
```python
from scipy import signal
fc = 2500 # 截止频率
order = 4 # 滤波器阶数
b, a = signal.butter(order, 2*np.pi*fc, 'lowpass', fs=fs) # 设计滤波器
```
步骤3: 滤波
利用设计好的滤波器,我们对合成信号进行滤波处理。代码如下:
```python
y = signal.filtfilt(b, a, x) # 滤波处理
```
步骤4: 画出滤波后信号y(n)的波形和幅度谱
我们可以使用matplotlib库来画出滤波后信号y(n)的波形和幅度谱。代码如下:
```python
import matplotlib.pyplot as plt
# 画出滤波前的信号
plt.figure()
plt.plot(t, x)
plt.title('Original Signal')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
# 画出滤波后的信号
plt.figure()
plt.plot(t, y)
plt.title('Filtered Signal')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
# 画出滤波器的幅度谱
w, h = signal.freqz(b, a)
plt.figure()
plt.plot(w/(2*np.pi), np.abs(h))
plt.title('Filter Frequency Response')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.show()
```
运行上述代码后,我们可以看到3个图像,分别是原始信号、滤波后的信号和滤波器的幅度谱。根据幅度谱,我们可以看到滤波器的截止频率为2.5kHz,高频噪声信号被成功滤除了。同时,滤波后的信号波形也清晰地显示了出来。
阅读全文