%选哈明窗 function resdata = FIR_filter(wp,ws,rp,rs,data,Fs) Wp=wp*1000*2/Fs;% 频率归一化 Ws=ws*1000*2/Fs; wdel=Ws-Wp;% 过渡带宽 wn=0.5*(wp+ws);% 近似计算截止频率 N=ceil(6.6*pi/wdel);% 根据过渡带宽度求滤波器阶数 window=hamming(N+1);% 哈明窗 b=fir1(N,wn,window);% FIR滤波器设计 figure('NumberTitle', 'off', 'Name', 'FIR数字滤波器设计结果','menubar','none'); freqz(b,1,512); resdata = filter(b,1,data); 这段代码原先是什么滤波器,分别修改什么可以让他变成低通滤波器,高通滤波器,带通滤波器,带阻滤波器
时间: 2024-04-02 13:32:27 浏览: 101
这段代码原本是根据给定的截止频率和过渡带宽设计一个带窗口的低通滤波器,并使用该滤波器对输入信号进行滤波。
如果要将该代码修改为高通滤波器,需要将函数fir1()的第三个参数window改为'high';
如果要将该代码修改为带通滤波器,需要将函数fir1()的第一个参数wp和第二个参数ws分别修改为通带的上下边缘频率,并将函数fir1()的第三个参数window改为'hamming'或其他窗口函数,如'blackman'等;
如果要将该代码修改为带阻滤波器,需要将函数fir1()的第一个参数wp和第二个参数ws分别修改为阻带的上下边缘频率,并将函数fir1()的第三个参数window改为'hamming'或其他窗口函数,如'blackman'等。
相关问题
分析此代码运行结果:% 采样频率 fs = 1000; % 通带边缘频率 wp = [125 300]/(fs/2); % 阻带边缘频率 ws = [100 350]/(fs/2); % 通带和阻带的最大允许衰减(dB) Rp = 1; Rs = 30; % 计算滤波器的阶数和截止频率 [n,wn] = buttord(wp,ws,Rp,Rs); % 使用fir1函数设计带通滤波器 b = fir1(n,wn); % 生成原始信号,包括50Hz和200Hz的正弦波 t = 0:1/fs:1; x = sin(2*pi*50*t) + sin(2*pi*200*t); % 使用filter函数将信号通过滤波器 y = filter(b,1,x); % 绘制原始信号和滤波后的信号 figure; plot(t,x); hold on; plot(t,y); legend('原始信号','滤波后的信号'); xlabel('时间(秒)'); ylabel('幅度');
这段代码主要是实现了一个带通滤波器的设计和应用,用于处理包含50Hz和200Hz正弦波的原始信号,将其滤波后输出滤波后的信号。
具体分析如下:
1. 定义采样频率 fs = 1000;
2. 定义带通滤波器的通带边缘频率 wp = [125 300]/(fs/2),阻带边缘频率 ws = [100 350]/(fs/2)。
3. 定义带通滤波器通带和阻带的最大允许衰减(dB),Rp = 1,Rs = 30。
4. 使用 buttord 函数计算出带通滤波器的阶数和截止频率 [n,wn] = buttord(wp,ws,Rp,Rs)。
5. 使用 fir1 函数生成带通滤波器 b = fir1(n,wn)。
6. 生成原始信号,包括50Hz和200Hz的正弦波 t = 0:1/fs:1; x = sin(2*pi*50*t) + sin(2*pi*200*t)。
7. 使用 filter 函数将原始信号通过滤波器 y = filter(b,1,x)。
8. 绘制原始信号和滤波后的信号 plot(t,x); hold on; plot(t,y); legend('原始信号','滤波后的信号'); xlabel('时间(秒)'); ylabel('幅度')。
从运行结果来看,滤波后的信号中只保留了125Hz和300Hz之间的信号,被滤除的50Hz和200Hz正弦波信号已被滤除。同时,滤波器设计合理,滤波后的信号幅度明显下降,但滤波器的设计允许一定的通带和阻带波动,因此在滤波的过程中仍会存在少量的幅度波动。
凯瑟窗函数法设计FIR数字带通滤波器,设计指标为:wp1=0.35pi,wp2=0.65pi,ws1=0.2pi,ws2=0.8pi,Rp=1db,Rs=60db,matlab代码中文
以下是使用凯瑟窗函数法设计FIR数字带通滤波器的MATLAB代码:
```matlab
% 设计指标
wp1 = 0.35*pi;
wp2 = 0.65*pi;
ws1 = 0.2*pi;
ws2 = 0.8*pi;
Rp = 1;
Rs = 60;
% 计算参数
delta_p = (10^(Rp/20)-1)/(10^(Rp/20)+1);
delta_s = 10^(-Rs/20);
A = -20*log10(min(delta_p,delta_s));
N = ceil((A-8)/(4.57*(wp2-wp1)/(2*pi)));
beta = 0.1102*(A-8.7);
% 计算凯瑟窗函数
n = 0:N-1;
wnd = kaiser(N,beta);
% 计算理想频率响应
wc1 = (wp1+ws1)/2;
wc2 = (wp2+ws2)/2;
hd = (sin(wc2*(n-N/2))-sin(wc1*(n-N/2)))./(pi*(n-N/2));
hd(N/2+1) = (wc2-wc1)/pi;
% 计算实际频率响应
h = hd.*wnd';
% 绘制幅频响应曲线
[H,w] = freqz(h,1,1024);
magH = 20*log10(abs(H));
plot(w/pi,magH);
xlabel('归一化频率');
ylabel('幅度(dB)');
title('FIR数字带通滤波器幅频响应');
grid on;
```
其中,kaiser函数用于计算凯瑟窗函数,freqz函数用于计算幅频响应。运行以上代码,即可得到数字带通滤波器的幅频响应曲线。
阅读全文