分析此代码运行结果:% 定义采样率和截止频率 Fs = 1000; Fstop1 = 100; % 第一个截止频率 Fpass1 = 125; % 第一个通带频率 Fpass2 = 300; % 第二个通带频率 Fstop2 = 350; % 第二个截止频率 % 计算截止频率、通带频率和通带宽度 Wstop1 = Fstop1/(Fs/2); Wpass1 = Fpass1/(Fs/2); Wpass2 = Fpass2/(Fs/2); Wstop2 = Fstop2/(Fs/2); Apass = 1; % 通带最大衰减(dB) dev = [0.01 0.01]; % 通带和阻带最大波纹(dB) W = [Wstop1 Wpass1 Wpass2 Wstop2]; % 设计频带 % 使用fir1函数设计滤波器 b = fir1(30, W, 'bandpass', kaiser(31, 5)); % 输出滤波器的频率响应 freqz(b, 1, 1024, Fs); % 生成原始信号 t = 0:1/Fs:1; x = sin(2*pi*50*t) + sin(2*pi*200*t); % 滤波 y = filter(b, 1, x); % 绘制原始信号和滤波后的信号 subplot(2,1,1); plot(t, x); title('原始信号'); xlabel('时间(秒)'); ylabel('幅度'); subplot(2,1,2); plot(t, y); title('滤波后的信号'); xlabel('时间(秒)'); ylabel('幅度');
时间: 2024-04-06 14:28:07 浏览: 25
这段代码的作用是设计一个带通滤波器,将一个由两个正弦波组成的原始信号中的125Hz到300Hz之间的频率成分滤出来,并绘制出原始信号和滤波后的信号。
具体分析如下:
1. 设计带通滤波器
首先,定义了采样率和四个频率参数:第一个截止频率Fstop1、第一个通带频率Fpass1、第二个通带频率Fpass2和第二个截止频率Fstop2。接着,通过将这些频率归一化到采样率的一半(即0到1之间),计算出了四个归一化频率Wstop1、Wpass1、Wpass2和Wstop2,以及通带最大衰减Apass和最大波纹dev。最后,使用fir1函数设计了一个30阶的带通滤波器,采用Kaiser窗口。
2. 输出滤波器的频率响应
使用freqz函数输出滤波器的频率响应。在这个函数中,输入滤波器系数b和1作为分母,指定采样点数为1024,采样率为Fs,生成滤波器的频率响应图像。
3. 生成原始信号
使用采样率和时间向量生成了1秒钟的时间序列t。然后,设定两个正弦波的频率为50Hz和200Hz,并将它们相加,生成了一个由两个正弦波组成的原始信号x。
4. 滤波
使用filter函数对原始信号进行滤波,得到了滤波后的信号y。在这个函数中,将滤波器系数b和原始信号x输入,同时将1作为第二个参数(即滤波器的分母),表示使用直接I型结构进行滤波。
5. 绘制图像
最后,使用subplot函数将两个子图分别绘制在一个图像窗口中,分别显示原始信号和滤波后的信号。在绘制时,使用plot函数绘制出时间序列和幅度之间的关系,并使用title、xlabel和ylabel函数添加标题和坐标轴标签。
总之,该代码实现了一个带通滤波器,并使用该滤波器对一个由两个正弦波组成的原始信号进行了滤波。