精华内容
下载资源
问答
  • 基于FPGA低通滤波器FIR的设计1 滤波器的特征参数介绍图1 低通滤波器特征参数 如图1所示,低通滤波器的通带截止频率为ωp ,通带容限为α1,阻带截止频率为ωs,阻带容限为α2。通带定义为|ω|≤ωp ,过渡带定义为ωp2 ...

         基于FPGA低通滤波器FIR的设计

    1 滤波器的特征参数介绍

    ef65273ff5bdd463cad30138b73ab86a.png

    图1 低通滤波器特征参数
           如图1所示,低通滤波器的通带截止频率为ωp ,通带容限为α1,阻带截止频率为ωs,阻带容限为α2。通带定义为|ω|≤ωp ,过渡带定义为ωp

    2 设计目标

          要求:使用fir滤波器设计一个滤波器系数为15阶的低通滤波器,通带截止频率为1KHZ,采样频率为44.1khz。

    3 matlab的设计验证

    close all
    clear all
    clc

    %设计一个低通滤波器 采样频率为44.1khz, 截止频率为1khz

    FS = 44100; %HZ
    fc = 1000;
    N = 15;
    Q = 16;

    %以采样频率的一半,对频率进行归一化处理
    wn_lpf=fc*2/FS;
    %采用fir1函数设计FIR滤波器
    b_lpf=fir1(N-1,wn_lpf);

    %滤波系数进行量化
    b_16=round(b_lpf/max(abs(b_lpf))*(2^(Q-1)-1));

    %求滤波器的幅频响应
    m_lpf=20*log(abs(fft(b_lpf)))/log(10);
    b16_lpf=20*log(abs(fft(b_16)))/log(10);
    %设置幅频响应的横从标单位为Hz
    x_f=[0:(FS/length(m_lpf)):FS/2];

    %绘制单位脉冲响应
    subplot(221);stem(b_lpf);xlabel('n');ylabel('h(n)');
    title('低通滤波器的单位脉冲响应','fontsize',8);

    subplot(222);stem(b_16);xlabel('n');ylabel('h(n)');
    title('低通滤波器的单位脉冲响应','fontsize',8);

    %绘制幅频响应曲线
    subplot(223);plot(x_f,m_lpf(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);
    title('低通滤波器的幅频响应','fontsize',8);

    subplot(224);plot(x_f,b16_lpf(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);
    title('低通滤波器的幅频响应','fontsize',8);

    33516b3e50e9739e21b7fc0aaf18cb1d.png

    图2 低通滤波器的matlab单位脉冲响应和幅频响应

    4 FPGA信号发生器

    为了验证低通滤波器,我们设计了测试验证的sin信号发生器。
    wire [17:0] kfreq= (k<2048)?18’h00333:18’h00FFF;//1khz-5khz
    产生1khz和5khz的sin波。d3d6039b9c0d94f7e19ea3e7a22b550c.png

    图3 信号发生器产生1khz和5khz的sin测试源

    测试源的FFT分析:5d95c88575589ae43af40ae9d06bdd66.png
    图4 测试源数据的matlab分析

          由图4的频域图可知,测试源产生了1khz和5khz的sin。

    5 FPGA的fir设计

          Fir滤波器verilog代码设计采取全并行模式。

    `timescale 1ps/1ps

    module fir1(
    input mclk,//45.1584MHZ
    input reset_n,
    input signed[31:0] pcm_in,
    output signed[31:0] pcm_out
    );

    localparam LAST_CYCLE = 1023;
    reg [9:0] i;

    reg signed [31:0] pcm1,pcm2,pcm3,pcm4,pcm5,pcm6,pcm7,pcm8,pcm9,pcm10,pcm11,pcm12,pcm13,pcm14,pcm15;
    reg signed [47:0] pcm1_out,pcm2_out,pcm3_out,pcm4_out,pcm5_out,pcm6_out,pcm7_out,pcm8_out,pcm9_out,pcm10_out,pcm11_out,pcm12_out,pcm13_out,pcm14_out,pcm15_out;
    reg signed [51:0] pcm_r;

    wire signed [15:0] coeff1,coeff2,coeff3,coeff4,coeff5,coeff6,coeff7,coeff8,coeff9,coeff10,coeff11,coeff12,coeff13,coeff14,coeff15;

    assign coeff1 = 2208;
    assign coeff2 = 3631;
    assign coeff3 = 7612;
    assign coeff4 = 13576;
    assign coeff5 = 20413;
    assign coeff6 = 26727;
    assign coeff7 = 31169;
    assign coeff8 = 32767;
    assign coeff9 = 31169;
    assign coeff10 = 26727;
    assign coeff11 = 20413;
    assign coeff12 = 13576;
    assign coeff13 = 7612;
    assign coeff14 = 3631;
    assign coeff15 = 2208;
    assign pcm_out = pcm_r[51:20];
    always @(posedge mclk or negedge reset_n) begin
    if(!reset_n) begin
    i<= 0;
    pcm1<=0;
    pcm2<=0;
    pcm3<=0;
    pcm4<=0;
    pcm5<=0;
    pcm6<=0;
    pcm7<=0;
    pcm8<=0;
    pcm9<=0;
    pcm10<=0;
    pcm11<=0;
    pcm12<=0;
    pcm13<=0;
    pcm14<=0;
    pcm15<=0;

    pcm1_out<=0;
    pcm2_out<=0;
    pcm3_out<=0;
    pcm4_out<=0;
    pcm5_out<=0;
    pcm6_out<=0;
    pcm7_out<=0;
    pcm8_out<=0;
    pcm9_out<=0;
    pcm10_out<=0;
    pcm11_out<=0;
    pcm12_out<=0;
    pcm13_out<=0;
    pcm14_out<=0;
    pcm15_out<=0;

    pcm_r<= 0;
    end
    else begin
    i <= i + 1;
    if(i == 0) begin
    pcm1<=pcm_in;
    pcm2<=pcm1;
    pcm3<=pcm2;
    pcm4<=pcm3;
    pcm5<=pcm4;
    pcm6<=pcm5;
    pcm7<=pcm6;
    pcm8<=pcm7;
    pcm9<=pcm8;
    pcm10<=pcm9;
    pcm11<=pcm10;
    pcm12<=pcm11;
    pcm13<=pcm12;
    pcm14<=pcm13;
    pcm15<=pcm14;
    end
    if(i==1) begin
    pcm1_out <= pcm1*coeff1;
    pcm2_out <= pcm2*coeff2;
    pcm3_out <= pcm3*coeff3;
    pcm4_out <= pcm4*coeff4;
    pcm5_out <= pcm5*coeff5;
    pcm6_out <= pcm6*coeff6;
    pcm7_out <= pcm7*coeff7;
    pcm8_out <= pcm8*coeff8;
    pcm9_out <= pcm9*coeff9;
    pcm10_out <= pcm10*coeff10;
    pcm11_out <= pcm11*coeff11;
    pcm12_out <= pcm12*coeff12;
    pcm13_out <= pcm13*coeff13;
    pcm14_out <= pcm14*coeff14;
    pcm15_out <= pcm15*coeff15;
    end
    if(i==2) pcm_r<= pcm1_out +pcm2_out+pcm3_out+pcm4_out+pcm5_out+pcm6_out+pcm7_out+pcm8_out+pcm9_out+pcm10_out+pcm11_out+pcm12_out+pcm13_out+pcm14_out+pcm15_out;
    end
    end

    endmodule

         fpga实验modelsim仿真结果,从图5来看1khz几乎保持不变,而5khz波形幅度上被抑制了很多。97e3af59f5dbe62b600560e7bcddb558.png
    图5 modelsim fir实验结果时域波形

    Matlab fft分析:bd408ee191b63deccf5fa5c193752a7d.png

    图6 matlab分析实验结果

          由图2和图6对比,5khz经过滤波后的功率减小了20DB,图2与图5基本一致,fir的低通滤波器全并行设计成功。

    DSP往期

    音频总线I2S协议

    信号的产生

    信号的基本概念

    基于LUTDDS的设计

    更多精彩推荐,请关注我们

    515790fa2c6e2c3417f9f3956b3ce06e.png

    万水千山总是情,点个 “好看” 行不行!!!

    6ad62d789a7908bbd1df93ce45350a36.png   
    展开全文
  • clearclose allglobal FsFs = 360;load '118m.mat'%mit数据库第118条数据signal = ...%% 采用FIR I型设计20Hz以下的低通滤波器fp=14; fs=18;detap = 0.01;detas = 0.01;[M,beta] = selectFirFilterN(fp,fs,detap,d...

    clear

    close all

    global Fs

    Fs = 360;

    load '118m.mat'%mit数据库第118条数据

    signal = val(1,100000:111600)/200;

    %% 采用FIR I型设计20Hz以下的低通滤波器

    fp=14; fs=18;

    detap = 0.01;detas = 0.01;

    [M,beta] = selectFirFilterN(fp,fs,detap,detas);

    N = M+1;

    w = kaiser(N,beta);

    hd = FIRItypeIdealpulse(fp,fs,N,'low');

    h = hd.*w';

    % 设计的滤波器

    omega = linspace(0,pi,512);

    mag = freqz(h,[1],omega);

    figure

    plot(omega/(2*pi)*Fs,20*log10(abs(mag)));

    title('FIR低通(14hz以下)滤波器频率相应');

    xlabel('频率');

    ylabel('增益(dB)');

    %% 采用FIR I型设计8Hz以上的高通滤波器

    fp2 = 8; fs2=4;

    detap2 = 0.01; detas2 = 0.01;

    [M2,beta2] = selectFirFilterN(fp2,fs2,detap2,detas2);

    N2 = M2+1;

    w2 = kaiser(N2,beta2);

    hd2 = FIRItypeIdealpulse(fp2,fs2,N2,'high');

    h2 = hd2.*w2';

    % 设计的滤波器

    omega = linspace(0,pi,512);

    mag = freqz(h2,[1],omega);

    figure

    plot(omega/(2*pi)*Fs,20*log10(abs(mag)));

    title('FIR高通(8Hz以上)滤波器频率相应');

    xlabel('频率');

    ylabel('增益(dB)');

    %% 信号滤波

    sigFiltered = filter(h,[1],signal);

    sigFiltered2 = filter(h2,[1],sigFiltered);

    figure

    subplot(3,1,1);

    plot(signal,'r');

    subplot(3,1,2);

    hold on

    plot(sigFiltered(M/2:end),'b');

    subplot(3,1,3);

    hold on

    plot(sigFiltered2(M/2+M2/2:end),'g');

    ylim([-2,2]);

    title('信号滤波');

    %% 傅里叶变换画出滤波后的频谱

    data = FilteredSignal;

    M = length(data);

    N = M*2-1;

    X = fft(data,N);

    f = [0:M-1]*Fs/N;

    figure

    Xabs = abs(fftshift(X));

    plot(f(1:end/2),Xabs(M:end-M/2));

    title('滤波后的信号频谱');

    function [M,beta] = selectFirFilterN(fp,fs,detap,detas)

    % 自动选择kaiser窗对应的M和beta值

    global Fs

    wp = 2*pi*(fp/Fs);

    ws = 2*pi*(fs/Fs);

    A = -20*log10(min(detap,detas));

    M = ceil((A-7.95)/(2.285*abs(wp-ws)));

    M = mod(M,2)+M;

    % 确定beta的值

    if A<21

    beta = 0;

    elseif A>=21 && A<=50

    beta = 0.5842*(A-21)^0.4+0.07886*(A-21);

    else

    beta = 0.1102*(A-8.7);

    end

    function hd = FIRItypeIdealpulse(fp,fs,N,type)

    %==================================================

    % 理想FIR I型低通滤波器,wc是截止角频率,阶数M

    %==================================================

    global Fs

    wp = 2*pi*(fp/Fs);

    ws = 2*pi*(fs/Fs);

    wc = (wp+ws)/2;

    N = mod(N+1,2)+N;

    M = N-1;

    k = 0:M;

    if strcmp(type,'high')

    hd = -(wc/pi)*sinc(wc*(k-0.5*M)/pi);

    hd(0.5*M+1) = hd(0.5*M+1)+1;

    % hd = sinc(k-0.5*M)-(wc/pi)*sinc(wc*(k-0.5*M)/pi);

    elseif strcmp(type,'low')

    hd = (wc/pi)*sinc(wc*(k-0.5*M)/pi);

    else

    disp('error');

    hd = [];

    end

    end

    aab877972473326c520f6d320d5f5a6c.png

    94698eb39268fc427814e04bd610a51a.png

    53ae1afed1947552bf5a50e5a81a97b5.png

    a91c27a940391dade864a48d38d2ebca.png

    参考:陈后金主编 数字信号处理  第2版

    展开全文
  • 一、摘要前面一篇文章介绍了通过FDATool工具箱实现滤波器的设计,见“二、实验平台Matlab7.1三、实验原理以低通滤波器为例,其常用的设计指标有:通带边缘频率fp(数字频率为Ωp)阻带边缘频率fst(数字频率为Ωst)通带...

    一、摘要

    前面一篇文章介绍了通过FDATool工具箱实现滤波器的设计,见“

    二、实验平台

    Matlab7.1

    三、实验原理

    以低通滤波器为例,其常用的设计指标有:

    通带边缘频率fp(数字频率为Ωp)

    阻带边缘频率fst (数字频率为Ωst)

    通带内最大纹波衰减δp=-20log10(1-αp),单位为 dB

    阻带最小衰减αs=-20log10(αs),单位为 dB

    阻带起伏αs

    通带峰值起伏αp

    其中,以1、2、3、4条最为常用。5、6条在程序中估算滤波器阶数等参数时会用到。

    数字频率 = 模拟频率/采样频率

    四、实例分析

    例1 用凯塞窗设计一FIR低通滤波器,通带边界频率Ωp=0.3pi,阻带边界频率 Ωs=0.5pi,阻带衰减δs不小于50dB。

    方法一:手动计算滤波器阶数N和β值,之后在通过程序设计出滤波器。

    第一步:通过过渡带宽度和阻带衰减,计算滤波器的阶数B和β值。

    0818b9ca8b590ca3270a3433284dd417.png

    第二步:通过程序设计滤波器。

    程序如下:

    b = fir1(29,0.4,kaiser(30,4.55));

    [h1,w1]=freqz(b,1);

    plot(w1/pi,20*log10(abs(h1)));

    axis([0,1,-80,10]);

    grid;

    xlabel('归一化频率/p') ;

    ylabel('幅度/dB') ;

    波形如下:

    0818b9ca8b590ca3270a3433284dd417.png

    方法二:

    采用[n,Wn,beta,ftype] = kaiserord(f,a,dev)函数来估计滤波器阶数等,得到凯塞窗滤波器。

    这里的函数kaiserord(f,a,dev)或者kaiserord(f,a,dev,fs):

    f为对应的频率,fs为采样频率;当f用数字频率表示时,fs则不需要写。

    a=[1 0]为由f指定的各个频带上的幅值向量,一般只有0和1表示;a和f长度关系为(2*a的长度)- 2=(f的长度)

    devs=[0.05 10^(-2.5)]用于指定各个频带输出滤波器的频率响应与其期望幅值之间的最大输出误差或偏差,长度与a相等,计算公式:

    阻带衰减误差=αs,通带衰减误差=αp,可有滤波器指标中的3、4条得到。

    fs缺省为2Hz。

    程序如下:

    fcuts = [0.3 0.5]; %归一化频率omega/pi,这里指通带截止频率、阻带起始频率

    mags = [1 0];

    devs = [0.05 10^(-2.5)];

    [n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs); %计算出凯塞窗N,beta的值

    hh = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');

    freqz(hh);

    波形如下:

    0818b9ca8b590ca3270a3433284dd417.png

    实际中,一般调用MATLAB信号处理工具箱函数remezord来计算等波纹滤波器阶数N和加权函数W(ω),调用函数remez可进行等波纹滤波器的设计,直接求出滤波器系数。函数remezord中的数组fedge为通带和阻带边界频率,数组mval是两个边界处的幅值,而数组dev是通带和阻带的波动,fs是采样频率单位为Hz。

    例2 利用雷米兹交替算法设计等波纹滤波器,设计一个线性相位低通FIR数字滤波器,其指标为:通带边界频率fc=800Hz,阻带边界fr=1000Hz,通带波动 阻带最小衰减At=40dB,采样频率fs=4000Hz。

    解:在MATLAB中可以用remezord 和remez两个函数设计

    程序如下:

    fedge=[800 1000];

    mval=[1 0];

    dev=[0.0559 0.01];

    fs=4000;

    [N,fpts,mag,wt]=remezord(fedge,mval,dev,fs);

    b=remez(N,fpts,mag,wt);

    [h,w]=freqz(b,1,256);

    plot(w*2000/pi,20*log10(abs(h)));

    grid;

    xlabel('频率/Hz') ;

    ylabel('幅度/dB');

    波形如下:

    0818b9ca8b590ca3270a3433284dd417.png

    例3 利用MATLAB编程设计一个数字带通滤波器,指标要求如下:通带边缘频率:Ωp1=0.45pi,Ωp2=0.65pi,通带峰值起伏:δ1<=1[dB]。阻带边缘频率:Ωs1=0.3pi,Ωs2=0.8pi,最小阻带衰减:δ2>=40[dB] 。

    方法一:窗函数法

    程序如下:

    [n,wn,bta,ftype]=kaiserord([0.3 0.45 0.65 0.8],[0 1 0],[0.01 0.1087 0.01]);%用kaiserord函数估计出滤波器阶数n和beta参数

    h1=fir1(n,wn,ftype,kaiser(n+1,bta),'noscale');

    [hh1,w1]=freqz(h1,1,256);

    figure(1)

    subplot(2,1,1)

    plot(w1/pi,20*log10(abs(hh1)))

    grid

    xlabel('归一化频率w');ylabel('幅度/db');

    subplot(2,1,2)

    plot(w1/pi,angle(hh1))

    grid

    xlabel('归一化频率w');ylabel('相位/rad');

    波形如下:

    0818b9ca8b590ca3270a3433284dd417.png

    滤波器系数为:

    h1 =

    Columns 1 through 8

    0.0041 0.0055 -0.0091 -0.0018 -0.0056 -0.0000 0.0391 -0.0152

    Columns 9 through 16

    -0.0381 0.0077 -0.0293 0.0940 0.0907 -0.2630 -0.0517 0.3500

    Columns 17 through 24

    -0.0517 -0.2630 0.0907 0.0940 -0.0293 0.0077 -0.0381 -0.0152

    Columns 25 through 31

    0.0391 -0.0000 -0.0056 -0.0018 -0.0091 0.0055 0.0041

    如果直接用freqz(h1,1,256),得幅频特性和相频特性曲线:

    0818b9ca8b590ca3270a3433284dd417.png

    方法二:等波纹法设计

    程序如下:

    [n,fpts,mag,wt]=remezord([0.3 0.45 0.65 0.8],[0 1 0],[0.01 0.1087 0.01]);%用remezord函数估算出remez函数要用到的阶n、归一化频带边缘矢量fpts、频带内幅值响应矢量mag及加权矢量w,使remez函数设计出的滤波器满足f、a及dev指定的性能要求。

    h2=remez(n,fpts,mag,wt);%设计出等波纹滤波器

    [hh2,w2]=freqz(h2,1,256);

    figure(2)

    subplot(2,1,1)

    plot(w2/pi,20*log10(abs(hh2)))

    grid

    xlabel('归一化频率w');ylabel('幅度/db');

    subplot(2,1,2)

    plot(w2/pi,angle(hh2))

    grid

    xlabel('归一化频率w');ylabel('相位/rad');

    h2

    波形如下:

    0818b9ca8b590ca3270a3433284dd417.png

    滤波器系数如下:

    h2 =

    Columns 1 through 9

    -0.0013 0.0092 -0.0255 -0.0642 0.1177 0.0922 -0.2466 -0.0466 0.3116

    Columns 10 through 17

    -0.0466 -0.2466 0.0922 0.1177 -0.0642 -0.0255 0.0092 -0.0013

    如果直接用freqz(h2,1,256);得幅频特性和相频特性曲线:

    0818b9ca8b590ca3270a3433284dd417.png

    方法三:采用FDATool工具

    这种方法需要事先计算出滤波器的阶数,bate值,然后设置相应参数,最后生成滤波器。

    设置界面如下图所示:

    0818b9ca8b590ca3270a3433284dd417.png

    将上述圈圈的区域设置好之后,生成滤波器,最后通过analysis菜单可以观察生成的滤波器的各种特性曲线和滤波器系数。这里的滤波器系数跟方法一的一样。

    波形如下:

    0818b9ca8b590ca3270a3433284dd417.png

    五、结果分析

    5.1 滤波器设计总结

    FIR滤波器实现一般采用窗函数法和等纹波设计法。窗函数法还包含两个分支,一种是用公式先手动算出N值和其他对应得窗函数参数值,再代入窗函数和fir1实现,一种是用函数*rord估算出N和相应参数再用fir1实现。不过要注意*rord会低估或高估阶次n,可能会使滤波器达不到指定的性能,这时应稍微增加或降低阶次。如果截止频率在0或Nyquist频率附近,或者设定的dev值较大,则得不到正确结果。

    滤波器实现形式及特点:由于一般的滤波器在利用窗函数是其通带波纹和阻带波纹不同(一般为第一个阻带波纹最大)因此,在满足第一个阻带衰减旁瓣时,比其频率高的旁瓣,它们的衰减都大大超出要求。而根据阻带衰减与项数的近似关系N = P(δ2)*fs/TW,可得当阻带衰减越大,所需项数越多。

    5.2 窗函数法和等波纹设计的不同之处

    窗函数设计是通过最小平方积分办法来设计的,即该滤波器的误差为:

    0818b9ca8b590ca3270a3433284dd417.png

    即要求最小方法来设计滤波器,这样的滤波器更忠实于理想滤波器(即滤波系数更接近于理想滤波器)。

    证明如下:

    0818b9ca8b590ca3270a3433284dd417.png

    因此,幅度频谱差值越小,实际滤波器就越接近理想滤波器。

    而等波纹滤波器是通过最大加权误差最小化来实现,其误差为:

    0818b9ca8b590ca3270a3433284dd417.png

    要求该误差最小来实现滤波器,得出来的滤波系数较窗函数设计相差较远。

    以下通过对例3中的h1及h2作比较。

    %sigsum是用来对数组各元素进行求和

    function y=sigsum(n1,n2,n,x);

    y=0;

    for i=n1+1-min(n):n2+1-min(n)

    y=y+x(i);

    end

    n=0.001:30.001;

    h=2*cos(0.55*pi*(n-15)).*sin(0.175*pi*(n-15))./(pi*(n-15));

    delta1=h-h1;

    n=0.001:16.001;

    h=2*cos(0.55*pi*(n-15)).*sin(0.175*pi*(n-15))./(pi*(n-15));

    delta2=h-h2;

    y1=sigsum(0,30,[0:30],(abs(delta1).^2))/31;

    y2=sigsum(0,16,[0:16],(abs(delta2).^2))/17;

    结果如下:

    y1 =

    1.9099e-004

    y2 =

    0.0278

    由此得到用窗函数实现的滤波系数比用等波纹滤波器系数的每一项更接近于理想滤波器(y1为用窗函数实现的与理想滤波器的差值,y2为用等波纹滤波器实现的与理想滤波器的差值);

    0818b9ca8b590ca3270a3433284dd417.png

    对比二者的幅度频谱可知,等波纹滤波器阻带边缘比用窗函数实现的更平滑(理想滤波器为垂直下降的)。

    从设计的角度考虑,由于窗函数设计法都是通过已有的窗函数对理想滤波器的改造,因此,可以用手算的办法方便的设计滤波器。

    而等波纹滤波器,其实现是通过大量的迭代运算来实现,这样的方法一般只能通过软件来设计。

    项数的问题由于等波纹滤波器能较平均的分布误差,因此对于相同的阻带衰减,其所需的滤波系数比窗函数的要少。

    5.3 几点说明

    1.相频特性曲线形状不同说明

    0818b9ca8b590ca3270a3433284dd417.png

    上面第一个图是用角度为单位画出来的,下面的图是用rad单位画出来的。从图形可以观察到在0.3到0.8数字频率间两个图都是严格的线性相位,至于下面的图为什么在这个区间会有跳变是因为rad的区间只有-pi——pi,当相位由-pi继续增加时只能跳到pi而不能大于pi,而角度表示则可以连续增大。

    2.调用firl或者reme函数时,用scale(缺省方式)对滤波器进行归一化,即滤波器通带中心频率处的响应幅值为0db。用noscale不对滤波器归一化。

    展开全文
  • 匿名用户1级2011-05-20 回答%所希望的频率响应在0~0.25*pi之间为1,在0.25*pi~pi之间为0,对h(n)加窗截断,%选择矩形窗和任意一种其他窗口,每种窗口长度分别为M=10、20、40三种情况,%对每种情况要进行性能好坏的...

    匿名用户

    1级

    2011-05-20 回答

    %所希望的频率响应在0~0.25*pi之间为1,在0.25*pi~pi之间为0,对h(n)加窗截断,

    %选择矩形窗和任意一种其他窗口,每种窗口长度分别为M=10、20、40三种情况,

    %对每种情况要进行性能好坏的分析。

    %首先需要理解实际的滤波器是没有办法做到理想状态的。如果你要理想状态的话,

    %就直接就是矩形窗序列乘序列就OK, 矩形窗只能达到20.9dB 的衰减

    %但是实际的加窗构成的滤波器,必然会存在波纹,和过渡带 滤波器的衰减指标主要

    %是由阻带衰减确定的 不妨设 阻带衰减为 50dB 那么要达到这个指标,通过查表,

    %可以知道-必须是hamming window(54.5dB) 或 blackman window(75.3dB)

    %下面是加窗的低通FIR滤波器

    clear

    clc;

    wc=0.25*pi;

    wdelta=wc-2*wc/3; %设定过渡带宽度

    M=ceil(3.32*pi/wdelta) ; %窗口长度 这里计算合理的窗长

    N1=2*M+1;

    winlp=hamming(N1);

    Flp=fir1(N1-1,wc/pi,winlp);

    freqz(Flp,1,512);

    title('Frequency & Phase Response ');

    % 下面就是按你的要求啦,窗长M=10、20、40

    M=[10,20,40];

    N=2*M+1;

    % M=10

    figure(2);

    Win0=hamming(N(1));

    FLP0=fir1(N(1)-1,wc/pi,Win0);

    freqz(FLP0,1,512);

    title('Frequency & Phase Response M=10');

    % M=20

    figure(3);

    Win1=hamming(N(2));

    FLP1=fir1(N(2)-1,wc/pi,Win1);

    freqz(FLP1,1,512);

    title('Frequency & Phase Response M=20');

    % M=30

    figure(4);

    Win2=hamming(N(3));

    FLP2=fir1(N(3)-1,wc/pi,Win2);

    freqz(FLP2,1,512);

    title('Frequency & Phase Response M=30');

    % 至于矩形窗 设 20dB衰减

    figure(5)

    M0=ceil(0.92*pi/wdelta) ; %窗口长度 这里计算合理的窗长

    N0=2*M0+1;

    ww=boxcar(N0);

    fflp=fir1(N0-1,wc/pi,ww);

    freqz(fflp,1,512);

    title('Frequency & Phase Response Rectangular');

    展开全文
  • matlab低通滤波器设计

    2013-07-30 10:01:17
    1低通滤波器实现.............................................................................................................9 (2)带通滤波器实现.....................................................
  • 使用MATLAB设计FIR低通滤波器 ** 关于现代通信原理作业。 https://blog.csdn.net/tanghonghanhaoli/article/details/100533581 这是老师给出的提示,里面有比较详细的讲解,下面写一些我的想法。 1. 为什么要设计...
  • 3)lp2hp,lp2bp,lp2bs可以完成低通滤波器到高通、带通、带阻滤波器的转换;4)使用bilinear可以对模拟滤波器进行双线性变换,求得数字滤波器的传输函数系数;5)利用impinvar可以完成脉冲响应不变法的模拟滤波器到...
  • DSP 设计滤波器报告 姓名:张胜男 班级:07 级电信(1)班 学号:078319120 一·低通滤波器的设计(......FIR低通滤波器+matlab编程+滤波前后图形_工学_高等教育_教育专区。自己做的作业,不完全对,但有一定参考价...
  • matlab 一个简单的FIR低通滤波器设计例子 先直接放代码跟结果 %假设有一个3hz的信号,由于某种原因带有一些高频噪声,需要将其滤除掉 close all; clear all; load lowpass_fir; %fs=20 fc=6的32阶低通滤波器汉明窗 ...
  • 1 绪 论 1.1 引言 滤波技术是信号分析信号处理技术中的重要分支无论是信号的获取传输还是信号的处理转换都离不开滤波技术滤波技术对信号安全可靠和有效灵活的传递至关重要1 在电子系统中由于滤波器的好坏直接影响...
  • subplot(2,2,1); plot(f,mag_x),title('输入信号频谱图'); Y=fft(y,1024);mag_y=abs(Y); f=15000*(0:1023)/1024; subplot(2,2,2);%绘制输出信号频谱图 plot(f,mag_y),title('输出信号频谱图'); subplot(2,2,3)...
  • Matlab 实现振动信号低通滤波 附件 txt 中的数字是一个实测振动信号采样频率为 5000Hz试设计一个长度 为 M=32 的FIR 低通滤波器截止频率为 600Hz用此滤波器对此信号进行滤波 要求 1 计算数字截止频率 2 给出滤波器...
  • 一、摘要前面一篇文章介绍了通过FDATool工具箱实现滤波器的设计,见“二、实验平台Matlab7.1三、实验原理以低通滤波器为例,其常用的设计指标有:通带边缘频率fp(数字频率为Ωp)阻带边缘频率fst(数字频率为Ωst)通带...
  • MATLAB设计低通带通高通和带阻FIR数字滤波器.抽样频率为f 为1KHZ的数字带通滤波器,性能要求为:通带范围从200HZ到250HZ,在此两频率处衰减不大于3dB,在100HZ和400HZ频率处频率衰减不得小于20dB,采用巴特沃斯...
  • %用窗函数法设计线性相位低通滤波器 clear all; wp=0.5*pi; ws=0.6*pi; wd=ws-wp; %hanning窗 N_hann=ceil(8*pi/wd; wc=(wp+ws)/2; if mod(N_hann,2)==0 N_hann=N_hann+1; end hann_win=hanning(N_hann; b_hann=fir1...
  • matlab中使用不同的窗函数构造FIR数字低通滤波器

    万次阅读 多人点赞 2018-05-31 23:16:10
    实验目的和要求: • 1.通过窗函数法设计FIR滤波器,加深对FIR滤波器基本原理的理解。 • 2.学习使用窗函数法设计FIR滤波器,... 理想低通滤波器设计: function my_output=ideallp(wc,N) %Ideal Lowpass fi...
  • 1. 采用fir1函数设计,fir1函数可以设计低通、带通、高通、带阻等多种类型的具有严格线性相位特性的FIR滤波器。语法形式:b = fir1(n, wn)b = fir1(n, wn, ‘ftype’)b = fir1(n, wn, ‘ftype’, window)b = fir1(n,...
  • 了解有限长单位冲激响应FIR数字滤波器的传统设计方法,...利用MATLAB编程设计一个10阶的低通FIR数字滤波器,通带截止频率4KHZ,阻带起始频率6KHZ,采样频率40KHZ的数字低通滤波器,带外衰减不低于-60dB。通带衰减1dB。
  • 基于MATLAB的布莱克曼窗FIR数字低通滤波器设计程序 wst=0.5*pi;wp=0.3*pi;deltaw=wst-wp;%过渡带宽△w的计算 N0=ceil(11*pi/deltaw);%按布莱克曼窗计算所需的滤波器长度N0 N=N0+mod(N0+1,2);%为了实现第一类偶对称...
  • 3)lp2hp,lp2bp,lp2bs可以完成低通滤波器到高通、带通、带阻滤波器的转换;4)使用bilinear可以对模拟滤波器进行双线性变换,求得数字滤波器的传输函数系数;5)利用impinvar可以完成脉冲响应不变法的模拟滤波器到...
  • 1、采用MATLAB设计一个FIR低通滤波器。滤波器采样频率为fs=8MHz,过渡带fc=[1MHz 2Mhz],通带衰减小于1dB,阻带衰减大于40dB,滤波器系数量化位数为12比特。 2、FPGA根据MATLAB生成的FIR滤波器系数,调用FIR II 核...
  • 使用MATLAB设计FIR滤波器

    千次阅读 2018-06-22 19:57:00
    1. 采用fir1函数设计,fir1函数可以设计低通、带通、高通、带阻等多种类型的具有严格线性相位特性的FIR滤波器。语法形式: b = fir1(n, wn) b = fir1(n, wn, ‘ftype’) b = fir1(n, wn, ‘ftype’, window) b =...
  • %设计FIR数字低通滤波器,截止频率为pi/4,在不同窗口长度(N=15,N=33)下,分别求出 %h(n),通过幅频特性和相频特性,观察3dB带宽和20dB带宽,总结窗口长度N对滤波特性的影响。 close all; clc; clear; N=15; N1=N...
  • 精选文档 1 数字滤波器的概述 3 1.1 FIR 数字滤波器设计原理 3 1.2 FIR 数字滤波器的特性 4 1.3 窗函数的介绍 6 2 FIR 数字滤波器设计及实现 7 2.1 低通滤波器的设计 7 2.2 高通滤波器的设计 9 2.3 带通滤波器的设计...
  • %% 低通 N=50; w1=0.3; b=fir1(N,w1,hann(N+1)); figure(1) freqz(b,1,512); %% 高通 N=50; %%阶数太低不行 w1=0.3; b=fir1(N,w1,'high',hann(N+1)); figure(2) freqz(b,1); %% 带通 N=50; w1=0.3; w2=0.5; b=fir1...
  • C语言编写FIR数字低通滤波器

    万次阅读 2017-04-11 09:24:10
    主要是获取滤波器参数和卷积算法,参数根据自己的滤波器特性用matlab上面的一个fdatool工具配置生成,然后将这些参数写入程序里面即可(参数可适当的乘以一个系数,对滤波没任何影响),我这里Fs = 2k,Fpass= 1k,...
  • 以99阶FIR低通滤波器为例,学习使用matlab的fdatool工具箱设计滤波器,并将滤波器系数导出到.coe文件,联合Vivado进行FPGA的FIR滤波器设计。 本文滤波器参数为:低通FIR滤波器,窗函数设计,采用布莱克曼窗,99阶,...
  • 1. 采用fir1函数设计,fir1函数可以设计低通、带通、高通、带阻等多种类型的具有严格线性相位特性的FIR滤波器。语法形式:b = fir1(n, wn)b = fir1(n, wn, ‘ftype’)b = fir1(n, wn, ‘ftype’, window)b = fir1(n,...
  • 低通FIR滤波器设计+Vivado实现

    千次阅读 2020-06-11 17:14:28
    设计目标:设计一个低通滤波器,可以从1KHZ、3KHZ、4KHZ的叠加信号中,滤除掉3KHZ及以上的信号。 二、功能设计 1.总体架构: 图1 功能设计的总体架构 总结一下,即: 首先由MATLAB生成一个由三个正弦波叠加...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 175
精华内容 70
关键字:

matlab低通滤波器fir1

matlab 订阅