y=cos(2*pi*f1*t)+cos(2*pi*f2*t)+cos(2*pi*f3*t);使用带通滤波从仿真信号y(t)中提取3个频率的分量。给出matlab代码并逐行注释
时间: 2023-07-23 16:42:37 浏览: 101
数字信号处理带通滤波(matlab平台代码)
好的,以下是使用带通滤波从仿真信号中提取3个频率分量的 Matlab 代码,并注释每一行的作用和意义:
```matlab
% 定义时间范围
t = 0:0.001:1;
% 定义三个频率分量
f1 = 10;
f2 = 50;
f3 = 100;
% 构造信号
y = cos(2*pi*f1*t) + cos(2*pi*f2*t) + cos(2*pi*f3*t);
% 绘制原始信号图像
subplot(2,2,1);
plot(t, y, 'k');
title('原始信号');
% 设计带通滤波器
fs = 1000; % 采样率
fpass = [40 60]; % 通带频率范围
fstop = [30 70]; % 阻带频率范围
apass = 1; % 通带最大衰减
astop = 80; % 阻带最小衰减
designfilt('bandpassfir', 'PassbandFrequency', fpass, 'StopbandFrequency', fstop, 'PassbandRipple', apass, 'StopbandAttenuation', astop, 'SampleRate', fs);
% 这里使用了 designfilt 函数,创建一个带通 FIR 滤波器,传入参数分别是通带频率范围、阻带频率范围、通带最大衰减、阻带最小衰减和采样率。
% 使用带通滤波器滤波
y_filtered = filtfilt(d, y);
% 绘制滤波后的信号图像
subplot(2,2,2);
plot(t, y_filtered, 'k');
title('滤波后信号');
% 对滤波后的信号进行傅里叶变换
Y = fft(y_filtered);
% 计算频率
f = (0:length(Y)-1)*fs/length(Y);
% 绘制频域图像
subplot(2,2,[3,4]);
plot(f,abs(Y),'k');
xlim([0 200]);
title('频域图像');
```
希望这份代码可以帮助到你!
阅读全文