心跳的声音采集设备用什么样的设备采集呢

用什么象声词来形容心跳声?_百度知道
用什么象声词来形容心跳声?
我有更好的答案
采纳率:71%
来自团队:
咚咚地,不过我想三个字肯定说字数不够,我就是来凑够字的。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。心跳数据采集及简单处理-黄
日期:日—日
1.本周已完成任务:心跳数据采集及简单处理
2.本周未完成任务:使用摄像头读出具体的心跳数
3.下周计划:使用FFT读出具体心跳
4.关键技术点说明:
由上一个博客里面的代码改编得来,基本上就是对读出来的波形进行了FIR滤波,滤除高频以及低频成分,以及一些简单的数据处理,获得幅度比较大的心跳信号。
FIR的参数使用MATLAB计算,采样率5Hz 带通0.6-1.5Hz,而函数是DSP直接抄过来的。
以下 是代码以及注释
package com.example.
import android.app.A
import android.content.pm.ActivityI
import android.graphics.C
import android.graphics.C
import android.graphics.P
import android.graphics.R
import android.hardware.C
import android.hardware.Camera.PreviewC
import android.os.B
import android.os.H
import android.os.M
import android.util.DisplayM
import android.util.L
import android.view.SurfaceH
import android.view.SurfaceV
import android.widget.TextV
public class MainActivity extends Activity {
TextView heart_
SurfaceView showDataSurfaceView=
SurfaceHolder mSurfaceHolder=
SurfaceView data_view=
SurfaceHolder mdataviewHolder =
int centerY;//中心线
int oldX=0;
int oldY=200;//上一个XY 点
int newX=0;
int newY=200;
int currentX;//当前绘制到的X 轴上的点
int ScreenW
int length=0;
private static String msg = "";
int sigIn[] =//FIR输入数据
int sigout[] =//FIR输出数据
int FIR16_LPF_TEST[] =//FIR滤波系数,通过matlab计算获取
int count = 0;
private static Camera camera =
private static SurfaceView preview =
private static SurfaceHolder previewHolder =
@SuppressWarnings("deprecation")
protected void onCreate(Bundle savedInstanceState) {
super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
heart_display = (TextView)findViewById(R.id.textView2);
preview = (SurfaceView)findViewById(R.id.preview);
previewHolder = preview.getHolder();//获得SurfaceHolder对象
previewHolder.addCallback(surfaceCallback);//添加回调函数
previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
showDataSurfaceView=(SurfaceView)findViewById(R.id.showView);
mSurfaceHolder=showDataSurfaceView.getHolder();
dm = new DisplayMetrics();//DisplayMetrics用来获取屏幕的分辨率,打点打到结束后返回0
getWindowManager().getDefaultDisplay().getMetrics(dm);
ScreenWidth=dm.widthP//屏幕的横向分辨率
sigIn = new int[128];
sigout = new int[128];
//FIR滤波系数 采样率5Hz 带通0.6-1.5Hz
FIR16_LPF_TEST = new int[] { , -676, 1249, -501, -8175,
-, 10240, -4413, -8175, -501, 1249, -676,
data_view = (SurfaceView)findViewById(R.id.dataview);//数据处理后的数据显示
mdataviewHolder = data_view.getHolder();
handler.post(runnable);
void drawline()//画线(点)
//获取Canvas,锁定画布
Canvas canvas = mSurfaceHolder.lockCanvas(new Rect(oldX, 0, newX,dm.heightPixels));
Paint mPaint=new Paint();
mPaint.setColor(Color.GREEN);//设定为绿色
mPaint.setStrokeWidth(1);//线宽为1像素
canvas.drawLine(oldX, oldY, newX, newY, mPaint);//Canvas绘画
oldX=newX;
oldY=newY;
mSurfaceHolder.unlockCanvasAndPost(canvas);//结束锁定画图,并提交改变,将图形显示
// Handler handler = new Handler();//测试定时器,这个程序暂时用不到
// Runnable runnable = new Runnable() {
public void run() {
heart_display.setText(String.valueOf("102"));
handler.postDelayed(runnable, 500);// 0.5秒刷新
int oldX1 = 0, oldY1 = 0;
void drawline_fir()// 画线(点)用于显示数据
oldX1 = 0;
Canvas canvas = mdataviewHolder.lockCanvas();
canvas.drawColor(Color.BLACK);// 清除画布
Paint mPaint = new Paint();
mPaint.setColor(Color.RED);//设定为红色
mPaint.setStrokeWidth(1);// 线宽为1像素
for (int i = 0; i & 128; i++) {
y = sigout[i];
canvas.drawLine(oldX1, oldY1, i, y, mPaint);// Canvas绘画
mdataviewHolder.unlockCanvasAndPost(canvas);// 结束锁定画图,并提交改变,将图形显示
void ClearDraw() //清除画布
Canvas canvas = mSurfaceHolder.lockCanvas();
canvas.drawColor(Color.BLACK);// 清除画布
mSurfaceHolder.unlockCanvasAndPost(canvas);
private Handler DrawHandler = new Handler() //画图Handler
public void handleMessage(Message m)
drawline();
currentX++;
newY=Integer.valueOf(msg,10);//根据msg的值来确定当前的Y坐标
Log.d("chenxuro", msg);
if(newX==ScreenWidth-1)//当X坐标超过屏幕横向分辨率的时候清除屏幕,然后返回0
ClearDraw();
currentX=0;
private SurfaceHolder.Callback surfaceCallback=new SurfaceHolder.Callback() //SurfaceView回调函数
public void surfaceCreated(SurfaceHolder holder)
camera.setPreviewDisplay(previewHolder);//将camera连接到一个SurfaceView,准备实时预览
camera.setPreviewCallback(previewCallback);//添加回调函数
catch (Throwable t)
Log.e("PreviewDemo-surfaceCallback", "Exception in setPreviewDisplay()", t);
@SuppressWarnings("deprecation")
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
Camera.Parameters parameters = camera.getParameters();//获取camera界限
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);//打开闪光灯
Camera.Size size = getSmallestPreviewSize(width, height, parameters);//得到最小尺寸预览
if (size!=null) //设置预览大小
parameters.setPreviewSize(size.width, size.height);
parameters.setPreviewFrameRate(5);//每秒5帧
Log.d("parameters", "Using width="+size.width+" height="+size.height);
camera.setParameters(parameters);//设置camera界限
camera.startPreview();//开始预览
public void surfaceDestroyed(SurfaceHolder holder)
//Ignore???
//android.os.Process.killProcess(android.os.Process.myPid());
private PreviewCallback previewCallback = new PreviewCallback() //摄像头回调
public void onPreviewFrame(byte[] data, Camera cam) //摄像头帧预览
if (data == null)
throw new NullPointerException();
Camera.Size size = cam.getParameters().getPreviewSize();
if (size == null)
throw new NullPointerException();
//关闭摄像头预览回调
camera.setPreviewCallback(null);
int previewWidth=0;
int previewHeight=0;
if (data != null) //获取预览图片的信息
previewWidth = camera.getParameters().getPreviewSize().
previewHeight = camera.getParameters().getPreviewSize().
int CurrentRedSum=decodeYUV420SPtoRedSum(data, previewWidth, previewHeight);
int CurrentRedAverage=CurrentRedSum/(previewWidth * previewHeight);
if (count == 128)//数据滑窗
count = 0;
//获得红色部分数据,进行缩小处理防止溢出
sigIn[count++] = CurrentRedSum*10/(previewWidth * previewHeight);
sigIn[count++] = CurrentRedA
fir(sigIn,FIR16_LPF_TEST,sigout);//调用FIR滤波函数
drawline_fir();//显示滤波后的数据
= String.valueOf(CurrentRedAverage);//获取红色部分平均的数据
DrawHandler.sendEmptyMessage(0);//启动绘图
//打开摄像头预览回调
camera.setPreviewCallback(this);
private static Camera.Size getSmallestPreviewSize(int width, int height, Camera.Parameters parameters)
Camera.Size result=
for (Camera.Size size : parameters.getSupportedPreviewSizes())
if (size.width&=width && size.height&=height)
if (result==null)
int resultArea=result.width*result.
int newArea=size.width*size.
if (newArea&resultArea)
public void onResume()
super.onResume();
camera = Camera.open();//打开摄像头
camera.setDisplayOrientation(90);
public void onPause()
super.onPause();
camera.setPreviewCallback(null);
camera.stopPreview();//停止摄像头
camera.release();
//获得Red数据和
private static int decodeYUV420SPtoRedSum(byte[] yuv420sp, int width, int height)
if (yuv420sp==null)
final int frameSize = width *
int sum = 0;
for (int j = 0, yp = 0; j & j++) {
int uvp = frameSize + (j && 1) * width, u = 0, v = 0;
for (int i = 0; i & i++, yp++) {
int y = (0xff & ((int) yuv420sp[yp])) - 16;
if (y & 0) y = 0;
if ((i & 1) == 0) {
v = (0xff & yuv420sp[uvp++]) - 128;
u = (0xff & yuv420sp[uvp++]) - 128;
int y1192 = 1192 *
int r = (y1192 + 1634 * v);
int g = (y1192 - 833 * v - 400 * u);
int b = (y1192 + 2066 * u);
if (r & 0) r = 0; else if (r & 262143) r = 262143;
if (g & 0) g = 0; else if (g & 262143) g = 262143;
if (b & 0) b = 0; else if (b & 262143) b = 262143;
int pixel = 0xff000000 | ((r && 6) & 0xff0000) | ((g && 2) & 0xff00) | ((b && 10) & 0xff);
int red = (pixel && 16) & 0
//FIR滤波函数
public static final short SIGNAL_LENGTH = 128;//数组长度
public static final short FIR_ORDER = 16;//FIR阶数
private static void fir(int x[], int h[], int y[]) {
int i, j, nNow = 0;
for (j = 0; j & SIGNAL_LENGTH; j++) {
for (i = 0; i & FIR_ORDER; i++) {
nNow = j -
if (nNow & 0)
nNow = SIGNAL_LENGTH + nN
sum += (long) x[nNow] * h[i];
y[j] = (int) (sum && 15);
//幅度限制
if(y[j]&200)y[j]=200;
if(y[j]&0)y[j]=0;
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
[心率采集电路.doc 10页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
[心率采集电路
你可能关注的文档:
··········
··········
心率作为重要的生命体征,包含着丰富的人体生命信息。构建一种可穿着的日常心率测试监控系统,能够采集心跳信号,进行日常心率测试、储存、报警、实时监控等功能,这样的心率测试服装可为病人、老人、小孩等老弱人群带来便利。
目前国外此类代表性的服装有意大利Wealthy智慧衣,它使用压阻式纱线所织成的应变式织物传感器以及采用混以金属丝的纱线所制成的织物电极来采集生理信号[1]。此外,还有获得14项专利的美国VivoMetrics研发的Life Shirt Garment,它利用嵌入式传感器,设计运算法则、软件可分析20多种生理信号[2]。
目前对心率信号的采集主要有心电电极采集、光电传感器采集及压力传感器采集.心电电采集时,需用胶条将电极贴在人体表面,而光电传感器采集时,需将电极接到人体上透明的部分如手指或耳廓两者都不符合本设计的要求故本设计采用压力传感器采集
压力传感器一般可置于心脏处、颈动脉处、手腕挠动脉处
将传感器置于手腕挠动脉处,用具有弹性的经过处理的护腕将其固定,这样就可以根据不同人的手腕的粗细调节传感器与体表接触的最佳压力.使用压电晶体作为采集心跳信号的换能装置,整个调理电路由电荷放大器、调适放大器、低通滤波器、放大及阈值整形输出级等部分组成,可完成信号的放大、滤波以及电压转换.本设计中所使用的XH-6型有源心音脉搏多用途压电晶体传感器已经内置电荷放大器和调适放大器,则此传感器在受到压力后直接输出电压信号,见图2.
正常人的脉搏和心跳是一致的,脉搏的频率受年龄和性别影响,如婴儿120~140次/min,幼儿90~100次/min,成年人70~80次/min,只要60~100次/min都是正常的,当然专业运动员可以为50次/min.因此,人的脉搏波形频率远远小于5 Hz,大约在0·5~2 Hz之间,所以通过一个二阶低通勃通华斯滤波器就可以将10 Hz以上的杂波滤掉,剩下的就是心跳产生的波.同时,使用CD40106施密特反相器可以将不规则的尖峰脉冲整形,整形后的方波脉冲可由单片机直接计数.整形后的波形如图3所示,心跳采集应用电路如图4所示,其中JP1接心跳传感器3个端子,HCC40106的6管脚接单片机的P3.4口.
图1。系统原理图
图2。传感器输出波形
图3。施密特整形后波形
图4。心跳采集电路
图7为心跳参数处理的流程图.
心跳参数处理流程图
语音播报处理流程图
心跳参数处理程序的代码如下:
HEART EQU  1CH
CON0  EQU  50H
………………………………………………
HERE: ;主程序
MOV A,HEART ;提取计数器中的心跳数
H-DEAL:  MOV B,#04H ;心率处理程序,将数据处理为N次/60s
  MUL AB
MOV B,#100 ;16进制数转换为10进制BCD
  DIV  AB
  MOV  5AH,A ;百位
  MOV  A,B
  MOV  B,#10
  DIV  AB
  MOV  5BH,A ;十位
  MOV  5CH,B ;个位
  MOV  R2,#30H
  MOV R0,#5AH
SENDH:  MOV  A,@R0 ;将BCD码转为液晶需要的ASCII
码,存入51H-53H单元内
  ADD  A,R2
MOV  51H,A
  INC  R0
  MOV  A,@R0
  ADD  A,R2
  MOV  52H,A
  INC R0
  MOV  53H,A
  MOV  R1,#CON0 ;液晶取显示心跳部分的首地址
  MOV  @R1,#48H ;字母H的ASCII码,表示心率
  MOV  R1,#54H
  MOV  @R1,#2FH
  INC R1
  MOV  @R1,#4DH ;MIN的ASCII码,表示分钟
  INC R1
  MOV  @R1,#49H
  INC R1
  MOV  @R1,#4EH
LCALL DISPLAY ;调液晶显示程序
36北京服装学院学报(自然科学版)             2007年
采用ADI公司的低功耗、高性能处理器ADUC812作为主控设备,这款芯片无论是在功耗还是体积上都与设计需求完美契合。ADUC812原理图如图1。第43~46管脚是单片机的P0口,输出高电平的时候关闭发光二极管,输出低电平时点亮相关发光二极管;第49管脚用于控制蜂鸣器MK1发声,低电平使其发出声音信号;第31管脚用于控制LED的复位;第37管脚是LED的锁存器时钟输入;第38管脚是LED串行时钟输入;第39管脚是LED显示代码的输入端;第16、17管脚是UART通信口;第23管脚输入心跳信号;第18管脚
正在加载中,请稍后...向您推荐:
所有回答:0
最佳回答:0
采纳率:0.00%
胎儿心跳声音mp3是什么样的呢?
宝宝年龄:宝宝1岁
所有回答:260582
最佳回答:124596
采纳率:47.81%
到时候的话自己还是要注意定期检查一下会比较好的,这样的话对于宝宝的身体健康发育来说的话,才会比较有好处一些的,而且在这段期间的话,最好不要太过劳累了。
02-12 20:49
共有1个答案
马冬梅啊哈
宝宝年龄:孕5个月
所有回答:1845
最佳回答:1059
采纳率: 57.40%
马冬梅啊哈
宝宝胎心跳动的话一般比正常人快,基本上是120到160之间的,一般就是通通通跳的比较快些,你一般做检查,医生都会用那个胎心一帮你听的。
02-12 19:53
宝宝胎心跳动的话一般比正常人快,基本上是120到160之间的,一般就是通通通跳的比较快些,你一般做检查,医生都会用那个胎心一帮你听的。
温温要当妈 2人回答
火红的飒飒 1人回答
善良的33 1人回答
北纬格子婧 1人回答
我家的小魔王 3人回答
qwest_45 3人回答
枸杞爸爸 3人回答
客户端下载到日本这个小岛来,听听来自世界各地的心跳声_设计_好奇心日报
社交账号登录
新用户注册 上传头像拖拽或者缩放虚线框,生成自己满意的头像预览 忘记密码
设置新密码
设计到日本这个小岛来,听听来自世界各地的心跳声
“我留下了心跳的声音以及一句话。以后回忆的时候,我会说那就是我的当下。”
在濑户内海中,有座叫丰岛的小岛,这座岛以建筑师西泽立卫设计的丰岛美术馆而闻名。在美术馆的旁边,有一个人迹罕至的黑色小木屋。木屋结构非常简单,面积只有一个小型诊所那么大,在这里你可以清楚地听到放大十倍的自己的心跳声。
心脏档案室(心臓音のアーカイブ)是法国艺术家 Christian Boltanski 设计的,他从 2008 年开始进行搜集世界各地人们的心跳声,这些人来自十几个不同的国家,目前为止已经收录了三万多个生命心跳的声音。
档案室没有什么独特的设计,只是分成三个房间:视听室、录音室和体验室。走进长达 20 米的展示厅,明明灭灭的灯光下数万个心跳声像鼓点一样交错重叠,两侧 的墙上挂满声音主人的照片,记录着人名、采集地和录音日期。有游客说,“扑通扑通的声音非常强烈,一个人走进去的时候会感到恐惧,但又觉得很不可思议”。
要是想听得更仔细些,还可以在体验室里戴上耳机体验。在录音室中,你能记录自己此刻的心跳声音,留在这个档案室和三万多个生命一起跳动,还能刻录成光盘拿回家珍藏。声音会永久地保留在馆内,直到世界尽头。
Christian Boltanski 儿时经历过世界大战,这对他影响很深。他的作品多半围绕“人”出发,创立起一套关于死亡与存在的永恒艺术主题。Boltanski 对生命看得很是通透,他以艺术家超乎寻常的敏感留下了这些原本轻易被遗忘的事物,令生命的存在变成符号和情绪。
Boltanski 设计作品
Boltanski 曾说,在作品中运用老照片、心跳声和旧衣服都是一样的,它们都存留着关于主体的记忆。艺术家不仅要去创造美的事物,还需要用作品向人们 提出问题。当人们聆听这些逝去的人的心跳时,能够感受到逝者存在过的痕迹和自己鲜活的生命,它会给游客思考的时间,去认真思考艺术和生命。
“在丰岛,我留下了心跳的声音以及一句话。以后回忆的时候,我会说那就是我的当下。如果你也会去那里,请去听一听那一瞬间的心跳声。”
内文图来自
喜欢这篇文章?去 App 商店搜
,每天看点不一样的。
没有更多啦
登录查看你的好奇心指数
根据你的好奇心指数推荐
好奇心微信公众号

我要回帖

更多关于 女主播asmr心跳声音 的文章

 

随机推荐