MATLAB 下的数字信号处理实现示例
附录一 信号、系统和系统响应
1、理想采样信号序列
(1)首先产生信号x(n),0<=n<=50
n=0:50; %定义序列的长度是50
A=444.128; %设置信号有关的参数
a=50*sqrt(2.0)*pi;
T=0.001; %采样率
w0=50*sqrt(2.0)*pi;
x=A*exp(-a*n*T).*sin(w0*n*T); %pi 是MATLAB 定义的π,信号乘可采用“.*” close all %清除已经绘制的x(n)图形
subplot(3,1,1);stem(x); %绘制x(n)的图形
title(‘理想采样信号序列’);
(2)绘制信号x(n)的幅度谱和相位谱
k=-25:25;
W=(pi/12.5)*k;
X=x*(exp(-j*pi/12.5)).^(n’*k);
magX=abs(X); %绘制x(n)的幅度谱
subplot(3,1,2);stem(magX);title(‘理想采样信号序列的幅度谱’);
angX=angle(X); %绘制x(n)的相位谱
subplot(3,1,3);stem(angX) ; title (‘理想采样信号序列的相位谱’)
(3)改变参数为:1,0734.2,4.0,10==Ω==T A α
n=0:50; %定义序列的长度是50
A=1; %设置信号有关的参数
a=0.4;
T=1; %采样率
w0=2.0734;
x=A*exp(-a*n*T).*sin(w0*n*T); %pi 是MATLAB 定义的π,信号乘可采用“.*” close all %清除已经绘制的x(n)图形
subplot(3,1,1);stem(x); %绘制x(n)的图形
title(‘理想采样信号序列’);
k=-25:25;
W=(pi/12.5)*k;
X=x*(exp(-j*pi/12.5)).^(n’*k);
magX=abs(X); %绘制x(n)的幅度谱
subplot(3,1,2);stem(magX);title(‘理想采样信号序列的幅度谱’);
angX=angle(X); %绘制x(n)的相位谱
subplot(3,1,3);stem(angX) ; title (‘理想采样信号序列的相位谱’)
2、单位脉冲序列
在MatLab 中,这一函数可以用zeros 函数实现:
n=1:50; %定义序列的长度是50
x=zeros(1,50); %注意:MATLAB 中数组下标从1开始
x(1)=1;
close all;
subplot(3,1,1);stem(x);title(‘单位冲击信号序列’);
k=-25:25;
X=x*(exp(-j*pi/12.5)).^(n’*k);
magX=abs(X); %绘制x(n)的幅度谱
subplot(3,1,2);stem(magX);title(‘单位冲击信号的幅度谱’);
angX=angle(X); %绘制x(n)的相位谱
subplot(3,1,3);stem(angX) ; title (‘单位冲击信号的相位谱’)
3、矩形序列
n=1:50
x=sign(sign(10-n)+1);
close all;
subplot(3,1,1);stem(x);title(‘单位冲击信号序列’);
k=-25:25;
X=x*(exp(-j*pi/25)).^(n’*k);
magX=abs(X); %绘制x(n)的幅度谱
subplot(3,1,2);stem(magX);title(‘单位冲击信号的幅度谱’);
angX=angle(X); %绘制x(n)的相位谱
subplot(3,1,3);stem(angX) ; title (‘单位冲击信号的相位谱’)
4、特定冲击串:)3()2(5.2)1(5.2)()(−+−+−+=n n n n n x δδδδ
n=1:50; %定义序列的长度是50
x=zeros(1,50); %注意:MATLAB 中数组下标从1开始
x(1)=1;x(2)=2.5;x(3)=2.5;x(4)=1;
close all;
subplot(3,1,1);stem(x);title(‘单位冲击信号序列’);
k=-25:25;
X=x*(exp(-j*pi/12.5)).^(n’*k);
magX=abs(X); %绘制x(n)的幅度谱
subplot(3,1,2);stem(magX);title(‘单位冲击信号的幅度谱’);
angX=angle(X); %绘制x(n)的相位谱
subplot(3,1,3);stem(angX) ; title (‘单位冲击信号的相位谱’)
5、卷积计算: ∑+∞
−∞=−=
∗=m m n h m x n h n x n y )()()()()(
在MATLAB 中。提供了卷积函数conv ,即y=conv(x,h),调用十分方便。例如: 系统:)3()2(5.2)1(5.2)()(−+−+−+=n n n n n h b δδδδ
信号:
500),sin()(0<≤Ω=−n nT Ae t x nT a αn=1:50; %定义序列的长度是50
hb=zeros(1,50); %注意:MATLAB 中数组下标从1开始 hb(1)=1;hb(2)=2.5;hb(3)=2.5;hb(4)=1;
close all;
subplot(3,1,1);stem(hb);title(‘系统hb[n]’);
m=1:50; %定义序列的长度是50
A=444.128; %设置信号有关的参数
a=50*sqrt(2.0)*pi;
T=0.001; %采样率
w0=50*sqrt(2.0)*pi;
x=A*exp(-a*m*T).*sin(w0*m*T); %pi 是MATLAB 定义的π,信号乘可采用“.*” subplot(3,1,2);stem(x);title(‘输入信号x[n]’);
y=conv(x,hb);
subplot(3,1,3);stem(y);title(‘输出信号y[n]’);
6、卷积定律验证
k=-25:25;
X=x*(exp(-j*pi/12.5)).^(n’*k);
magX=abs(X); %绘制x(n)的幅度谱
subplot(3,2,1);stem(magX);title(‘输入信号的幅度谱’);
angX=angle(X); %绘制x(n)的相位谱
subplot(3,2,2);stem(angX) ; title (‘输入信号的相位谱’)
Hb=hb*(exp(-j*pi/12.5)).^(n’*k);
magHb=abs(Hb); %绘制hb(n)的幅度谱
subplot(3,2,3);stem(magHb);title(‘系统响应的幅度谱’);
angHb=angle(Hb); %绘制hb(n)的相位谱
subplot(3,2,4);stem(angHb) ; title (‘系统响应的相位谱’)
n=1:99;
k=1:99;
Y=y*(exp(-j*pi/12.5)).^(n’*k);
magY=abs(Y); %绘制y(n)的幅度谱
subplot(3,2,5);stem(magY);title(‘输出信号的幅度谱’);
angY=angle(Y); %绘制y(n)的相位谱
subplot(3,2,6);stem(angY) ; title (‘输出信号的相位谱’)
%以下将验证的结果显示
XHb=X.*Hb;
Subplot(2,1,1);stem(abs(XHb));title(‘x(n)的幅度谱与hb(n)幅度谱相乘’);
Subplot(2,1,2);stem(abs(Y);title(‘y(n)的幅度谱’); axis([0,60,0,8000])
附录二 用FFT 进行信号的频谱分析
1、高斯序列: ⎪⎩
⎪⎨⎧≤≤=−−else n e
n x q p n a ,0150,)(2
)
( n=0:15; %定义序列的长度是15
p=8;q=2;
x=exp(-1*(n-p).^2/q);
close all;
subplot(3,1,1);
stem(abs(fft(x)))
p=8;q=4;
x=exp(-1*(n-p).^2/q);
subplot(3,1,2);
stem(abs(fft(x)))
p=8;q=8;
x=exp(-1*(n-p).^2/q);
subplot(3,1,3);
stem(abs(fft(x)))
2、衰减正弦序列: ⎩
⎨⎧≤≤=−else n fn e n x n b ,0150,2sin )(παn=0:15; %定义序列的长度是15
a=0.1;f=0.0625;
x=exp(-a*n).*sin(2*pi*f*n);
close all;
subplot(2,1,1);
stem(x);
subplot(2,1,2);
stem(abs(fft(x)))
3、三角波序列:
⎪⎩
⎪⎨⎧≤≤−≤≤+=else n n n n n x c ,074,830,1)(
matlab傅里叶变换的幅度谱和相位谱
for i=0:3
x(i)=i+1;x(i+4)=8-(i+4);
end
for i=8:15
x(i)=0;
end
close all;
subplot(2,1,1);
stem(x);
subplot(2,1,2);
stem(abs(fft(x,16)))
4、反三角序列:
⎪⎩
⎪⎨⎧≤≤−≤≤−=else n n n n n x d ,074,330,4)(
附录三 窗函数法设计FIR 滤波器
一、在MATLAB 中产生窗函数十分简单:
(1)矩形窗(Rectangle Window )
调用格式:w=boxcar(n),根据长度n 产生一个矩形窗w 。
(2)三角窗(Triangular Window )
调用格式:w=triang(n) ,根据长度n 产生一个三角窗w 。
(3)汉宁窗(Hanning Window )
调用格式:w=hanning(n) ,根据长度n 产生一个汉宁窗w 。
(4)海明窗(Hamming Window )
调用格式:w=hamming(n) ,根据长度n 产生一个海明窗w 。
(5)布拉克曼窗(Blackman Window )
调用格式:w=blackman(n) ,根据长度n 产生一个布拉克曼窗w 。
(6)恺撒窗(Kaiser Window )
调用格式:w=kaiser(n,beta) ,根据长度n 和影响窗函数旁瓣的β参数产生一个恺撒窗w 。
二、基于窗函数的FIR 滤波器设计
利用MATLAB 提供的函数firl 来实现
调用格式:firl (n,Wn,’ftype’,Window),n 为阶数、Wn 是截止频率(如果输入是形如[W1 W2]的矢量时,本函数将设计带通滤波器,其通带为W1<ω<W2)、ftype 是滤波器的类型(低通-省略该参数、高通-ftype=high 、带阻-ftype=stop )、Window 是窗函数。
[例] 设计一个长度为8的线性相位FIR 滤波器。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论