使用matlab已知原始信号 x(t)=sin(80*27π*t)+2sin(140*27π*t)。若信号受到1000db加性白噪声污染,实际获得的信号为 Xn(t)=x(t)+randn(size(t)),设计一个FIR滤波器从噪声污染的信号Xn(t) 中恢复出源信号x(t) 。设采样频率fs=1000Hz 。要求绘制原始信号及其傅里叶变换,高斯白噪声及傅里叶变换
时间: 2023-07-29 16:09:04 浏览: 252
首先,我们可以绘制原始信号及其傅里叶变换:
```matlab
% 定义时间范围和采样频率
t = 0:1/1000:1-1/1000;
fs = 1000;
% 定义原始信号
x = sin(80*27*pi*t) + 2*sin(140*27*pi*t);
% 绘制原始信号
figure;
plot(t, x);
xlabel('Time (s)');
ylabel('Amplitude');
title('Original Signal');
% 对原始信号进行傅里叶变换
X = fft(x);
% 计算频率轴
f = (0:length(X)-1)*fs/length(X);
% 绘制原始信号的傅里叶变换
figure;
plot(f, abs(X));
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Original Signal Fourier Transform');
```
接下来,我们可以生成白噪声,并将其添加到原始信号中,得到污染的信号:
```matlab
% 生成白噪声
noise = randn(size(t));
% 将白噪声添加到原始信号中,得到污染的信号
xn = x + 10^(1000/20)*noise;
% 绘制污染的信号
figure;
plot(t, xn);
xlabel('Time (s)');
ylabel('Amplitude');
title('Noisy Signal');
% 对污染的信号进行傅里叶变换
Xn = fft(xn);
% 绘制污染的信号的傅里叶变换
figure;
plot(f, abs(Xn));
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Noisy Signal Fourier Transform');
```
接下来,我们可以设计一个FIR滤波器,从污染的信号中恢复出原始信号。我们可以使用firls函数来设计这个滤波器:
```matlab
% 设计FIR滤波器
lpf = firls(100, [0 0.2 0.3 1], [1 1 0 0]);
% 对污染的信号进行滤波
y = filter(lpf, 1, xn);
% 绘制滤波后的信号
figure;
plot(t, y);
xlabel('Time (s)');
ylabel('Amplitude');
title('Filtered Signal');
% 对滤波后的信号进行傅里叶变换
Y = fft(y);
% 绘制滤波后的信号的傅里叶变换
figure;
plot(f, abs(Y));
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Filtered Signal Fourier Transform');
```
最后,我们可以将滤波后的信号与原始信号进行比较,以评估滤波器的效果:
```matlab
% 绘制滤波前后的信号对比
figure;
plot(t, x, 'b', t, y, 'r');
legend('Original Signal', 'Filtered Signal');
xlabel('Time (s)');
ylabel('Amplitude');
title('Signal Comparison');
```
完整代码如下:
```matlab
% 定义时间范围和采样频率
t = 0:1/1000:1-1/1000;
fs = 1000;
% 定义原始信号
x = sin(80*27*pi*t) + 2*sin(140*27*pi*t);
% 绘制原始信号
figure;
plot(t, x);
xlabel('Time (s)');
ylabel('Amplitude');
title('Original Signal');
% 对原始信号进行傅里叶变换
X = fft(x);
% 计算频率轴
f = (0:length(X)-1)*fs/length(X);
% 绘制原始信号的傅里叶变换
figure;
plot(f, abs(X));
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Original Signal Fourier Transform');
% 生成白噪声
noise = randn(size(t));
% 将白噪声添加到原始信号中,得到污染的信号
xn = x + 10^(1000/20)*noise;
% 绘制污染的信号
figure;
plot(t, xn);
xlabel('Time (s)');
ylabel('Amplitude');
title('Noisy Signal');
% 对污染的信号进行傅里叶变换
Xn = fft(xn);
% 绘制污染的信号的傅里叶变换
figure;
plot(f, abs(Xn));
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Noisy Signal Fourier Transform');
% 设计FIR滤波器
lpf = firls(100, [0 0.2 0.3 1], [1 1 0 0]);
% 对污染的信号进行滤波
y = filter(lpf, 1, xn);
% 绘制滤波后的信号
figure;
plot(t, y);
xlabel('Time (s)');
ylabel('Amplitude');
title('Filtered Signal');
% 对滤波后的信号进行傅里叶变换
Y = fft(y);
% 绘制滤波后的信号的傅里叶变换
figure;
plot(f, abs(Y));
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Filtered Signal Fourier Transform');
% 绘制滤波前后的信号对比
figure;
plot(t, x, 'b', t, y, 'r');
legend('Original Signal', 'Filtered Signal');
xlabel('Time (s)');
ylabel('Amplitude');
title('Signal Comparison');
```
阅读全文