已知原始信号x(t)=sin(80*27πt)+2sin(140*27πt).若信号受到加性白噪声污染,实际获得的信号为xn(t)=x(t)+randn(size(t)),设计一个FIR滤波器从噪声污染的信号xn(t)中恢复出源信号x(t)。设采样频率fs=1000Hz.
时间: 2023-07-28 19:09:46 浏览: 116
用小波分解重构信号,加入去噪,然后用小波去除
4星 · 用户满意度95%
首先,我们需要对原始信号进行采样,假设采样频率为1000Hz,则采样间隔为1/1000秒。可以得到如下代码:
```
t = 0:1/1000:1-1/1000; % 时间序列
x = sin(80*27*pi*t) + 2*sin(140*27*pi*t); % 原始信号
xn = x + randn(size(t)); % 受到噪声污染的信号
```
接下来,我们需要设计一个FIR滤波器,将噪声污染的信号xn(t)中的噪声滤除,从而恢复出源信号x(t)。
我们可以使用MATLAB中的fir1函数设计一个长度为N的低通滤波器,滤波器的截止频率为原始信号中最高频率的两倍(即280Hz),代码如下:
```
N = 100; % 滤波器的长度
fc = 280/(1000/2); % 滤波器的截止频率
b = fir1(N,fc); % 设计低通滤波器
```
接下来,我们可以使用MATLAB中的filter函数将噪声污染的信号xn(t)通过滤波器b,从而得到恢复出来的信号y(t),代码如下:
```
y = filter(b,1,xn); % 恢复出源信号
```
最后,我们可以将原始信号x(t)、受到噪声污染的信号xn(t)和恢复出来的信号y(t)进行绘图比较,代码如下:
```
plot(t,x,'r',t,xn,'g',t,y,'b');
xlabel('时间/s');
ylabel('幅值');
legend('原始信号','受到噪声污染的信号','恢复出的信号');
```
完整代码如下:
```
t = 0:1/1000:1-1/1000; % 时间序列
x = sin(80*27*pi*t) + 2*sin(140*27*pi*t); % 原始信号
xn = x + randn(size(t)); % 受到噪声污染的信号
N = 100; % 滤波器的长度
fc = 280/(1000/2); % 滤波器的截止频率
b = fir1(N,fc); % 设计低通滤波器
y = filter(b,1,xn); % 恢复出源信号
plot(t,x,'r',t,xn,'g',t,y,'b');
xlabel('时间/s');
ylabel('幅值');
legend('原始信号','受到噪声污染的信号','恢复出的信号');
```
阅读全文