在matlab用窗函数设计FIR滤波器时,通带衰减和阻带衰减对滤波器设计有什么影响?要怎么设计?

在matlab用窗函数设计FIR滤波器时,通带衰减和阻带衰减对滤波器设计有什么影响?要怎么设计?,第1张

首先理想滤波器是不可能实现的,只能尽可能逼近理想滤波器的特性,但是由于成本和技术的复杂性的限制,在实际设计中就允许通带和阻带中存在一定的误差,即通带不一定是完全水平的,阻带信号也不一定都衰减到零,在通带与阻带之间还有一定宽度的过渡带 这些要求决定了滤波器的复杂程度,一般来说要求波动越小,就越难实现,而且这些因素也是相互制约的,鱼和熊掌不可兼得, 比如通带平整就意味着过渡带宽,衰减缓慢, 要求过渡带窄通带波动就大等等,故需要综合考虑,合理选择

以选择窗口函数为例, 要熟悉各种窗口函数的特性,根据具体要求来选择

最小阻带衰减 过渡带带宽△w

矩形窗 209dB 092π/M

汉宁窗 439dB 311π/M

海明窗 545dB 332π/M

布莱克曼窗 753dB 556π/M

太模糊了,问题也不是很清楚。

如果单纯调用的话,直接在button->callback里面添加所需的函数;

axes(handlesaxes1) %指定‘tag’为‘axes1’的坐标轴

plot(x1,y1);

axes(handlesaxes2) %指定‘tag’为‘axes2’的坐标轴

plot(x2,y2);

。。。

这个x1 x2 y1 y2,你应该在程序中是传递过来的参数,或者是全局变量。

如果你一点都不懂,建议你买本MATLAB/GUI的书回去参考,很多基础的东西都有。

hd=sin(wdn)/(pin); % 理想冲激响应

w=hamming(N)'; % 海明窗

h=hdw; % 实际冲激响应

H=20log10(abs(fft(h,1024))); % 实际滤波器的幅频特性

HH=[H(513:1024) H(1:512)];

subplot(221),stem(nn,hd,'k');

xlabel('n');title('理想冲激响应');axis([-70 70 -01 03]);

subplot(222),stem(nn,w,'k');axis([-70 70 -01 12]);

title('海明窗');xlabel('n');

subplot(223),stem(nn,h,'k');

axis([-70 70 -01 03]);xlabel('n');title('实际冲激响应');

w=(-512:511)/511;

subplot(224),plot(w,HH,'k');

axis([-12 12 -140 20]);xlabel('\omega/\pi');title('滤波器幅频特性');

set(gcf,'color','w');参考这段程序

从上面提示看,问题出在索引超过矩阵维数,可这样改:

L=length(x); %求信号长度 这句改为

L=length(X); 或改为:

L=min(length(X),length(Y))

上面这对代码分两部分:

 1 %理想低通滤波器单位冲激响应函数

    function hd=ideal_lp1(wc,N) % 这一行去掉分号

    

    pha=angle(H);

2 % 主程序

    clear all;

    

    axis([0,1,-100,10])

其中1部分保存成一个叫ideal_lp1m的文件,放好别动;2部分保存成任意名字的m为文件,然后运行之。

常见的窗口有

矩形窗 boxcar()

三角窗 triang()

汉宁窗 hanning()

海明窗 hamming()

布拉克曼窗 blackman()

恺撒窗kaiser(n,beta)

绘制频率响应曲线有可以用freqz()函数,比如:

n=50;

figure; freqz(boxcar(n),1);

figure; freqz(hanning(n),1);

figure; freqz(hamming(n),1);

figure; freqz(blackman(n),1);

figure; freqz(kaiser(n,25),1);

或者直接用vwtool()工具,例如:

w = kaiser(200,25);

wvtool(w)

这是我刚做的双线性变换法低通滤波器,运行是正确的!ly是语音信号的名字,别的自己改改就行!

原语音信号程序

figure(1);

[y,fs,nbits]=wavread ('ly');

sound(y,fs,nbits); %回放语音信号

n = length (y) ; %求出语音信号的长度

Y=fft(y,n); %傅里叶变换

subplot(2,1,1);plot(y);title('原始信号波形');

subplot(2,1,2);plot(abs(Y));title('原始信号频谱')

加噪语音信号程序

figure(2);

[y,fs,nbits]=wavread ('ly');

n = length (y) ; %求出语音信号的长度

t=[0:1/8000:2 zeros(1,23520-1)]';

noise=004sin(10000pit);%sin函数产生噪声

s=y+noise; %语音信号加入噪声

sound(s);

subplot(2,1,1);plot(s);title('加噪语音信号的时域波形');

S=fft(s); %傅里叶变换

subplot(2,1,2);plot(abs(S));title('加噪语音信号的频域波形')

滤波后的信号程序

Ft=8000;

Fp=1000;

Fs=1200;

wp=2piFp/Ft;

ws=2piFs/Ft;

fp=2Fttan(wp/2);

fs=2Fstan(wp/2);

[n11,wn11]=buttord(wp,ws,1,50,'s'); %求低通滤波器的阶数和截止频率

[b11,a11]=butter(n11,wn11,'s'); %求S域的频率响应的参数

[num11,den11]=bilinear(b11,a11,05); %利用双线性变换实现频率响应S域到Z域的变换

[y,fs,nbits]=wavread ('ly');

n = length (y) ; %求出语音信号的长度

t=[0:1/8000:2 zeros(1,23520-1)]';

noise=004sin(10000pit);%sin函数产生噪声

s=y+noise; %语音信号加入噪声

z11=filter(num11,den11,s);

sound(z11);

m11=fft(z11); %求滤波后的信号

figure(3);

subplot(2,1,1);plot(z11);title('滤波后的信号波形');

subplot(2,1,2);plot(abs(m11),'r');title('滤波后信号的频谱');

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12183344.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存