基于Matlab的信号分析与数字滤波器设计
2021-12-24赵子曦
赵子曦
摘要:对于信号的时域分析只能获取部分信息,因此在频域作出信号频谱以辅助分析显得十分重要。在进行频谱分析后,会发现信号包含复杂噪声,因此使用软件设计滤波器去噪。在Matlab的基础上,本文首先采用经典的傅里叶变换对各类信号进行频谱分析,然后用窗函数法设计FIR数字滤波器。在声音信号上的实验证明,本文设计的FIR数字滤波器可以有效压制噪声,提取良好声音信号。
关键词:信号频谱分析; Matlab;滤波器;信号去噪中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2021)29-0114-02
进入21世纪以来,计算机技术飞速发展,大数据、物联网、人工智能(AI:Artificial Intelligence)成为学界、工业界的研究热点,随之对信号分析技术提出了更高的要求,也带来了新的机遇。
在摩尔定律的基础上,计算机有限的算力在复杂数据的处理上显得吃力,而现代数据处理又十分追求更高的效率、更快的速度和更准确的结果。Matlab是工程领域应用广泛的一款成熟软件,它拥有强大的矩阵运算能力和科学数据处理能力,可以处理十分微小的电路信号,因此使用Matlab进行信号分析与处理、数字滤波器设计等对于电路分析、小信号分析、波形重整具有十分重要的意义。
1信号频域分析
1.1离散傅里叶变换与窗函数
实际上,计算机存储的所有数据都是离散的,它们需要运用时域和频域都是离散的离散傅里叶变换(Discrete Fourier Transform,DFT)进行处理。TD(Time-Domain)连续信号经采样后,通过快速傅里叶变换成为FD(Frequency-Domain)采样。通过数学表达式绘图,不难看出输入DFT进行变换的时域信号和变换后输出的频域信号均为有限长序列,即主值序列。
在实际应用中常采用快速傅里叶变换计算DFT:
连续周期、连续非周期、离散周期、离散非周期信号的频谱与 DFT之间的关系:时域上的信号是非周期的,则频域上的信号是连续的;时域上的信号是周期的,则频域上的信号是离散的;反之亦然。
在对信号进行处理的过程中,会出现各种各样的错误,最典型的有混叠现象、泄露现象、栅栏效应。
混叠现象:连续信号的采样参数设置与采样定理相悖,信号频谱受到此影响而改变出现的高低频率成分混叠现象。因此,当使用采样信号求解原始信号的过程中,频域信息无法正确反解,形成严重的失真。泄露现象:当取样长度不是全函数长度时,会发生泄露效应,函数对应频率附近出现谱线。栅栏效应:对信号的采样,实际上是先把连续信号利用泰勒公式在频域上进行表示,后由离散傅里叶变换计算频谱再采样。那么就存在基频以及n倍基频,这些频率点就像是“栅栏”,把连续信号分隔成细微的部分,这种现象就是栅栏效应。
在这三种干扰中,其中最为严重的失真就是频谱混叠,而由于计算机无法截取全部长的信号,所以应用采样定理。为了避免采样定理过程中存在的常见干扰和信息损失,一般使用窗函数来截取信号,即通过加窗可以更好地对信号进行频域分析。
1.2频域信号分析
利用FFT,分析连续周期方波信号的频谱:通过改变采样率与时间截断长度,分别研究频谱的混叠与泄漏。
2数字滤波器设计
2.1数字频率、模拟频率与FIR滤波器
传统的硬件滤波一般对应模拟频率f:每秒经历多少个周期,单位Hz,即1/s;模拟角频率Ω:每秒经历多少弧度,单位rad/ s,而软件滤波对应数字频率ω,即每个采样点间隔之间的弧度,单位rad。二者的关系为Ω=2pi*f;ω=Ω*T,如果需要归一化,那么 ω除以2*pi 即可。
在模拟频率、数字频率之间映射完成之后,使用窗函数法(傅里叶级数法)设计理想的数字录波器。给定一组频率响应 H(jΩ),则由 IDTFT 可得出滤波器的单位脉冲响应:
由于是理想滤波器,故hd[k]是无限长序列。但是我们所要设计的 FIR 滤波器,其 h[k]是有限长的。为了能用 FIR 滤波器近似理想滤波器,需将理想滤波器的无限长单位脉冲响应hd [k]分别从左右进行截断。当截断后的单位脉冲响应hd[k]不是因果系统的时候,可将其右移从而获得因果的 FIR 滤波器。
设计的核心过程为:理想滤波器频率设计->反变换时域无限长信号->信号截断->右移变因果系统。
2.2数字滤波器设计内容
设计FIR数字低通滤波器,截止频率ωc=π/4,在不同窗口长度(N=15,33分别求出h(n)的幅频、相频特性,观察3dB带宽和20dB带宽以及阻带最小衰减,总结窗口长度N、窗函数特性对滤波特性的影响。
窗函数法设计FIR滤波器的技术路线:首先根据阻带最小衰减对照相关表格、窗函数,估算ωs与ωp,计算窗口长度N,N≈ A/Bt,A取决于窗函数类型。利用接着fir1()函数计算出滤波器系数,最后使用滤波函数filter()得到滤波后的函数。
3声音信号的滤波
声音信号滤波包含如下操作过程,首先利用电脑声卡进行人声采集,而后在Matlab中导入该信号,并作频谱分析,接着由其频谱特性随机加入正弦噪声,最后选用有限脈冲响应FIR滤波器进行滤波,并将输出信号与原信号对比评价。
声音信号使用苹果笔记本电脑 MacBook Air_Cirrus Logic CS4206A (AB 126)声卡采集,环境声音需大小在30db左右,麦克风格式设置为2通道、32位、44100Hz(录音师音质)。考虑到信号处理量,信号时长一般为8s左右为宜,在这种采集情况下,默认原始信号无噪。
利用 MATLAB 中的audioread函数把语音信号转换成序列,得到信号信息,然后在各个时间点加入正弦信号分量。
对于语音去噪现在已经有一些比较成熟的方法,如小波变换法、小波包变换法以及滤波器法。利用小波的方法去噪设计过程相对烦琐,因此,考虑到FIR滤波器具有线性相位且易于设计实现,本文选用FIR滤波器方法,加上hanning窗来实现去噪功能。
4 总结
本文对信号进行频谱分析,通过利用FFT分析连续周期方波信号的频谱得出:采样率设置为3~4倍方波基频,否则实信号以fs为采样速率的信号在 fs/2处混叠,fft结果中前半部分对应[0, fs/2],后半部分对应[ -fs/2, 0]。汉明(Hanning)窗使频谱旁瓣互相抵消,消去高频干扰和漏能,有效抑制了频谱泄露现象。窗口长度N越大,滤波器阶数越高,过渡带越窄,且窗函数可以明显改善截断效应。
实验证明,Matlab在信号处理领域已经十分成熟易用,但是其本身仍旧存在几点局限性。第一,文件命名不可以使用函数名和中文字符,否则程序会崩溃或无法正常运行;第二,Mat⁃lab在处理声音信号的时候对硬件要求较高,需要花费的时间也很长,这也是控制声音信号在十秒以内的原因。此外,从原理上来说,计算机无法对连续信号进行分析,每一个实际的连续信号实际上都是采样信号,即各种信号截断、转换都是在DFT的基础上,与实际总是存在误差。
参考文献:
[1] 韩长军.基于MATLAB的语音信号去噪方法应用[J].辽东学院学报(自然科学版),2017,24(1):72-77.
[2] 吴培希.有关零相数字滤波器的实现[J].信息系统工程,2012(4):95-96.
[3] 姜衍猛 . 基于 MATLAB 的数据采集与分析系统的研究及设计[D].济南:山东大学,2012.
[4] 张朝晖,袁建美,蒋洪明.用于动态测试的信号分析方法[J].石油大学学报(自然科学版),2002,26(2):120-124,0.
[5] 杨丽娟,张白桦,叶旭桢.快速傅里叶变换FFT及其应用[J].光电工程,2004,31(S1):1-3,7.
[6] 尹学爱,马国利,冯伟伟.基于MATLAB的声音信号频谱分析仪[J].教育教学论坛,2018(4):276-278.
【通联编辑:李雅琪】