画出原始信号xt = 2sin(2pi100t) + 3cos(2pi500t) + sin(2pi800*t);通过带通滤波器,对原始信号进行滤波,保留f=500的余弦波,滤除信号中频率f=100和f=800的正弦波成分后的时域波形和幅度谱。MATLAB代码
时间: 2024-03-07 21:48:05 浏览: 150
用matlab进行信号滤波
好的,以下是MATLAB代码实现:
```matlab
% 生成时间序列
t = linspace(0, 1, 1000);
% 生成原始信号
xt = 2*sin(2*pi*100*t) + 3*cos(2*pi*500*t) + sin(2*pi*800*t);
% 绘制时域波形
figure;
plot(t, xt);
xlabel('Time');
ylabel('Amplitude');
title('Time-domain waveform of x(t)');
% 计算幅度谱
[Pxx, f] = periodogram(xt, [], [], 1000);
% 绘制幅度谱
figure;
plot(f, Pxx);
xlabel('Frequency');
ylabel('Power spectral density');
title('Power spectral density of x(t)');
% 设计带通滤波器
[b, a] = butter(4, [480, 520]/(1000/2), 'bandpass');
% 对原始信号进行滤波
yt = filtfilt(b, a, xt);
% 绘制滤波后的时域波形
figure;
plot(t, yt);
xlabel('Time');
ylabel('Amplitude');
title('Time-domain waveform of y(t)');
% 计算滤波后的幅度谱
[Pyy, f] = periodogram(yt, [], [], 1000);
% 绘制滤波后的幅度谱
figure;
plot(f, Pyy);
xlabel('Frequency');
ylabel('Power spectral density');
title('Power spectral density of y(t)');
```
运行以上代码,可以得到与前面Python代码相同的结果,包括原始信号xt的时域波形和幅度谱,以及滤波后的信号yt的时域波形和幅度谱。
阅读全文