基于stm32和lmt70的温度控制器的C语言代码

时间: 2023-09-21 19:06:02 浏览: 30
### 回答1: 下面是一个基于STM32和LMT70的温度控制器的C语言代码示例: ```c #include "stm32f10x.h" #include "stdio.h" #define LMT70_PORT GPIOA #define LMT70_PIN GPIO_Pin_0 void Delay(__IO uint32_t nCount); int main(void) { GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; USART_InitTypeDef USART_InitStructure; // Enable the GPIOA and ADC1 clock. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE); // Configure the LMT70 pin as analog input. GPIO_InitStructure.GPIO_Pin = LMT70_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(LMT70_PORT, &GPIO_InitStructure); // Configure the ADC1 channel 0. ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5); ADC_Cmd(ADC1, ENABLE); ADC_ResetCalibration(ADC1); while (ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while (ADC_GetCalibrationStatus(ADC1)); // Configure the USART1. RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); while (1) { ADC_SoftwareStartConvCmd(ADC1, ENABLE); while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)); uint16_t adc_value = ADC_GetConversionValue(ADC1); float voltage = adc_value * 3.3 / 4096; float temperature = (voltage - 0.5) * 100; char buffer[50]; sprintf(buffer, "Temperature: %.2fC\r\n", temperature); USART_SendString(USART1, buffer); Delay(1000000); } } void Delay(__IO uint32_t nCount) { while (nCount--); } ``` 以上代码通过ADC读取LMT70传感器的模拟电压,将其转换为温度值,并通过USART发送给外部设备。注意,以上代码仅供参考,具体实现可能需要根据实际情况进行修改。 ### 回答2: 基于stm32和lmt70的温度控制器的C语言代码可以按照以下步骤进行编写: 1. 包含所需的头文件和库: ```c #include "stm32xxxx.h" // 根据具体的STM32型号引入相应的头文件 #include "lmt70.h" // 引入LMT70温度传感器相关的头文件 ``` 2. 定义相关的宏: ```c #define PWM_OUTPUT_PIN GPIO_Pin_0 // PWM输出引脚 #define PWM_OUTPUT_PORT GPIOA // PWM输出引脚所在的端口 #define PWM_TIMER TIM1 // PWM输出使用的定时器 #define TARGET_TEMP 25 // 目标温度 ``` 3. 初始化温度传感器和PWM输出: ```c void init() { // 初始化温度传感器 LMT70_Init(); // 初始化PWM输出引脚 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = PWM_OUTPUT_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(PWM_OUTPUT_PORT, &GPIO_InitStructure); // 初始化PWM定时器 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseStructure.TIM_Period = 1000; // PWM周期为1ms TIM_TimeBaseStructure.TIM_Prescaler = 720; // 时钟频率为72MHz,因此分频为720 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(PWM_TIMER, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; // 初始占空比为0% TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(PWM_TIMER, &TIM_OCInitStructure); TIM_OC1PreloadConfig(PWM_TIMER, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(PWM_TIMER, ENABLE); TIM_Cmd(PWM_TIMER, ENABLE); } ``` 4. 获取当前温度并进行温度控制: ```c void temperatureControl() { float currentTemp = LMT70_GetTemperature(); // 获取当前温度值 int error = TARGET_TEMP - currentTemp; // 计算当前温度误差 // 根据误差大小调整PWM占空比 if (error > 0) { TIM_SetCompare1(PWM_TIMER, error * 10); // 增加PWM占空比 } else { TIM_SetCompare1(PWM_TIMER, 0); // 保持PWM占空比为0% } } ``` 5. 主程序循环中进行温度控制: ```c int main() { // 初始化 init(); while (1) { // 温度控制 temperatureControl(); } } ``` 以上是基于stm32和lmt70的温度控制器的简单C语言代码,实现了温度传感器的初始化和PWM输出的初始化,以及温度控制主程序循环中的温度检测和PWM占空比的调整。这只是一个简单的示例代码,具体的实现还需要根据实际需求进行调整和完善。 ### 回答3: 基于STM32和LMT70的温度控制器的C语言代码需要包含如下功能: 1. 设置温度阈值:定义一个变量来保存设定的温度阈值,用户可以在控制器上通过按钮或者界面输入,将其保存在该变量中。 2. 读取温度数据:使用STM32的ADC模块,将LMT70的模拟输出接入到ADC引脚上,通过ADC转换,读取LMT70的温度数据,并将其保存在一个变量中。 3. 温度控制:根据实际温度和设定的温度阈值进行比较,根据差值定义一个控制算法,如比例控制、PID控制等,来输出相应的控制信号。 4. 输出控制信号:利用STM32的GPIO模块,将控制信号输出到相应的控制设备,如继电器、电机等,以控制温度。 以下是基于上述功能的简单示例代码: ```c #include "stm32f4xx.h" #define SET_TEMP 300 // 设定的温度阈值,单位:摄氏度 float readTemperature() { // 使用STM32的ADC模块读取LMT70温度传感器的数值,并进行转换计算,得到实际温度值 // 返回实际温度值 return temperature; } void controlTemperature(float temp) { // 对比设定的温度阈值和实际温度值,进行控制信号的输出 // 根据实际温度和温度阈值差值,使用合适的控制算法(比例控制、PID控制等)计算一个控制信号值 // 输出控制信号到相应的控制设备 } int main(void) { // 初始化STM32的GPIO模块为输出模式,用于控制信号的输出 // 初始化STM32的ADC模块,用于读取LMT70的温度值 // 使用STM32的定时器模块设置一个周期性的中断,以一定的时间间隔来读取温度值并进行温度控制 while (1) { // 在中断函数中读取LMT70的温度值并进行温度控制 // 延时一定的时间 } } ``` 上述代码只是一个简单的示例,实际的温度控制器还需要根据具体的硬件连接、温度控制算法等进行适当的修改和完善。

相关推荐

FileNotFoundError: [Errno 2] No such file or directory 是一个常见的文件找不到的错误提示。它表示程序无法找到指定路径下的文件或目录。根据引用和引用[2]的信息,可能是由于文件路径错误导致的。在引用中提到,如果你当前所在的不是文件的根目录,而是根目录的子目录,就会导致找不到文件。因此,解决这个问题的方法是重新打开一个command,在文件的根目录下运行程序。根据你提供的路径文件为'D:\\lmt\\CATNet-main\\checkpoints\\ckpt\\RGBD.log',你可以尝试在D盘的根目录下运行程序,即D盘下的lmt文件夹里运行程序。这样应该能够解决FileNotFoundError的问题。123 #### 引用[.reference_title] - *1* [已解决FileNotFoundError: [Errno 2] No such file or directory: ‘D:\\1. PDF](https://blog.csdn.net/yuan2019035055/article/details/126191272)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [FileNotFoundError: [Errno 2] No such file or directory:XXXX](https://blog.csdn.net/weixin_43135178/article/details/128354305)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
好的,您可以按照以下步骤进行操作: 1. 首先在数据库中创建一张名为“user”的表,包含id、name、age、sex、fst_create_time、lmt_modify_time这六个字段,其中id为主键,自增长。 2. 在Spring Boot中创建一个实体类User,包含以上六个字段,同时使用JPA注解将其映射到数据库中的user表。 @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Integer age; private String sex; @Column(name = "fst_create_time") private Date fstCreateTime; @Column(name = "lmt_modify_time") private Date lmtModifyTime; // 省略get/set方法 } 3. 创建一个继承自JpaRepository的UserRepository接口,用于操作数据库中的user表。 public interface UserRepository extends JpaRepository<User, Long> { } 4. 在Controller中编写增删改查的API: @RestController @RequestMapping("/user") public class UserController { @Autowired private UserRepository userRepository; @PostMapping("/add") public User addUser(@RequestBody User user) { user.setFstCreateTime(new Date()); user.setLmtModifyTime(new Date()); return userRepository.save(user); } @GetMapping("/get/{id}") public User getUser(@PathVariable Long id) { return userRepository.findById(id).orElse(null); } @PutMapping("/update") public User updateUser(@RequestBody User user) { user.setLmtModifyTime(new Date()); return userRepository.save(user); } @DeleteMapping("/delete/{id}") public void deleteUser(@PathVariable Long id) { userRepository.deleteById(id); } } 5. 启动应用程序,使用Postman或其他工具测试API的增删改查功能。
这段代码看起来是一段嵌入式系统的控制代码。根据代码的结构,可以分为以下几个部分: 1. J_vbdbwphyconv_bpv();:调用了一个函数 J_vbdbwphyconv_bpv(),可能是对物理转换进行操作。 2. f_cpcvctrl = J_sys_set_f_cpcvctrl();:调用了一个函数 J_sys_set_f_cpcvctrl(),将返回值赋给了变量 f_cpcvctrl。 3. J_sys_set_cpcvfrz( &stfrz_bpv );:调用了一个函数 J_sys_set_cpcvfrz(),传入了变量 stfrz_bpv 的地址。 4. if( VFLGf_romsw0 || ( CU08swcntstart_bpv != 1 ) ):条件判断语句,判断了两个条件,并使用逻辑或运算符进行判断。如果其中任意一个条件成立,则执行后面的语句。 5. VFLGf_cntstart_bpv = f_cpcvctrl;:将变量 f_cpcvctrl 的值赋给了变量 VFLGf_cntstart_bpv。 6. else:条件判断语句的分支,如果之前的条件判断不成立,则执行这里的语句。 7. VFLGf_cntstart_bpv = 1;:将变量 VFLGf_cntstart_bpv 的值设置为1。 8. if( VU08t10mscnt_bpv >= 1 ):条件判断语句,判断变量 VU08t10mscnt_bpv 的值是否大于等于1。 9. J_output_cvaout();:调用了一个函数 J_output_cvaout()。 10. VU08t10mscnt_bpv = 0;:将变量 VU08t10mscnt_bpv 的值设置为0。 11. else:条件判断语句的分支,如果之前的条件判断不成立,则执行这里的语句。 12. VU08t10mscnt_bpv++;:将变量 VU08t10mscnt_bpv 的值加1。 13. J_dbw_thl_prmt_bpv();:调用了一个函数 J_dbw_thl_prmt_bpv()。 14. ( VU08stfrz_bpv == 2 ) || ( VU08stfrz_bpv == 3 ):条件判断语句,判断两个条件是否成立,并使用逻辑或运算符进行判断。 15. if( VFLGf_cntstart_bpv ):条件判断语句,判断变量 VFLGf_cntstart_bpv 的值是否为真。 16. J_dbw_seq_thzr_bpv();:调用了一个函数 J_dbw_seq_thzr_bpv()。 17. J_sel_cmd_dbw_bpv();:调用了一个函数 J_sel_cmd_dbw_bpv()。 18. J_lmt_cmd_dbw_bpv();:调用了一个函数 J_lmt_cmd_dbw_bpv()。 19. if( !VFLGf_stpreq_bpv ):条件判断语句,判断变量 VFLGf_stpreq_bpv 的值是否为假。 20. J_pipd_cont();:调用了一个函数 J_pipd_cont()。 21. else:条件判断语句的分支,如果之前的条件判断不成立,则执行这里的语句。 22. ( stfrz_bpv == 2 ) || ( stfrz_bpv == 3 ):条件判断语句,判断两个条件是否成立,并使用逻辑或运算符进行判断。 23. VU08stfrz_bpv = stfrz_bpv;:将变量 stfrz_bpv 的值赋给变量 VU08stfrz_bpv。 24. if( VFLGf_cntstart_bpv ):条件判断语句,判断变量 VFLGf_cntstart_bpv 的值是否为真。 25. J_dbw_seq_thzr_bpv();:调用了一个函数 J_dbw_seq_thzr_bpv()。 26. J_sel_cmd_dbw_bpv();:调用了一个函数 J_sel_cmd_dbw_bpv()。 27. J_lmt_cmd_dbw_bpv();:调用了一个函数 J_lmt_cmd_dbw_bpv()。 28. if( !VFLGf_stpreq_bpv ):条件判断语句,判断变量 VFLGf_stpreq_bpv 的值是否为假。 29. J_pipd_cont();:调用了一个函数 J_pipd_cont()。 30. J_jud_mot_prmt_bpv();:调用了一个函数 J_jud_mot_prmt_bpv()。 31. J_dbw_mot_40a_bpv();:调用了一个函数 J_dbw_mot_40a_bpv()。 32. J_dbw_40b_bpv();:调用了一个函数 J_dbw_40b_bpv()。 33. J_dbw_seqfsact_bpv();:调用了一个函数 J_dbw_seqfsact_bpv()。
以下是将JSON字符串转换为SQL语句的示例代码: -- 创建表 CREATE TABLE IF NOT EXISTS table_name ( id int(11) NOT NULL AUTO_INCREMENT, bas_medn_flag varchar(255) DEFAULT NULL, med_chrgitm_type varchar(255) DEFAULT NULL, det_item_fee_sumamt decimal(18,2) DEFAULT NULL, hi_nego_drug_flag varchar(255) DEFAULT NULL, fulamt_ownpay_amt decimal(18,2) DEFAULT NULL, cnt int(11) DEFAULT NULL, pric decimal(18,2) DEFAULT NULL, memo varchar(255) DEFAULT NULL, feedetl_sn varchar(255) DEFAULT NULL, inscp_scp_amt decimal(18,2) DEFAULT NULL, overlmt_amt decimal(18,2) DEFAULT NULL, pric_uplmt_amt decimal(18,2) DEFAULT NULL, selfpay_prop decimal(18,2) DEFAULT NULL, chld_medc_flag varchar(255) DEFAULT NULL, preselfpay_amt decimal(18,2) DEFAULT NULL, lmt_used_flag varchar(255) DEFAULT NULL, chrgitm_lv varchar(255) DEFAULT NULL, mdtrtId varchar(255) DEFAULT NULL, iptOtpNo varchar(255) DEFAULT NULL, psnNo varchar(255) DEFAULT NULL, payOrdId varchar(255) DEFAULT NULL, payToken varchar(255) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 插入数据 INSERT INTO table_name ( bas_medn_flag, med_chrgitm_type, det_item_fee_sumamt, hi_nego_drug_flag, fulamt_ownpay_amt, cnt, pric, memo, feedetl_sn, inscp_scp_amt, overlmt_amt, pric_uplmt_amt, selfpay_prop, chld_medc_flag, preselfpay_amt, lmt_used_flag, chrgitm_lv, mdtrtId, iptOtpNo, psnNo, payOrdId, payToken ) VALUES ( '0', '09', 15, '0', 0, 1, 15, '', '1091', 15, 0, 0, 0, '0', 0, '0', '01', '4401002305202305291758258', 'LP202305121737529978305IR9', '44010000003503430694', 'ORD440100202305291741030000642', 'TSN440100202305291741020008660' ); 请注意,上述SQL语句仅适用于您所提供的JSON字符串,如果JSON字符串的结构发生变化,可能需要根据新的结构进行修改。
根据引用\[1\]和引用\[3\]的描述,问题出现在项目路径设置上。在引用\[1\]中提到了一个错误信息"Build constraints exclude all the Go files in 'D:/Program Files/Go/src/gorm.io/gorm'",这表明在该路径下没有找到任何Go文件。而在引用\[3\]中,问题描述为"no Go files in D:\basic_tool\Go\src\gosvc",同样是指在该路径下没有找到任何Go文件。 这种情况通常是由于项目路径设置不正确导致的。请确保你的项目路径设置正确,并且在该路径下存在Go文件。你可以通过以下步骤来解决这个问题: 1. 确认你的项目路径是否正确。在引用\[3\]中提到的路径是"E:/GoProjects/src/xxx/gosvc/example",请确保该路径下存在Go文件。 2. 确认你的GOROOT和GOPATH配置是否正确。在引用\[2\]中提到了GOROOT和GOPATH的配置路径,你可以通过go env命令来查看是否设置成功。 3. 如果你使用的是Go Modules(vgo),请确保你的配置参数正确。在引用\[2\]中提到了Go Modules(vgo)的配置参数,你可以参考该配置来设置你的项目。 如果你仍然遇到问题,请提供更多的错误信息和详细的配置信息,以便我能够更好地帮助你解决问题。 #### 引用[.reference_title] - *1* [Build constraints exclude all the Go files in ‘D:/Program Files/Go/src/gorm.io/gorm‘](https://blog.csdn.net/LMT158130/article/details/120777685)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Intellij IDEA Golang编译运行出错:no Go files in D:\\basic_tool\\Go\\src\\gosvc](https://blog.csdn.net/CSDN_LJJ0303/article/details/107919538)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

最新推荐

LMT70数据手册2020电子设计竞赛

LMT70,数据手册,2020电子设计竞赛,温度监测芯片,精度高,功耗低,4引脚,电压输出,不是严格线性,建议用二阶或者三阶方程曲线进行拟合以达到更高的测量精度。测量范围宽。

2020 年TI 杯大学生电子设计竞赛 无线运动传感器节点设计(A 题

无线运动传感器节点设计(A 题)基于 TI 模拟前端芯片 ADS1292 和温度传感器 LMT70 设计制作无线运动传 感器节点,节点采用电池供电,要求能稳定采集和记录使用者的心电信息、体表 温度和运动信息。

GSM系统之MR提取方法

2.1.3 通过定时任务获取跟踪文件到LMT客户端(BSC6000MRTrc程序) 7 2.1.4 上载文件存放 7 2.2 BSC32上的操作 7 3 配置数据采集 8 3.1 BSC6000上的操作 8 3.2 BSC32上的操作 10 3.3 BSC版本信息的获取 10

干货!MySQL 数据库开发规范.docx

你真的会写一手好SQL吗?你真的深入了解数据库吗?你真的对MYSQL很理解吗?来自一线大厂资深数据库开发工程师的分享,纯粹干货,值得拥有。

数据库基础创建的时候错误信息排查

创建的时候错误信息排查

基于51单片机的usb键盘设计与实现(1).doc

基于51单片机的usb键盘设计与实现(1).doc

"海洋环境知识提取与表示:专用导航应用体系结构建模"

对海洋环境知识提取和表示的贡献引用此版本:迪厄多娜·察查。对海洋环境知识提取和表示的贡献:提出了一个专门用于导航应用的体系结构。建模和模拟。西布列塔尼大学-布雷斯特,2014年。法语。NNT:2014BRES0118。电话:02148222HAL ID:电话:02148222https://theses.hal.science/tel-02148222提交日期:2019年HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire论文/西布列塔尼大学由布列塔尼欧洲大学盖章要获得标题西布列塔尼大学博士(博士)专业:计算机科学海洋科学博士学院对海洋环境知识的提取和表示的贡献体系结构的建议专用于应用程序导航。提交人迪厄多内·察察在联合研究单位编制(EA编号3634)海军学院

react中antd组件库里有个 rangepicker 我需要默认显示的当前月1号到最后一号的数据 要求选择不同月的时候 开始时间为一号 结束时间为选定的那个月的最后一号

你可以使用 RangePicker 的 defaultValue 属性来设置默认值。具体来说,你可以使用 moment.js 库来获取当前月份和最后一天的日期,然后将它们设置为 RangePicker 的 defaultValue。当用户选择不同的月份时,你可以在 onChange 回调中获取用户选择的月份,然后使用 moment.js 计算出该月份的第一天和最后一天,更新 RangePicker 的 value 属性。 以下是示例代码: ```jsx import { useState } from 'react'; import { DatePicker } from 'antd';

基于plc的楼宇恒压供水系统学位论文.doc

基于plc的楼宇恒压供水系统学位论文.doc

"用于对齐和识别的3D模型计算机视觉与模式识别"

表示用于对齐和识别的3D模型马蒂厄·奥布里引用此版本:马蒂厄·奥布里表示用于对齐和识别的3D模型计算机视觉与模式识别[cs.CV].巴黎高等师范学校,2015年。英语NNT:2015ENSU0006。电话:01160300v2HAL Id:tel-01160300https://theses.hal.science/tel-01160300v22018年4月11日提交HAL是一个多学科的开放获取档案馆,用于存放和传播科学研究文件,无论它们是否已这些文件可能来自法国或国外的教学和研究机构,或来自公共或私人研究中心。L’archive ouverte pluridisciplinaire博士之路博士之路博士之路在获得等级时,DOCTEURDE L'ÉCOLE NORMALE SUPERIEURE博士学校ED 386:巴黎中心数学科学Discipline ou spécialité:InformatiquePrésentée et soutenue par:马蒂厄·奥布里le8 may 2015滴度表示用于对齐和识别的Unité derechercheThèse dirigée par陪审团成员équipe WILLOW(CNRS/ENS/INRIA UMR 8548)慕尼黑工业大学(TU Munich�