资源描述
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:
2. 将读出的3D加速度信号分解为偶序列及奇序列,分别绘出波形;绘出偶序列及奇序列的和信号、差信号及积信号的波形。
实验代码2:oddandeven.m
%将读出的3D加速度信号分解为偶序列及奇序列,分别绘出波形;
%绘出偶序列及奇序列的和信号、差信号及积信号的波形
function oddandeven(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\基于matlab的信号处理实例\run 100m_TROUSERS POCKET_1_陈佳_1.txt')
实验结果2:
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点的滑动平均滤波器的单位冲激响应图');
函数调用3.1:the_filter(4)
实验结果3.1:
函数调用3.2:the_filter(10)
实验结果3.2
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:
函数调用4.2:smooth(10)
实验结果4.2:
实验结果分析:
通过两幅图的对比可知:当M越大时,所滤波后的图形越平滑。
10
展开阅读全文