hlayumi的个人空间 https://blog.eetop.cn/hslogic [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

EMG随机信号的产生

已有 14388 次阅读| 2017-10-31 15:19 |系统分类:硬件设计

这里按照题目的基本要求讲解设计流程。

首先通过matlab自带的函数randn函数参数随机数,这里采用基于系统时钟的随机数种子,在matlab中使用的代码语句为:

RandStream.setDefaultStream(RandStream('mt19937ar','seed',sum(100*clock)));

这里使用了RandStream命令实现随机数种子的产生,其中sum(100*clock)为获取系统的时钟,这里如果需要每次产生固定的随机数,只需要将clock修改为一个固定的值就可以了。在完成这个语句之后,执行:

y1 = randn([N,1]);

    为了设计需要,这里还需要对输入的信号进行FFT变换,对于FFT,主要使用MATLAB的自带函数fft进行分析,matlab的代码如下所示:

fy1 = fft(y1,NFFT);

f = fs/2*linspace(0,1,NFFT/2+1);

subplot(322);

plot(f,abs(fy1(1:NFFT/2+1)));

title('Single-Sided Amplitude Spectrum of y(t)')

xlabel('Frequency (Hz)')

ylabel('|Y(f)|')

grid on;

axis([0,NFFT/2,1.2*min(abs(fy1)),1.2*max(abs(fy1))]);

从仿真结果如下所示,随机产生的EMG信号,其频谱图在频域上的各个频率点的都有分布。

function  [EMG_vector60,EMG_vector]=emg_sim(times,power_line_interference);
%times                  :仿真时间
%power_line_interference:电力线路干扰值
%EMG_vector60           :包含60hz干扰
%EMG_vector             :滤掉60hz干扰


%参数初始化
fs = 2048;    %采样频率
N  = times*fs;%采样点数
%first产生一个随机数向量
RandStream.setDefaultStream(RandStream('mt19937ar','seed',sum(100*clock)));
y1 = randn([N,1]);

figure;
subplot(321);plot(y1,'b');title('an independent, zero-mean, Gaussian random vector');
xlabel('simulation times');
ylabel('amplititude');
grid on;
axis([0,N,1.2*min(y1),1.2*max(y1)]);
NFFT = N; 
fy1 = fft(y1,NFFT);
f = fs/2*linspace(0,1,NFFT/2+1);
subplot(322);
plot(f,abs(fy1(1:NFFT/2+1))); 
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
grid on;
axis([0,NFFT/2,1.2*min(abs(fy1)),1.2*max(abs(fy1))]);


%second通过一个巴特沃斯滤波器
%分别为通带截止频率和阻带截止频率 
Wp=21/150;%cut-off:150hz
Ws=40/150;
Rp=1;   %通带最大衰减Rp=3dB;
As=120; %阻带最小衰减As=60              
[n,Wn]=buttord(Wp,Ws, Rp,As);    
[b, a]=butter(n,Wn,'low');                     
%进行滤波
y2=filter(b,a,y1); 
y2=y2*abs(max(y1))/abs(max(y2));
 
subplot(323);plot(y2,'b');title('after filter');
xlabel('simulation times');
ylabel('amplititude');
grid on;
axis([0,N,1.2*min(y2),1.2*max(y2)]);
NFFT = N; 
fy2 = fft(y2,NFFT);
f = fs/2*linspace(0,1,NFFT/2+1);
subplot(324);
plot(f,abs(fy2(1:NFFT/2+1)));hold on;
plot(150,0:1:1000,'r');
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
grid on;
axis([0,NFFT/2,1.2*min(abs(fy2)),1.2*max(abs(fy2))]);

EMG_vector=y2;

%加入一个60hz的sin
f_sin=60;
t=1/f_sin/(N/f_sin) : 1/f_sin/(N/f_sin) : N/f_sin/(N/f_sin);
y_sin=power_line_interference*sin(2*pi*f_sin*t);
y3=y2+y_sin';
subplot(325);plot(y3);title('Add sin_600Hz');
grid on;
axis([0,N,1.2*min(y3),1.2*max(y3)]);
NFFT = N; 
fy3 = fft(y3,NFFT);
f = fs/2*linspace(0,1,NFFT/2+1);
subplot(326);plot(f,abs(fy3(1:NFFT/2+1))) 
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
grid on;
axis([0,NFFT/2,1.2*min(abs(fy3)),1.2*max(abs(fy3))]);

EMG_vector60=y3;


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 5

    粉丝
  • 0

    好友
  • 1

    获赞
  • 16

    评论
  • 5260

    访问数
关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-24 14:11 , Processed in 0.014205 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部