用MATLAB画出hd=sin(wc*m)./(pi*m);的幅频特性
时间: 2024-02-18 21:00:53 浏览: 13
可以使用MATLAB中的`freqz`函数来绘制一个数字滤波器的幅频特性曲线。以下是一个示例代码:
```
wc = pi/4; % 截止频率
m = -50:50; % 采样点
hd = sin(wc*m)./(pi*m); % 理想低通滤波器的频率响应
% 绘制幅频特性曲线
freqz(hd, 1);
```
运行以上代码后,会弹出一个幅频特性曲线的窗口。可以通过调整输入参数wc来改变截止频率,从而观察到不同的幅频特性。
相关问题
%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)的图形。
希望这些解释对您有所帮助!
分析以下matlab代码并写上注释,FIR: wp=0.5*pi;%边界频率 ws=0.6*pi; wdelta=ws-wp;%过渡带宽 N=ceil(8*pi/wdelta); Nw=N; wc=(wp+ws)/2; n=0:N-1; alpha=(N-1)/2; m=n-alpha+eps; hd=sin(wc*m)./(pi*m); win=hamming(Nw); h=hd.*win'; b=h; figure(1) [H,f]=freqz(b,1,512,50); subplot(2,1,1),plot(f,20*log10(abs(H))) xlabel('频率/Hz');ylabel('振幅/dB');grid on; subplot(2,1,2),plot(f,180/pi*unwrap(angle(H))); xlabel('频率/Hz');ylabel('相位/o');grid on; f1=8;f2=21; N=100; n=0:N-1;dt=0.02; t=n*dt; x=sin(2*pi*f1*t)+0.5*cos(2*pi*f2*t); y=filter(b,1,x); figure(2) subplot(2,1,1),plot(t,x),title('输入信号') subplot(2,1,2),plot(t,y) hold on;plot([1 1]*(N-1)/2*dt,ylim,'r') xlabel('时间/s'),title('输出信号');
% FIR滤波器设计
% 边界频率设为0.5*pi
wp=0.5*pi;
% 过渡带宽设为0.1*pi
ws=0.6*pi;
wdelta=ws-wp;% 过渡带宽计算
% 计算FIR滤波器阶数
N=ceil(8*pi/wdelta);
% 设计窗函数长度
Nw=N;
% 计算通带中心频率
wc=(wp+ws)/2;
% 生成序列n,n=0:N-1
n=0:N-1;
% 计算alpha值
alpha=(N-1)/2;
% 生成序列m,m=n-alpha+eps
m=n-alpha+eps;
% 计算理想低通滤波器频率响应
hd=sin(wc*m)./(pi*m);
% 设计汉明窗函数
win=hamming(Nw);
% 计算FIR滤波器系数
h=hd.*win';
% 将滤波器系数赋值给b
b=h;
% 绘制FIR滤波器的幅度响应和相位响应
figure(1)
[H,f]=freqz(b,1,512,50); % freqz函数计算滤波器的频率响应
subplot(2,1,1),plot(f,20*log10(abs(H))) % 绘制幅度响应
xlabel('频率/Hz');ylabel('振幅/dB');grid on;
subplot(2,1,2),plot(f,180/pi*unwrap(angle(H))); % 绘制相位响应
xlabel('频率/Hz');ylabel('相位/o');grid on;
% 生成测试信号
f1=8;
f2=21;
N=100;
n=0:N-1;
dt=0.02;
t=n*dt;
x=sin(2*pi*f1*t)+0.5*cos(2*pi*f2*t);
% 对测试信号进行FIR滤波
y=filter(b,1,x);
% 绘制输入信号和输出信号
figure(2)
subplot(2,1,1),plot(t,x),title('输入信号') % 绘制输入信号
subplot(2,1,2),plot(t,y) % 绘制输出信号
hold on;
plot([1 1]*(N-1)/2*dt,ylim,'r') % 绘制滤波器响应时间范围
xlabel('时间/s'),title('输出信号');