2011级信息工程
基于matlab 的信号处理实例
[键入作者姓名] 2013/5/23
基于matlab 的信号处理实例
一. 实验过程
1. 读取给定的3D 加速度信号文件,绘出信号波形. 实验代码1:signalsplot.m
function [x,y,z]=signalsplot(filename) fid=fopen(filename,'r');
a=fscanf(fid,'%d,%d,%d\n');%将文件中的数据读进来,并将其赋给a fclose(fid);
len=length(a)/3;%确定循环的总次数 k=1;
for i=1:len
x(i)=a(k); %将a 中的第一列数据赋给x y(i)=a(k+1); %将a 中的第二列数据赋给y z(i)=a(k+2); %将a 中的第三列数据赋给z k=k+3; end
figure(1)
subplot(3,1,1);
plot(x,'r'),xlabel('n'),ylabel('x');
title('读取给定的3D 加速度信号文件并绘出信号波形'); subplot(3,1,2);
plot(y,'g'),xlabel('n'),ylabel('y'); subplot(3,1,3);
plot(z,'b'),xlabel('n'),ylabel('z');
函数调用1:signalsplot('C:\Users\admin\Desktop\基于matlab 的信号处理实例\run
100m_TROUSERS POCKET_1_陈佳_1.txt')
实验结果1:
读取给定的3D 加速度信号文件并绘出信号波形
200100
x
[1**********]0
n
[**************]0
400200
y
[1**********]0
n
[**************]0
400200
z
[1**********]0
n
[**************]0
2. 将读出的3D 加速度信号分解为偶序列及奇序列,分别绘出波形;绘出偶序列及奇序列的和信号、差信号及积信号的波形。 实验代码2:oddandeven.m
%将读出的3D 加速度信号分解为偶序列及奇序列,分别绘出波形; %绘出偶序列及奇序列的和信号、差信号及积信号的波形 functionoddandeven(filename) fid = fopen(filename,'r');
a=fscanf(fid,'%d,%d,%d\n');%将文件中的数据读进来,并将其赋给a fclose(fid);
len=length(a)/3;%确定循环的总次数 k=1;
for i=1:len
x(i)=a(k); %将a 中的第一列数据赋给x y(i)=a(k+1); %将a 中的第二列数据赋给y z(i)=a(k+2); %将a 中的第三列数据赋给z
k=k+3; end
x1=fliplr(x);%将x 进行反转 y1=fliplr(y);%将y 进行反转 z1=fliplr(z);%将z 进行反转
t=[-len:-1 1:len];%给出横坐标的范围,使之匹配 X1=1/2.*[x1,x];%求x 的偶部 Y1=1/2.*[y1,y];%求y 的偶部 Z1=1/2.*[z1,z];%求z 的偶部
figure(2)
subplot(3,1,1);
plot(t,X1,'r');xlabel('t'),ylabel('Evex[n]'); title('3D信号的偶信号');
subplot(3,1,2);
plot(t,Y1,'g');xlabel('t'),ylabel('Evey[n]'); subplot(3,1,3);
plot(t,Z1,'b');xlabel('t'),ylabel('Evez[n]'); X2=1/2.*[-x1,x];%求x 的奇部 Y2=1/2.*[-y1,y];%求y 的奇部 Z2=1/2.*[-z1,z];%求z 的奇部
figure(3)
subplot(3,1,1);
plot(t,X2,'r');xlabel('t'),ylabel('Oddx[n]'); title('3D信号的奇信号');
subplot(3,1,2)
plot(t,Y2,'g');xlabel('t'),ylabel('Oddy[n]'); subplot(3,1,3);
plot(t,Z2,'b');xlabel('t'),ylabel('Oddz[n]'); a1=X1+X2;%x的奇部与偶部之和 a2=Y1+Y2;%y的奇部与偶部之和
a3=Z1+Z2;%z的奇部与偶部之和
figure(4)
subplot(3,1,1);
plot(t,a1,'r');xlabel('t'),ylabel('sumx[n]'); title('奇信号与偶信号的和信号');
subplot(3,1,2)
plot(t,a2,'g');xlabel('t'),ylabel('sumy[n]'); subplot(3,1,3);
plot(t,a3,'b');xlabel('t'),ylabel('sumz[n]'); s1=X1-X2;%x的奇部与偶部之差 s2=Y1-Y2;%y的奇部与偶部之差 s3=Z1-Z2;%z的奇部与偶部之差
figure(5)
subplot(3,1,1);
plot(t,s1,'r');xlabel('t'),ylabel('decx[n]'); title('奇信号与偶信号的差信号');
subplot(3,1,2)
plot(t,s2,'g');xlabel('t'),ylabel('decy[n]'); subplot(3,1,3);
plot(t,s3,'b');xlabel('t'),ylabel('decz[n]'); m1=X1.*X2;%x的奇部与偶部之积 m2=Y1.*Y2;%y的奇部与偶部之积 m3=Z1.*Z2;%z的奇部与偶部之积
figure(5)
subplot(3,1,1);
plot(t,m1,'r');xlabel('t'),ylabel('mulx[n]'); title('奇信号与偶信号的积信号');
subplot(3,1,2)
plot(t,m2,'g');xlabel('t'),ylabel('muly[n]'); subplot(3,1,3);
plot(t,m3,'b');xlabel('t'),ylabel('mulz[n]');
函数调用2:oddandeven('C:\Users\admin\Desktop\基于
\run 100m_TROUSERS POCKET_1_陈佳_1.txt')
matlab 的信号处理实例
实验结果2:
3D 信号的偶信号
100
E v e x [n ]
50
0-4000200
-3000-2000-1000
0t
[**************]0
E v e y [n ]
100
0-4000200
-3000-2000-1000
0t
[**************]0
E v e z [n ]
100
0-4000
-3000-2000-1000
0t
[**************]0
3D 信号的奇信号
100
O d d x [n ]
-100-4000200
-3000-2000-1000
0t
[**************]0
O d d y [n ]
-200-4000200
-3000-2000-1000
0t
[**************]0
O d d z [n ]
-200-4000
-3000-2000-1000
0t
[**************]0
奇信号与偶信号的和信号
200
s u m x [n ]
100
0-4000400
-3000-2000-1000
0t
[**************]0
s u m y [n ]
200
0-4000400
-3000-2000-1000
0t
[**************]0
s u m z [n ]
200
0-4000
-3000-2000-1000
0t
[**************]0
奇信号与偶信号的差信号
200
d e c x [n ]
100
0-4000400
-3000-2000-1000
0t
[**************]0
d e c y [n ]
200
0-4000400
-3000-2000-1000
0t
[**************]0
d e c z [n ]
200
0-4000
-3000-2000-1000
0t
[**************]0
1
x 10
4
奇信号与偶信号的积信号
m u l x [n ]
0-1-4000x 10
4
-3000-2000-1000
0t
[**************]0
2
m u l y [n ]
0-2-4000x 10
4
-3000-2000-1000
0t
[**************]0
2
m u l z [n ]
0-2-4000
-3000
-2000
-1000
0t
1000
2000
3000
4000
3. 画出M 点滑动平均滤波器的波形(M 分别取4和10)。 注:M 点滑动平均滤波器: 实验代码3:the_filter.m
function [h]=the_filter(m)%画出M 点滑动平均滤波器的波形 a=(1/m).*ones(1,m);%x的系数 b=[1,0,0]; %y的系数
h=impz(a,b,20); %求系统的单位冲激响应 figure(7)
stem(h,'y','filled'); %将单位冲激响应画出 xlabel('n'),ylabel('h[n]');
title('M点的滑动平均滤波器的单位冲激响应图');
y [n ]=
1
M
x [n ∑k
=0
M -1
-k ]
函数调用3.1:the_filter(4) 实验结果3.1:
M 点的滑动平均滤波器的单位冲激响应图
0.25
0.2
0.15
h [n ]
0.10.050
n
函数调用3.2:the_filter(10) 实验结果3.2
M 点的滑动平均滤波器的单位冲激响应图
0.10.090.080.070.06
h [n ]
0.050.040.030.020.010n
4. 用上述滑动平均滤波器对输入的3D 加速度信号进行滤波,同时绘出输入及输出信号波形;观察分析输出波形的变化。 实验代码4:smooth.m
function smooth(m)%用滑动平均滤波器对输入的3D 加速度信号进行滤波 h=the_filter(m);
[x,y,z]=signalsplot('C:\Users\admin\Desktop\基于matlab 的信号处理实例\run 100m_TROUSERS POCKET_1_陈佳_1.txt') figure(8);
f1=conv(x,h);%用滑动平均滤波器对输入的3D 加速度信号x 进行滤波 subplot(3,1,1);
plot(f1,'g');xlabel('n'),ylabel('f1=x*h'); title('3D加速度信号通过滤波器后的信号图形');
f2=conv(y,h);%用滑动平均滤波器对输入的3D 加速度信号y 进行滤波 subplot(3,1,2);
plot(f2,'r');xlabel('n'),ylabel('f2=y*h');
f3=conv(z,h);%用滑动平均滤波器对输入的3D 加速度信号z 进行滤波 subplot(3,1,3);
plot(f3,'b');xlabel('n'),ylabel('f3=z*h');
函数调用4.1:smooth (4) 实验结果4.1:
3D 加速度信号通过滤波器后的信号图形
200
f 1=x *h
100
[1**********]0
n
[**************]0
400
f 2=y *h
200
[1**********]0
n
[**************]0
200
f 3=z *h
100
[1**********]0
n
[**************]0
函数调用4.2:smooth (10) 实验结果4.2:
3D 加速度信号通过滤波器后的信号图形
200
f 1=x *h
100
[1**********]0
n
[**************]0
400
f 2=y *h
200
[1**********]0
n
[**************]0
200
f 3=z *h
100
[1**********]0
n
[**************]0
实验结果分析:
通过两幅图的对比可知:当M 越大时,所滤波后的图形越平滑。
2011级信息工程
基于matlab 的信号处理实例
[键入作者姓名] 2013/5/23
基于matlab 的信号处理实例
一. 实验过程
1. 读取给定的3D 加速度信号文件,绘出信号波形. 实验代码1:signalsplot.m
function [x,y,z]=signalsplot(filename) fid=fopen(filename,'r');
a=fscanf(fid,'%d,%d,%d\n');%将文件中的数据读进来,并将其赋给a fclose(fid);
len=length(a)/3;%确定循环的总次数 k=1;
for i=1:len
x(i)=a(k); %将a 中的第一列数据赋给x y(i)=a(k+1); %将a 中的第二列数据赋给y z(i)=a(k+2); %将a 中的第三列数据赋给z k=k+3; end
figure(1)
subplot(3,1,1);
plot(x,'r'),xlabel('n'),ylabel('x');
title('读取给定的3D 加速度信号文件并绘出信号波形'); subplot(3,1,2);
plot(y,'g'),xlabel('n'),ylabel('y'); subplot(3,1,3);
plot(z,'b'),xlabel('n'),ylabel('z');
函数调用1:signalsplot('C:\Users\admin\Desktop\基于matlab 的信号处理实例\run
100m_TROUSERS POCKET_1_陈佳_1.txt')
实验结果1:
读取给定的3D 加速度信号文件并绘出信号波形
200100
x
[1**********]0
n
[**************]0
400200
y
[1**********]0
n
[**************]0
400200
z
[1**********]0
n
[**************]0
2. 将读出的3D 加速度信号分解为偶序列及奇序列,分别绘出波形;绘出偶序列及奇序列的和信号、差信号及积信号的波形。 实验代码2:oddandeven.m
%将读出的3D 加速度信号分解为偶序列及奇序列,分别绘出波形; %绘出偶序列及奇序列的和信号、差信号及积信号的波形 functionoddandeven(filename) fid = fopen(filename,'r');
a=fscanf(fid,'%d,%d,%d\n');%将文件中的数据读进来,并将其赋给a fclose(fid);
len=length(a)/3;%确定循环的总次数 k=1;
for i=1:len
x(i)=a(k); %将a 中的第一列数据赋给x y(i)=a(k+1); %将a 中的第二列数据赋给y z(i)=a(k+2); %将a 中的第三列数据赋给z
k=k+3; end
x1=fliplr(x);%将x 进行反转 y1=fliplr(y);%将y 进行反转 z1=fliplr(z);%将z 进行反转
t=[-len:-1 1:len];%给出横坐标的范围,使之匹配 X1=1/2.*[x1,x];%求x 的偶部 Y1=1/2.*[y1,y];%求y 的偶部 Z1=1/2.*[z1,z];%求z 的偶部
figure(2)
subplot(3,1,1);
plot(t,X1,'r');xlabel('t'),ylabel('Evex[n]'); title('3D信号的偶信号');
subplot(3,1,2);
plot(t,Y1,'g');xlabel('t'),ylabel('Evey[n]'); subplot(3,1,3);
plot(t,Z1,'b');xlabel('t'),ylabel('Evez[n]'); X2=1/2.*[-x1,x];%求x 的奇部 Y2=1/2.*[-y1,y];%求y 的奇部 Z2=1/2.*[-z1,z];%求z 的奇部
figure(3)
subplot(3,1,1);
plot(t,X2,'r');xlabel('t'),ylabel('Oddx[n]'); title('3D信号的奇信号');
subplot(3,1,2)
plot(t,Y2,'g');xlabel('t'),ylabel('Oddy[n]'); subplot(3,1,3);
plot(t,Z2,'b');xlabel('t'),ylabel('Oddz[n]'); a1=X1+X2;%x的奇部与偶部之和 a2=Y1+Y2;%y的奇部与偶部之和
a3=Z1+Z2;%z的奇部与偶部之和
figure(4)
subplot(3,1,1);
plot(t,a1,'r');xlabel('t'),ylabel('sumx[n]'); title('奇信号与偶信号的和信号');
subplot(3,1,2)
plot(t,a2,'g');xlabel('t'),ylabel('sumy[n]'); subplot(3,1,3);
plot(t,a3,'b');xlabel('t'),ylabel('sumz[n]'); s1=X1-X2;%x的奇部与偶部之差 s2=Y1-Y2;%y的奇部与偶部之差 s3=Z1-Z2;%z的奇部与偶部之差
figure(5)
subplot(3,1,1);
plot(t,s1,'r');xlabel('t'),ylabel('decx[n]'); title('奇信号与偶信号的差信号');
subplot(3,1,2)
plot(t,s2,'g');xlabel('t'),ylabel('decy[n]'); subplot(3,1,3);
plot(t,s3,'b');xlabel('t'),ylabel('decz[n]'); m1=X1.*X2;%x的奇部与偶部之积 m2=Y1.*Y2;%y的奇部与偶部之积 m3=Z1.*Z2;%z的奇部与偶部之积
figure(5)
subplot(3,1,1);
plot(t,m1,'r');xlabel('t'),ylabel('mulx[n]'); title('奇信号与偶信号的积信号');
subplot(3,1,2)
plot(t,m2,'g');xlabel('t'),ylabel('muly[n]'); subplot(3,1,3);
plot(t,m3,'b');xlabel('t'),ylabel('mulz[n]');
函数调用2:oddandeven('C:\Users\admin\Desktop\基于
\run 100m_TROUSERS POCKET_1_陈佳_1.txt')
matlab 的信号处理实例
实验结果2:
3D 信号的偶信号
100
E v e x [n ]
50
0-4000200
-3000-2000-1000
0t
[**************]0
E v e y [n ]
100
0-4000200
-3000-2000-1000
0t
[**************]0
E v e z [n ]
100
0-4000
-3000-2000-1000
0t
[**************]0
3D 信号的奇信号
100
O d d x [n ]
-100-4000200
-3000-2000-1000
0t
[**************]0
O d d y [n ]
-200-4000200
-3000-2000-1000
0t
[**************]0
O d d z [n ]
-200-4000
-3000-2000-1000
0t
[**************]0
奇信号与偶信号的和信号
200
s u m x [n ]
100
0-4000400
-3000-2000-1000
0t
[**************]0
s u m y [n ]
200
0-4000400
-3000-2000-1000
0t
[**************]0
s u m z [n ]
200
0-4000
-3000-2000-1000
0t
[**************]0
奇信号与偶信号的差信号
200
d e c x [n ]
100
0-4000400
-3000-2000-1000
0t
[**************]0
d e c y [n ]
200
0-4000400
-3000-2000-1000
0t
[**************]0
d e c z [n ]
200
0-4000
-3000-2000-1000
0t
[**************]0
1
x 10
4
奇信号与偶信号的积信号
m u l x [n ]
0-1-4000x 10
4
-3000-2000-1000
0t
[**************]0
2
m u l y [n ]
0-2-4000x 10
4
-3000-2000-1000
0t
[**************]0
2
m u l z [n ]
0-2-4000
-3000
-2000
-1000
0t
1000
2000
3000
4000
3. 画出M 点滑动平均滤波器的波形(M 分别取4和10)。 注:M 点滑动平均滤波器: 实验代码3:the_filter.m
function [h]=the_filter(m)%画出M 点滑动平均滤波器的波形 a=(1/m).*ones(1,m);%x的系数 b=[1,0,0]; %y的系数
h=impz(a,b,20); %求系统的单位冲激响应 figure(7)
stem(h,'y','filled'); %将单位冲激响应画出 xlabel('n'),ylabel('h[n]');
title('M点的滑动平均滤波器的单位冲激响应图');
y [n ]=
1
M
x [n ∑k
=0
M -1
-k ]
函数调用3.1:the_filter(4) 实验结果3.1:
M 点的滑动平均滤波器的单位冲激响应图
0.25
0.2
0.15
h [n ]
0.10.050
n
函数调用3.2:the_filter(10) 实验结果3.2
M 点的滑动平均滤波器的单位冲激响应图
0.10.090.080.070.06
h [n ]
0.050.040.030.020.010n
4. 用上述滑动平均滤波器对输入的3D 加速度信号进行滤波,同时绘出输入及输出信号波形;观察分析输出波形的变化。 实验代码4:smooth.m
function smooth(m)%用滑动平均滤波器对输入的3D 加速度信号进行滤波 h=the_filter(m);
[x,y,z]=signalsplot('C:\Users\admin\Desktop\基于matlab 的信号处理实例\run 100m_TROUSERS POCKET_1_陈佳_1.txt') figure(8);
f1=conv(x,h);%用滑动平均滤波器对输入的3D 加速度信号x 进行滤波 subplot(3,1,1);
plot(f1,'g');xlabel('n'),ylabel('f1=x*h'); title('3D加速度信号通过滤波器后的信号图形');
f2=conv(y,h);%用滑动平均滤波器对输入的3D 加速度信号y 进行滤波 subplot(3,1,2);
plot(f2,'r');xlabel('n'),ylabel('f2=y*h');
f3=conv(z,h);%用滑动平均滤波器对输入的3D 加速度信号z 进行滤波 subplot(3,1,3);
plot(f3,'b');xlabel('n'),ylabel('f3=z*h');
函数调用4.1:smooth (4) 实验结果4.1:
3D 加速度信号通过滤波器后的信号图形
200
f 1=x *h
100
[1**********]0
n
[**************]0
400
f 2=y *h
200
[1**********]0
n
[**************]0
200
f 3=z *h
100
[1**********]0
n
[**************]0
函数调用4.2:smooth (10) 实验结果4.2:
3D 加速度信号通过滤波器后的信号图形
200
f 1=x *h
100
[1**********]0
n
[**************]0
400
f 2=y *h
200
[1**********]0
n
[**************]0
200
f 3=z *h
100
[1**********]0
n
[**************]0
实验结果分析:
通过两幅图的对比可知:当M 越大时,所滤波后的图形越平滑。