首先是怎么打开filterDesigner,我这个版本的matlab是直接在命令行输入filterDesigner就可以了,不同版本可能方法会不一样,这个我也没统计,就不做整理了。
方法其实很简单,【类型】自行选择低通、高通、带通、带阻等。【滤波器阶数】一般选最小阶。【频率设置】这里,这个频率我目前还不清楚具体是做什么,但网上的说法就是,还是要按照香农定理来,就是Fs>2f,这个f是信号的最大频率。【幅度设置】这一栏,数字越大表示衰减越多。
因为我也是小白,matlab+信号处理双重小白,所有只能把操作流程展示一遍,具体的东西我也说不上来,请大家多多包涵。
设置好滤波器的参数以后,点击设计滤波器,就出现了滤波器的样子,然后点击【文件】-【导出】,出现如下界面: 【导出到-workspace】,就是导出到工作区,【导出为-系数】这不用改,【变量名称】这个就是给这个滤波器起个名字,最后点击导出就ok了。
为了比较清晰地展示,我选择用滤波器来滤波噪声信号。代码如下:
fs = 96e3; % x = randn(1,96001); % 噪声信号 N = 4096; %fft的N n = 0:N-1; y = fft(x,N); %fft m =abs(y); f = n*fs/N; subplot(3,1,1),plot(f(1:N/2)/1000,m(1:N/2)); %输出滤波前的频谱 xlabel('频率/kHz'),ylabel('幅值'); title('滤波前频谱'); lbq = DaiZ; % 这里把设置好的滤波器赋给参数lbq(lbq就是滤波器); x1 = filter(lbq,1,x); % 进行滤波,filter表示进行滤波,第一个lbq表示的是保存的滤波器的形式,第二个1是默认,第三个x是要滤波的信号 y1 = fft(x1,N); m1 =abs(y1); subplot(3,1,2),plot(f(1:N/2)/1000,m1(1:N/2)); %输出滤波后的频谱 xlabel('频率/kHz'),ylabel('幅值'); title('滤波后频谱'); % 也来看看我们生成的滤波器的频谱 s =fft(lbq,N); ms = abs(s); subplot(3,1,3),plot(f(1:N/2)/1000,ms(1:N/2)); xlabel('频率/kHz'),ylabel('幅值'); title('滤波器频谱');我的代码应该写的还是很有问题的,不过能运行,这个DaiZ就是我们刚刚导出的滤波器的参数了(看名字也能知道,这是个带阻滤波器,诶,一点小小的彩蛋)。
我发现这个设计的滤波器和最终实现的滤波器还是有一点差别的,我放几张图,打击看一些设计时滤波器的值和实现后滤波器的值的差别。
低通滤波器2. 高通滤波器 3. 带通滤波器
4. 带阻滤波器 可以看到,每种滤波器,设计和实现时都存在差别,至于为什么会存在这种差别,我也不太清楚,如果有哪位老师知道,也希望能指点12。