clc;clear; close all; sel = 1; %1:hamming窗 2:blackman窗 Wp=0.3*pi;Ws=0.5*pi;Rp=0.25;Rs=50; N=15;n=0:1:N-1; Wc=(Ws+Wp)/2;hd=ideal_lp(Wc,N); if sel==1 %hamming窗 window=(hamming(N))'; h=hd.*window; elseif sel==2 %blackman窗 window=(blackman(N))'; h=hd.*window; end [db,mag,pha,w]=freqz_m(h,1); subplot(2,2,1);plot(w/pi,db);axis([0,1,-100,5]); subplot(2,2,2);plot(w/pi,pha); subplot(2,2,3);stem(n,h,'.');axis([0,N-1,-0.1,0.5]); subplot(2,2,4);stem(n,window,'.');axis([0,N-1,0,1.1]); %函数1:ideal_lp function hd=ideal_lp(wc,N) alpha=(N-1)/2; n=0:1:N-1; m=n-alpha+eps; hd=sin(wc*m)./(pi*m); end %函数2:freqz_m function[db,mag,pha,w]=freqz_m(b,a) [H,w]=freqz(b,a,1000,'whole'); H=(H(1:1:501))'; w=(w(1:1:501))'; mag=abs(H); db=20*log10((mag+eps)/max(mag)); pha=angle(H); end 详细注释
时间: 2024-04-04 13:33:11 浏览: 14
这是一段MATLAB代码,用于设计数字滤波器。它包括了两个自定义函数ideal_lp和freqz_m,这些函数在主程序中被调用来计算理想低通滤波器的幅频响应和数字滤波器的频率响应。主程序中使用了hamming窗和blackman窗来加窗理想低通滤波器,从而设计出数字滤波器。该程序的输入参数包括截止频率Wp和Ws,通带最大衰减Rp和阻带最小衰减Rs,以及滤波器阶数N。主程序中的subplot函数用于绘制滤波器的幅频响应、相频响应、滤波器的时域响应以及加窗函数的时域响应。
相关问题
clc;clear all; N1=597; N2=1104; Rdc=ones(N1,N2); fx=64; fy=64; for i=1:N1 for j=1:N2 % Mac(i,j)=cos(j/f*2*pi+pi/2); Mac(i,j)=cos(j/fx*2*pi); Macheng(i,j)=cos(i/fy*2*pi); end end I1=0.6*Rdc+0.3*Mac;%AC+DC分量,与传统方法参数一致 I2=0.6*Rdc+0.3*Macheng; % I1=0.5*Rdc+0.5*Mac;%AC+DC分量 figure; subplot(121); imagesc(I1); subplot(122); imagesc(I2); colormap(jet);
这是一段MATLAB代码,它创建了一个图像并进行了图像处理。代码中定义了一些参数,包括图像的大小(N1和N2),以及一些变量(Rdc、fx、fy)。然后,使用两个嵌套的循环来计算每个像素的值,并将其赋值给变量Mac和Macheng。最后,根据计算得到的变量值,分别计算了I1和I2两幅图像,并使用subplot和imagesc函数进行显示。
请问您希望了解这段代码的具体功能或者有其他相关的问题吗?我会尽力为您解答。
%ch6prog1.m clear clc wp=0.3*pi;ws=0.5*pi;%滤波器通带及阻带截止频率 tr=ws-wp; %过渡带宽tr N=ceil(6.6*pi/tr)+1 %滤波器的点数(阶数)N n=[0:1:N-1]; wc=(ws+wp)/2; %hd(n)的截止频率wc m=n-(N-1)/2+eps; hd=sin(pi*m)./(pi*m)-sin(wc*m)./(pi*m);%理想低通滤波器hd(n) wn=hamming(N);%窗函数(哈明窗) h=hd.*wn; %加窗处理,设计FIR滤波器的单位脉冲响应h(n) [H,w]=freqz(h,[1],1000,'whole'); %h(n)的频率响应H(w) mag=abs(H); db=20*log10((mag+eps)/max(mag)); %h(n)的幅频特性(dB) delta_w=2*pi/1000; ap=-(min(db(1:1:wp/delta_w+1))) %技术指标验证ap,as as=-round(max(db(ws/delta_w+1:1:501))) figure(1) %绘图 subplot(221);stem(n,hd,'.');grid on;title('hd(n)'); subplot(222);stem(n,wn,'.');grid on;title('汉宁窗'); subplot(223);stem(n,h,'.');grid on;title('h(n)'); subplot(224);plot(w(1:501)/pi,db(1:501));grid on;title('H(w)');
这段 MATLAB 代码实现了基于哈明窗的带阻滤波器设计。下面是代码的注释和解释:
```matlab
%ch6prog1.m
%基于哈明窗的带阻滤波器设计
clear;
clc;
% 滤波器通带和阻带截止频率
wp = 0.3 * pi;
ws = 0.5 * pi;
% 过渡带宽度
tr = ws - wp;
% 滤波器的点数(阶数)
N = ceil(6.6 * pi / tr) + 1;
% 确定理想低通滤波器hd(n)的截止频率wc
n = [0:1:N-1];
wc = (ws + wp) / 2;
% 理想低通滤波器hd(n)
m = n - (N - 1) / 2 + eps;
hd = sin(pi*m)./(pi*m) - sin(wc*m)./(pi*m);
% 加窗处理,设计FIR滤波器的单位脉冲响应h(n)
wn = hamming(N);
h = hd .* wn;
% h(n)的频率响应H(w)
[H, w] = freqz(h, [1], 1000, 'whole');
% h(n)的幅频特性(dB)
mag = abs(H);
db = 20 * log10((mag + eps) / max(mag));
% 技术指标验证ap,as
delta_w = 2 * pi / 1000;
ap = -(min(db(1:1:wp/delta_w+1)));
as = -round(max(db(ws/delta_w+1:1:501)));
% 绘图
figure(1)
subplot(221); stem(n, hd, '.'); grid on; title('hd(n)');
subplot(222); stem(n, wn, '.'); grid on; title('汉宁窗');
subplot(223); stem(n, h, '.'); grid on; title('h(n)');
subplot(224); plot(w(1:501)/pi, db(1:501)); grid on; title('H(w)');
```
代码实现了以下步骤:
1. 确定滤波器通带和阻带截止频率,以及过渡带宽度。
2. 确定滤波器点数(阶数)N,使用ceil函数将其向上取整。
3. 确定理想低通滤波器hd(n)的截止频率wc。
4. 计算理想低通滤波器hd(n)的单位脉冲响应。
5. 使用哈明窗对hd(n)进行加窗处理,得到FIR滤波器的单位脉冲响应h(n)。
6. 计算h(n)的频率响应H(w)和幅频特性db。
7. 验证技术指标ap和as。
8. 绘制hd(n)、汉宁窗、h(n)和H(w)的图形。
希望这些解释对您有所帮助!