数字信号分析——基础知识点总结

来源:互联网 发布:单片机程序 编辑:程序博客网 时间:2024/05/16 03:23

           前几篇对数据采集相关知识点进行了总结,从采集卡选型以及模拟信号采集进行相关介绍,通过采集卡进行ADC,就能获取到电脑所能识别的数字信号,对于电脑而言只有离散和有限长度的数据才能被处理,接下来就对获取的数字信号进行分析。

         实际应用中周期性模拟信号很复杂,很难以一个简单的正弦曲线来描述。傅里叶分析法可将任意复杂的波形分解为简单的正弦、余弦或复指函数之和。

                             正弦波波形表达式F(t) = Asin(wt+b)  

                           其中振幅为A,角频率为w,相位b为常数

        相位:描述波形在初始时刻t0相对于指定参数点的偏移量,单位为度或弧度;

频率表示方式:

    1)f ,单位为HZ;

    2)角频率w:弧度/s,w = 2πf ;

    3)RPM:每分钟旋转数, RPM = 60f ;

          为什么要用正弦曲线来代替原来的曲线呢?假如我们利用方波或者三角波来代替,分解信号的方法是无穷的,但分解信号的目的是为了更加简单地处理信号。而用正余弦表示原信号会更加简单,这是由于正余弦拥有其他信号所不具备的性质:正弦曲线保真度。一个正弦曲线信号输入后,输出的仍是正弦曲线,只有幅度和相位可能发生变化,而频率和波的形状仍是一样的,且只有正弦曲线才拥有这样的性质,所以才用正弦曲线而不用方波或者三角波来表示。

      假设采样频率为Fs,信号频率F,采样点数为N,那么FFT之后结果就是一个为N点的复数,每一个点就对应一个频率点,这个点的模值就是该频率值下的幅度特性。若原始信号峰值为A,那么FFT的结果的每个点(除第一个点直流分量之外)的模值就是A的N/2倍,第一个点表示直流分量。 N个采样点经过FFT之后,得到N个点FFT结果,为了计算方便,通常N取2的整数次幂。由于FFT结果具有对称性,通常我们只使用前半部分结果。假设FFT之后某点n用复数a+bi表示,那么这个复数的模就是An =根号下a方+b方,相位Pn=atan2(b,a),则n点处对应的信号表达式为:

                                       2An/Ncos(2πFn*t+Pn)   (n不等于1,且n<N/2)   

  某点处的频率:Fn = (n-1)Fs/N   ;

 该频率下的幅值: An/n/2    ;

 对于n=1点处的信号,是直流分量;

采样间隔:1/fs;

采样时间:N/fs;

频率分辨率:采样时间的倒数,fs/N;

        变换之后的频谱宽度(带宽)与原始信号也存在一定的对应关系,根据采样定理,FFT之后的频谱宽度最大是采样率的一半。我们都希望频谱更宽,分辨率更精确,这样的话选择合适的采样点数和采用率很有必要。采样点数越多,采样时间越长,频率分辨率越高;采样率越大,频谱宽度越长。

频谱泄露:就是信号频谱中各谱线之间相互干扰,使测量的结果偏离实际值,同时在真实谱线的两侧的其他频率点上出现一些幅值较小的假谱。产生频谱泄露的主要原因是采样频率和原始信号频率不同步,造成周期的采样信号的相位在始端和终端不连续。简单来说就是计算机的FFT运算能力有限,只能处理有限点数的FFT,所有在截取时域的周期信号时,没有能够截取整数倍的周期。

       避免频谱泄露除了尽量使采样率与信号频率同步外,还可以采用适当的窗函数。另外一个方法是采样信号时间足够长,基本上可以覆盖到整个有效信号的时间跨度。这种方法经常用在瞬态捕捉中使用,例如冲击试验。

       窗函数其实就是一个加权函数,它在截取的信号时间段内有值,时间段之外值为0。加窗在时域上表现为点乘,在频域上则表现为卷积。卷积可以被看成是一个平滑的过程。这个平滑过程可以看出是由一组具有特定函数形状的滤波器,因此原始信号中在某一频率点上的能量会结合滤波器的形状表现出来,从而减小泄露。具有这个原理,人们通常在时域上加窗。一般窗函数有矩形窗、汉宁窗、flattop等。

   假设采集了一组txt原始数据,实际信号频率为1000,采样率为10000现在想看一下其频域的相关信息,下面就利用Matlab编写个小程序实现,代码如下:

load test.txtfs=10000; % 根据输出的数据m=size(test)N=max(m)s=fft(test,N-1);   x0=abs(s);F=(0:N-2)*fs/(N-1);%计算采样点的对应的频率;n=(0:N-1);F=(0:n)*fs/N;plot(F,test)%实际频谱图;title('频谱图');xlabel('频率/Hz');ylabel('幅值');s0(1)=x0(1)/(N-1);%计算幅值,当n=1时 直流分量s0(2:N-1)=x0(2:end)/(0.5*(N-1));%计算幅值,当n>1fshift=round(0.5*(N-1));figure(1);subplot(2,1,1);plot(1:N,test); %plot(1:N,test);title('信号');xlabel('采样点数');ylabel('信号');subplot(2,1,2);plot(F(1:fshift),s0(1:fshift))%由于对称只取一半频谱;title('频谱图');xlabel('频率/Hz');ylabel('幅值');

运行程序结果如下:




原创粉丝点击