用matlab写一段代码,具体如下:已知一个原始信号为x(t)=sin(2π×400t),采样频率为fs=1000Hz,信号被叠加了白噪声污染,试设计一个FIR滤波器并恢复出原始信号。要求画出:滤波器幅频特性;原始无噪声信号;叠加了噪声的信号;滤波后的信号
时间: 2024-03-09 22:46:52 浏览: 74
利用matlab对语音加噪,设计滤波器(巴特沃斯,切比雪夫)并去噪还原(赋原始代码,程序原理详细讲解)
好的,我来为您提供一段matlab代码,实现您的需求。代码如下:
```matlab
% 清空工作区
clear; clc; close all;
% 定义信号参数
fs = 1000; % 采样频率
t = 0:1/fs:1-1/fs; % 时间序列
x = sin(2*pi*400*t); % 原始信号
noise = 0.5*randn(size(t)); % 白噪声
% 叠加噪声
x_noise = x + noise;
% 设计滤波器
order = 100; % 滤波器阶数
fc = 100; % 截止频率
b = fir1(order, fc/(fs/2)); % FIR滤波器设计
% 滤波
x_filtered = filter(b, 1, x_noise);
% 绘图
figure(1);
subplot(2,2,1); plot(t, x); title('原始无噪声信号'); xlabel('时间/s'); ylabel('幅值');
subplot(2,2,2); plot(t, x_noise); title('叠加了噪声的信号'); xlabel('时间/s'); ylabel('幅值');
subplot(2,2,3); plot(t, x_filtered); title('滤波后的信号'); xlabel('时间/s'); ylabel('幅值');
subplot(2,2,4); freqz(b); title('滤波器幅频特性');
```
代码中,首先定义了信号参数,包括采样频率、时间序列和原始信号。然后生成了一个均值为0、方差为0.25的白噪声,并将其与原始信号相加,得到叠加了噪声的信号。接着,设计了一个100阶、截止频率为100Hz的FIR滤波器,用于滤除噪声。最后,使用`filter`函数对叠加了噪声的信号进行滤波,并绘制出了原始无噪声信号、叠加了噪声的信号、滤波后的信号和滤波器的幅频特性。
希望这段代码能够帮助到您!
阅读全文