53
信号处理专业培训教材

信号处理专业培训教材 - search read.pudn.comread.pudn.com/downloads418/ebook/1775298/Signal... · 2012. 2. 11. · 3 信号的生成 非周期函数 fones, zeros, linspace

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

  • 信号处理专业培训教材

  • 2

    信号的生成、存储和可视化分析;

    统计信号处理

    频域分析

    滤波器设计

  • 3

    信号的生成

    非周期函数ones, zeros, linspace

    周期函数sin, cos, square, sawtooth

    随机数均匀随机数:A = rand(m,n),生成一个 m × n 的随机数矩阵,在 [0, 1] 之间均匀分布;

    A = a + (b – a)*rand(m,n);高斯随机数:A = randn(m,n),生成一个 m × n 的随机数矩阵,服从标准正态分布,均值为0,方差为1;

    A = mu + sigma*randn(m,n);

  • 4

    举例:产生随机数,绘制直方图

    un = -5+10*rand(1,1e6);figure; hist(un,100);

    gn = 10+5*randn(1,1e6);figure; hist(gn,100)

  • 5

    信号数据的读入和存储

    Save:把MATLAB工作区间内的变量写入MATLAB数据文件(MAT文件),后缀名是.mat。文件位于当前工作路径下;

    Load:把变量从MAT文件中读入到MATLAB工作区间;

    其它操作函数:TextreadXlsreadImportdata图形化工具:uiimport

  • 6

    举例:导入多种类型的数据

    jan = textread( 'all_temps.txt','%*u%u%*[^\n]', 'headerlines',4);

    [data,head] =xlsread( 'signaldata.xls');plot(data(:,3))legend(head{3})

    I = importdata('eli.jpg');image(I)

    uiimport

  • 7

    Function Operationfopen() open file

    fclose() close file

    Function Operationfwrite() write binary data

    fprintf() write formatted data

    sprintf() write data to string

    Function Operationfread() read binary data

    fscanf() read formatted data

    fgetl() OR fgets() read complete line

    sscanf() read string

    Function Operationftell() get file position

    fseek() go to file position

    frewind() return to start of file

    打开/关闭:

    定位:读取:

    写入:

    文件 I/O:低级例程

  • 8

    举例:低级文件I/O操作fid = fopen('square_mat.txt','wt');fprintf(fid, '%s\n',...

    'This is a square matrix');fprintf(fid, '%i\t%i\t%i\n',...

    [1 2 3; 4 5 6; 7 8 9]');fclose(fid);

    fid=fopen('square_mat.txt', 'rt');title = fgetl(fid);data=fscanf(fid, '%i');data = reshape(data, 3, 3);data_transpose = data';fclose(fid);

  • 9

    信号可视化工具

    SPTool:提供了一个丰富的图形界面,用于信号的观察、滤波器设计以及谱分析。

    Signal Browser:用于分析信号。可以使用计算机的音频设备来播放部分信号;

    Filter Designer:用于设计或编辑 FIR 和 IIR 数字滤波器。请注意:FDATool 是首选的进行滤波器设计的GUI工具。Filter Viewer:用于分析滤波器特征;Spectrum Viewer:用于谱分析;

  • 10

    统计信号处理

    均值:mean;方差:var;标准方差:std;协方差:cov;相关系数:corrcoef;互相关函数:xcorr;互协方差函数:xcov;

  • 11

    举例:互相关运算

    x = [zeros(1,25),1, zeros(1,25)];figure;stem(x);y = .75*[zeros(1,20),x]+.1*randn(1,71);figure;stem(y);[c,lags] =xcorr(x,y);figure;stem(lags,c);

  • 12

    频域分析

    FFT运算

    谱分析非参数方法:对采样数据不作任何假设,直接使用DFT运算;

    参数方法:把采样数据假设成为由白噪声(均值为0,PSD为常量)驱动的线性系统的输出结果,然后估计线性系统(滤波器)系数,使用这些系数来估计PSD值

    子空间方法:基于对采样数据的特征分析或者是相关矩阵的特征值分解而进行PSD估计方法

  • 13

    举例:用FFT运算实现周期图法Fs = 100;t = 0:1/Fs:10-1/Fs;y = sin(2*pi*15*t) + sin(2*pi*30*t);Y = fft(y,512);f = (0:length(Y)-1)*(Fs-1)/length(Y);Power = Y.*conj(Y)/length(Y);figure;plot(f,Power)title('Periodogram')

    Y0 = fftshift(Y);f0 = (-length(Y0)/2:length(Y0)/2-1)*(Fs-1)/length(Y0);P0 =Y0.*conj(Y0)/length(Y0);figure;plot(f0,P0)

  • 14

    非参数方法

    周期图法:

    [Pxx,w] = periodogram(x)

    Welch法:[Pxx,w] = pwelch(x)

    MIM法:[Pxx,w] = pmtm(x,nw)

  • 15

    举例:非参数谱分析方法

    t =0:1/100:10-1/100;x=sin(2*pi*15*t)+sin(2*pi*30*t);figure(1)periodogram(x,[ ],512,100);figure(2)pwelch(x,[ ],[ ],512,100);

  • 16

    参数方法

    Yule-Walker AR 法[Pxx,f] = pyulear(x,p,nfft,fs)

    Burg 法[Pxx,f] = pburg(x,p,nfft,fs)

    协方差和改进的协方差法[Pxx,f] = pcov(x,p,nfft,fs)[Pxx,f] = pmcov(x,p,nfft,fs)

    P:AR模型的阶数

  • 17

    举例:参数谱分析方法

    edit pmethodspmethods('pyulear',25,1024)

  • 18

    子空间方法

    Eigenvector 法[S,f] = peig(x,p,nfft,fs)

    MUSIC法[S,f] = pmusic(x,p,nfft,fs)

    输入参数 p 控制信号的维数以及算法使用的噪声子空间

  • 19

    时变谱

    [B,f,t] = specgram(x,nfft,fs,window,numoverlap)

    1:信号被分割成重叠的若干个片断,然后根据window窗函数参数来对每一个片断进行加窗;

    2:使用长度为nfft的FFT来计算每一个信号片断的离散傅立叶变换,生成信号短期的频率成分,这些变换的结果组成了B。数值length(window)-numoverlap表示specgram移动窗的采样个数;

    3:对于实数输入信号,当nfft为偶数时,specgram截掉前nfft/2+1个点;当nfft为奇数时,specgram截掉前(nfft+1)/2个点。

  • 20

    举例:时变谱分析

    t = 0:1/100:10-1/100;x = sin(2*pi*15*t)+sin(2*pi*30*t);figure;specgram(x,256,100,hann(21),15)colorbar

    load handelsound(y,Fs)figure;specgram(y,512,Fs,kaiser(100,5),75)colorbar

  • 21

    小波分析

    Wavelet Toolbox + Signal Processing Toolbox

    >>wavemenu选择 Wavelet 1-D ,然后 File Example Analysis

    Basic Signals Frequency breakdown

  • 22

    滤波

    IIR滤波器设计FIR滤波器设计高级滤波器设计

    滤波器的实现

    图形界面设计工具:Fdatool

  • 23

    IIR 滤波器设计

    优点:与FIR滤波器相比,滤波器阶数较低;

    缺点: 非线性相位,利用 filtfilt等函数可以进行补偿

    典型的 IIR 滤波器类型

    • Butterworth

    • Chebyshev Types I 和 II

    • Elliptic

    • Bessel

    支持模拟和数字滤波器设计(仅支持Bessel 模拟滤波器设计),类型:低通、高通、带通、带阻

  • 24

    模拟原型

    1、获取一个模拟低通滤波器,截止频率为1,把这个原型滤波器配置成想要的频带特性;

    2、把滤波器转换到数字域;3、对滤波器进行离散化操作;

    bilinear, impinvar离散化操作

    lp2lp, lp2hp, lp2bp, lp2bs频率转换

    buttap, cheb1ap, besselap, ellipap, cheb2ap

    模拟低通滤波器原型

    可用的底层(low level)函数设计任务

    • butter, cheby1, cheby2, ellip, besself函数完成滤波器设计过程中的所有步骤

    • buttord, cheb1ord, cheb2ord, ellipord函数计算IIR滤波器的最小阶数

  • 25

    Chebyshev Type I 型方法

    计算最小的滤波器阶数[n,Wn] = cheb1ord(Wp,Ws,Rp,Rs);返回最小的阶数 n(在每一个截止频率处),通带内的波纹数不超过 Rp dB,阻带衰减至少 Rs dB。Wn是归一化截止频率,截止频率位于0~1之间,对应的频率响应等于-Rp dB。对于一个带通滤波器来说,Wn是一个包含了两个元素的向量。

    计算滤波器系数[b,a] = cheby1(n,Rp,Wn);利用归一化截止频率Wn 、通带峰-峰波纹数Rp dB 来设计一个阶数为 n的数字Chebyshev Type I 型滤波器。返回的滤波器系数向量b 和 a(z的递减幂顺序),长度均为 n+1。

    >> edit chebyband >> chebyband

  • 26

    Elliptic 方法

    计算最小的滤波器阶数[n,Wn] = ellipord(Wp,Ws,Rp,Rs);返回最小的阶数 n(在每一个截止频率处),通带内的波纹数不超过 Rp dB,阻带衰减至少Rs dB。Wn是归一化截止频率,与Chebyshev Type I 设计方法相同。

    计算滤波器系数[b,a] = ellip(n,Rp,Rs,Wn);利用截止频率Wn 、通带波纹数Rp dB 、阻带衰减值Rs dB 来设计一个阶数为 n的数字椭圆(elliptic)滤波器。返回的滤波器系数向量b 和 a(z的递减幂顺序),长度均为 n+1。

    >> edit ellipband >> ellipband

  • 27

    直接IIR设计方法[b,a] = yulewalk(n,f,m)

    返回滤波器传递函数的分子系数 b和分母系数a,长度均为n+1。该IIR滤波器的阶数为 n,幅频响应近似于向量f和m确定的数值,其中:f是频率向量,范围0~1,1表示奈奎斯特频率; m向量包含了f中所有频率点对应的幅度值。f和 m可以描述任意分段的线性幅度响应值,包括多频带响应。

  • 28

    举例:直接IIR滤波器设计设计一个 12阶的带阻滤波器,拟合下列频率响应数据:

    f = [0 0.3 0.3 0.4 0.4 0.5 0.5 0.6 0.6 1];m = [1 1 0.5 0.5 0 0 0.5 0.5 1 1];

    计算Yule-Walker 拟合和频率响应:

    [b,a] = yulewalk(12,f,m);[h,w] = freqz(b,a,128);

    绘制理想的频响图和设计出来的频响图:

    plot(f,m,'r--',w/pi,abs(h),'b-')legend('Ideal','Yule-Walker Design')title('Comparison of Response Magnitudes')

  • 29

    FIR 滤波器设计

    FIR 的主要优点:• 具有严格的线性相位

    • 总是稳定的,即使进行量化操作

    • 设计方法通常是线性的

    • 有效地进行硬件实现

    • 具有有限的启动瞬间

    FIR 滤波器的主要缺点:• 滤波器阶数高于IIR 滤波器• 较大的延时

  • 30

    FIR 设计方法

    firrcos

    cfirpm

    fircls, fircls1

    firls, firpm, firpmord

    fir1, fir2, kaiserord

    滤波器函数

    任意响应,包括非线性相位和复数滤波器

    任意响应法

    低通响应,带有平滑的、正弦波形的过渡带

    升余弦法

    减小了整个频率范围内的平方积分误差,具有最大误差限制

    受限的最小平方法

    在整个频率子带中具有等波纹和最小平方特性

    带有过渡带的多频带法

    对期望滤波器的反傅立叶变换结果进行加窗

    加窗法

    描述滤波器方法

  • 31

    加窗函数

    bartlett, barthannwin, blackman, blackmanharris, bohmanwin, chebwin, flattopwin, gausswin, hamming,hann, kaiser, parsenwin, rectwin, triang, tukeywin

    .* =

    W = gausswin(2*length(y),3);w = W(length(y)+1:end);

    y = sin(n); wy = w'.*y;

  • 32

    举例:加窗的效果比较

    edit windftwindft

  • 33

    标准频带的FIR设计fir1用于设计标准频带结构的滤波器:低通、带通、高通和带阻;

    b = fir1(n,Wn);b = fir1(n,Wn,’high’);b = fir1(n,Wn,’stop’);b = fir1(n,Wn,window);

    kaiserord函数估计滤波器阶数,返回fir1函数所需的合适的输入参数。

    edit fir1demofir1demo

  • 34

    任意响应的FIR滤波器设计b = fir2(n,f,m);

    返回 n阶FIR滤波器的行向量系数 b,长度为n+1。 幅频响应满足输入参数:向量f和向量m。

    b = fir2(n,f,m,window);

    使用的窗函数类型在列向量 window中指明。窗向量的长度必须是 n+1。如果不指明窗的类型, fir2缺省使用Hamming窗。

    edit directstop2directstop2(100)

  • 35

    多频带FIR滤波器设计b = firls(n,f,a)

    返回 n阶FIR滤波器的行向量系数 b,长度为n+1 ,该滤波器的幅频响应接近向量 f和a给出的幅频特性。

    edit firlsdemofirlsdemo

  • 36

    中值滤波

    y = medfilt1(x,n)该函数使用一个 n阶(窗的长度为n)一维中值滤波器对向量 x 进行滤波。端点以外的数值视为0。输出y的长度与x的长度相等

    中值滤波常用于噪声消除应用中

  • 37

    举例:中值滤波

    function saltysig(N)

    t = 0:.01:4*pi;x0 = sin(t);n = zeros(size(x0));noisepoints = 1:50:length(t);n(noisepoints) = 2*sign(x0(noisepoints));x = x0 + n; % Noisy signal

    subplot(3,1,1)plot(t,x)axis([0 4*pi -3 3])title('Signal with Salt and Pepper Noise')

  • 38

    举例:中值滤波

    subplot(3,1,2)b = (1/N)*ones(1,N); % Averaging filtery1 = filter(b,1,x);plot(t,y1,'r')axis([0 4*pi -3 3])title('Signal filtered with FILTER')

    subplot(3,1,3)y2 = medfilt1(x,N); % Median filterplot(t,y2,'r')axis([0 4*pi -3 3])title('Signal filtered with MEDFILT1')

    edit saltysigsaltysig(20)

  • 39

    自适应滤波器

    • 系统辨识

    • 逆系统辨识

    • 噪声消除

    • 预测

    y(n)ba

    x(n)

  • 40

    自适应滤波器方框图

    自适应滤波器x(n) y(n) e(n)

    d(n)

    +

    – ∑

    自适应算法

    Error

    期望信号

    a bd(n) – y(n)

  • 41

    自适应滤波器

    haha1. 使用 filter constructor方法来生成adaptfilt 对象:

    >> ha = adaptfilt.lms(...length,step,leakage,...coeffs,states);

    2. 使用与adaptfilt对象相关的 filter方法来对信号进行滤波:

    >> y = filter(ha,x)

    x(n) y(n)

    adaptfilt对象

  • 42

    举例:自适应滤波器

    noisyC; close all% Create signal (sw) and noisy signal (swn)

    d = sw; % Desired signalmu = 0.008; % LMS step size ha = adaptfilt.lms(32,mu); % Create adaptfilt objectya = filter(ha,swn,d); % Filter noisy signal

    edit afodemoafodemo

  • 43

    多速率滤波器

    多速率滤波器以多速率滤波器对象( mfilt)的形式实现。面向对象的滤波方法涉及到两个步骤:

    1. 使用滤波器构造器的方法来设计滤波器;>> hm = mfilt.firdecim(3)

    2. 使用与adaptfilt对象相关的filter方法来对数据进行滤波。

    >> y = filter(hm,x)

  • 44

    举例:多速率滤波器

    m = 3; % Decimation factorhm = mfilt.firdecim(m) %#ok

    STABILITY = isstable(hm) % Check to see if filter is stable,%#ok

    fvtool(hm)

    hm = mfilt.firdecim(m); % We use the default filterfs = 44.1e3; % Original sampling frequency: 44.1kHzn = 0:10239; % 10240 samples, 0.232 second signalx = sin(2*pi*1e3/fs*n); % Original signal, sinusoid at 1 KHzy = filter(hm,x); % 3413 samples, still 0.232 secondsstem(n(1:44)/fs,x(1:44)) % Plot original sampled at 44.1kHz hold on % Plot decimated signal in redstem(n(1:15)/(fs/m),y(13:27),'r','filled')xlabel('Time (sec)'); ylabel('Signal Value')legend('Original Signal', 'Decimated Signal') edit multidemo

    multidemo

  • 45

    滤波器结构• Direct-form I

    • Direct-form I, second-order sections

    • Direct-form I transposed

    • Direct-form I transposed, second-order sections

    • Direct-form II

    • Direct-form II, second-order sections

    • Direct-form II transposed

    • Direct-form II transposed, second-order sections

    • Direct-form FIR

    • Direct-form FIR

    • Direct-form symmetric FIR

    • Direct-form antisymmetric FIR

    • Overlap-add FIR

    • Lattice allpass

    • Lattice autoregressive (AR)

    • Lattice autoregressive moving-average (ARMA)

    • Lattice moving-average (MA) for maximum phase

    • Lattice moving-average (MA) for minimum phase

    • Coupled, allpass lattice

    • Coupled, allpass lattice with power complementary output

    • State-space

    • Scalar gain object

    • Filters arranged in series

    • Filters arranged in parallel

    filter缺省结构

  • 46

    FilterStructure

    >> hd = dfilt.df2t(b,a);

    >> get(hd,'FilterStructure')ans =

    Direct-Form II Transposed

    >> y = filter(hd,x); FilterStructure中的实现结构

    从系数生成dfilt对象

    hmhmhaha hdhd

    mfilt 对象adaptfilt 对象 dfilt 对象

    x x x yyy

  • 47

    举例

    hm = mfilt.firdecim(3)get(hm,'FilterStructure')

    b = fir2(12,[0 0.4 0.5 1],[1 1 0 0]);hd1 = dfilt.dffir(b)hd2 = dfilt.fftfir(b)isstable(hd1)isstable(hd2)

  • 48

    滤波器结构参考

    >> archref

    dfilt 语法

    浏览滤波器结构

  • 49

    二阶节

    ∏ ∏= =

    −−

    −−

    ++++

    ==N

    k

    N

    k kkk

    kkkk zazaa

    zbzbbgzHgzH1 1

    22

    110

    22

    110)()(

    NNNNNN aaabbb

    aaabbbaaabbb

    S

    210210

    221202221202

    211101211101

    MMMMMM=

    >> [S,g] =tf2sos(b,a) >> hds = sos(hd) signal1=sosfilt(SOS,signal);

    [b,a] = butter(8,0.25);

  • 50

    举例

    [b,a] = butter(8,0.25);hd = dfilt.df1(b,a)hd.Numeratorhd.Denominatorhds = sos(hd)hds.sosMatrix

    % sosfilt(SOS,signal);

  • 51

    Fdatool的使用

    设计滤波器,导出滤波器;

    把滤波器系数转换成其它代码:C语言的头文件;HDL代码;

    高级滤波器的设计

  • 52

    工具参考

    滤波器设计与分析工具: fdatool

    滤波器可视化工具: fvtool

    信号处理工具: sptool

    窗函数设计与分析工具: wintool

    窗函数观察工具: wvtool

  • 53

    END