mirror of
https://github.com/jackyzha0/quartz.git
synced 2025-12-27 23:04:05 -06:00
Add note
This commit is contained in:
parent
1684ce2e5e
commit
675abf7265
@ -0,0 +1,26 @@
|
||||
# 基于矢量网络分析仪的UWB设备模拟系统中天线延迟校准的新方法
|
||||
|
||||
# A Novel Approach for Antenna Delay Calibration in a UWB Device Simulation System Based on Vector Network Analyzer
|
||||
|
||||
## Abstract
|
||||
|
||||
## INTRODUCTION
|
||||
|
||||
With the rapid advancement of wireless communication technologies, Ultra-Wideband (UWB) has demonstrated immense potential in the fields of short-range wireless communication and precise positioning due to its high time resolution and low power consumption characteristics. Antenna delay in UWB nodes is one of the critical factors affecting positioning accuracy. Therefore, developing an effective antenna delay calibration method is essential for enhancing the performance of UWB positioning systems.
|
||||
|
||||
|
||||
|
||||
## ANTENNA DELAY CALIBRATION SYSTEM
|
||||
|
||||
|
||||
|
||||
## EXPERIMENT
|
||||
|
||||
|
||||
|
||||
## CONCLUSION
|
||||
|
||||
## REFERENCE
|
||||
|
||||
|
||||
|
||||
3
content/.trash/curve_assessment_parameters.md
Normal file
3
content/.trash/curve_assessment_parameters.md
Normal file
@ -0,0 +1,3 @@
|
||||
---
|
||||
title:
|
||||
---
|
||||
11
content/.trash/where_to_play.md
Normal file
11
content/.trash/where_to_play.md
Normal file
@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Where to play
|
||||
tags:
|
||||
- tmp
|
||||
date: 2024-03-31
|
||||
draft: "False"
|
||||
---
|
||||
- [ ] 露营烧烤 + 户外活动
|
||||
- [ ] 安吉烧烤 + 温泉 (过夜)
|
||||
- [ ] 富阳动物园
|
||||
- [ ] 爬山
|
||||
@ -35,4 +35,6 @@ date: 2024-03-27
|
||||
* [For Loop](computer_sci/coding_knowledge/js/for_loop.md)
|
||||
* [var, let, const](computer_sci/coding_knowledge/js/var_let_const.md)
|
||||
* [Rest Parameters, Argument Objects, Spread Syntax](computer_sci/coding_knowledge/js/rest_parameters_argument_objects_spread_syntax.md)
|
||||
* [Memoization](computer_sci/coding_knowledge/js/memoization.md)
|
||||
* [Promise](computer_sci/coding_knowledge/js/promise.md)
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 71 KiB |
201
content/computer_sci/coding_knowledge/js/promise.md
Normal file
201
content/computer_sci/coding_knowledge/js/promise.md
Normal file
@ -0,0 +1,201 @@
|
||||
---
|
||||
title: Promise in JS
|
||||
tags:
|
||||
- advanced
|
||||
- javascript
|
||||
- coding-language
|
||||
date: 2024-03-31
|
||||
---
|
||||
**Promise** 是 JavaScript 中用来处理异步操作的类。它提供了一种更简洁、更易于理解的方式来处理异步操作的结果。
|
||||
|
||||
|
||||
# Asynchronous coding
|
||||
|
||||
|
||||
在前端编程中(甚至后端有时也是这样),我们在处理一些简短、快速的操作时,例如计算 1 + 1 的结果,往往在主线程中就可以完成。主线程作为一个线程,不能够同时接受多方面的请求。所以,当一个事件没有结束时,界面将无法处理其他请求。
|
||||
|
||||
现在有一个按钮,如果我们设置它的 onclick 事件为一个死循环,那么当这个按钮按下,整个网页将失去响应。
|
||||
|
||||
为了避免这种情况的发生,我们常常用子线程来完成一些可能消耗时间足够长以至于被用户察觉的事情,比如读取一个大文件或者发出一个网络请求。因为子线程独立于主线程,所以即使出现阻塞也不会影响主线程的运行。但是子线程有一个局限:一旦发射了以后就会与主线程失去同步,我们无法确定它的结束,如果结束之后需要处理一些事情,比如处理来自服务器的信息,我们是无法将它合并到主线程中去的。
|
||||
|
||||
为了解决这个问题,JavaScript 中的异步操作函数往往通过回调函数来实现异步任务的结果处理。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
# How `Promise` work
|
||||
|
||||
`Promise`是一个对象,它代表了一个异步操作的最终完成或者失败。
|
||||
|
||||
本质上`Promise`是一个函数返回的对象,我们可以在它上面绑定回调函数,这样我们就不需要在一开始把回调函数作为参数传入这个函数了。
|
||||
|
||||
## Demo
|
||||
|
||||
假设现在有一个名为 `createAudioFileAsync()` 的函数,它接收一些配置和两个回调函数,然后异步地生成音频文件。一个回调函数在文件成功创建时被调用,另一个则在出现异常时被调用。
|
||||
|
||||
```js
|
||||
function successCallback(result) {
|
||||
console.log("音频文件创建成功:" + result);
|
||||
}
|
||||
|
||||
// 失败的回调函数
|
||||
function failureCallback(error) {
|
||||
console.log("音频文件创建失败:" + error);
|
||||
}
|
||||
|
||||
createAudioFileAsync(audioSettings, successCallback, failureCallback);
|
||||
```
|
||||
|
||||
如果使用Promise的写法,可以把回调函数附加到它上面,
|
||||
|
||||
```js
|
||||
createAudioFileAsync(audioSettings).then(successCallback, failureCallback);
|
||||
```
|
||||
|
||||
|
||||
一个完整的template:
|
||||
|
||||
```js
|
||||
const userLeft = false
|
||||
const userWatchingCatMeme = false
|
||||
|
||||
function watchTutorialPromise() = {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (userLeft) {
|
||||
reject({
|
||||
name: 'User Left',
|
||||
message: ':('
|
||||
})
|
||||
} else if (userWatchCatMeme) {
|
||||
reject({
|
||||
name: 'User Watching Cat Meme',
|
||||
message: 'WedDevSimplified < Cat'
|
||||
})
|
||||
} else {
|
||||
resove('Thumbs up and Subscribe')
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
watchTutorialPromise().then((message) => {
|
||||
conolse.log('Success:' + message)
|
||||
}).catch((error) => {
|
||||
console.log(error.name = '' + error.message)
|
||||
})
|
||||
```
|
||||
|
||||
这样的写法形式有若干优点
|
||||
|
||||
|
||||
# `Promise` 的优点
|
||||
## 链式调用
|
||||
|
||||
连续执行两个或者多个异步操作是一个常见的需求,在上一个操作执行成功之后,开始下一个的操作,并带着上一步操作所返回的结果。在旧的回调风格中,这种操作会导致经典的回调地狱
|
||||
|
||||
```js
|
||||
doSomething(function (result) {
|
||||
doSomethingElse(result, function (newResult) {
|
||||
doThirdThing(newResult, function (finalResult) {
|
||||
console.log(`得到最终结果:${finalResult}`);
|
||||
}, failureCallback);
|
||||
}, failureCallback);
|
||||
}, failureCallback);
|
||||
```
|
||||
|
||||
|
||||
有了`Promise`,我们就可以通过一个`Promise`链来解决这个问题。这就是`Promise` API 的优势,因为回调函数是附加到返回的`Promise`对象上的,而不是传入一个函数中。
|
||||
|
||||
`then()` 函数会返回一个和原来不同的**新的 Promise**:
|
||||
|
||||
```js
|
||||
const promise = doSomething()
|
||||
const promise2 = promise.then(successCallback, failureCallback)
|
||||
```
|
||||
|
||||
`promise2` 不仅表示 `doSomething()` 函数的完成,也代表了你传入的 `successCallback` 或者 `failureCallback` 的完成,这两个函数也可以返回一个 Promise 对象,从而形成另一个异步操作,这样的话,在 `promise2` 上新增的回调函数会排在这个 Promise 对象的后面。
|
||||
|
||||
就像这样,每一个 Promise 都代表了链中另一个异步过程的完成。此外,`then` 的参数是可选的,`catch(failureCallback)` 等同于 `then(null, failureCallback)`——所以如果你的错误处理代码对所有步骤都是一样的,你可以把它附加到链的末尾:
|
||||
|
||||
```js
|
||||
doSomething()
|
||||
.then(function (result) {
|
||||
return doSomethingElse(result);
|
||||
})
|
||||
.then(function (newResult) {
|
||||
return doThirdThing(newResult);
|
||||
})
|
||||
.then(function (finalResult) {
|
||||
console.log(`得到最终结果:${finalResult}`);
|
||||
})
|
||||
.catch(failureCallback);
|
||||
|
||||
doSomething()
|
||||
.then((result) => doSomethingElse(result))
|
||||
.then((newResult) => doThirdThing(newResult))
|
||||
.then((finalResult) => {
|
||||
console.log(`得到最终结果:${finalResult}`);
|
||||
})
|
||||
.catch(failureCallback);
|
||||
|
||||
|
||||
```
|
||||
|
||||
> [!note]
|
||||
> **注意**:一定要有返回值,否则,回调将无法获取上一个 Promise 的结果。(如果使用箭头函数,`() => x` 比 `() => { return x; }` 更简洁一些,但后一种保留 `return` 的写法才支持使用多个语句)。如果上一个处理程序启动了一个 Promise 但并没有返回它,那就没有办法再追踪它的状态了,这个 Promise 就是“漂浮”的。
|
||||
>
|
||||
|
||||
|
||||
|
||||
# key in `Promise`
|
||||
|
||||
## async && await
|
||||
|
||||
**async**:用于定义异步函数,确保函数始终返回一个 Promise。当在函数声明或函数表达式前使用 async 关键字时,它变成一个异步函数。从异步函数返回的非 Promise 对象会自动包装成 Promise 对象。
|
||||
|
||||
|
||||
**await**: 用于暂停异步函数的执行,直到 Promise 解析。它只能在异步函数内部使用。当在 Promise 之前使用 await 时,它等待 Promise 解析或拒绝。如果已解析,它继续执行下一行代码;如果等待的 Promise 被拒绝,将抛出异常。使用 await 允许您以更顺序且可读的方式编写异步代码,而无需使用 .then() 显式链接 Promise。
|
||||
|
||||
### demo code
|
||||
|
||||
```js
|
||||
async function example() {
|
||||
console.log('Before await');
|
||||
const result = await someAsyncOperation().then((message) => {
|
||||
console.log('Inside then', message);
|
||||
}); // 等待 Promise 解决
|
||||
console.log('After await', result);
|
||||
return new Promise((resolve) => {
|
||||
setTimeout(() => {
|
||||
resolve('FUCK');
|
||||
}, 10);
|
||||
});
|
||||
}
|
||||
|
||||
function someAsyncOperation() {
|
||||
return new Promise(resolve => {
|
||||
setTimeout(() => {
|
||||
resolve('Hello');
|
||||
}, 10);
|
||||
});
|
||||
}
|
||||
|
||||
var a = example();
|
||||
console.log(a)
|
||||
setTimeout(() => {
|
||||
a.then((message) => {
|
||||
console.log('Inside then', message);
|
||||
});
|
||||
}, 1000)
|
||||
```
|
||||
|
||||
## `Promise.all()`
|
||||
|
||||
当需要同时执行多个异步操作并等待它们全部完成后,通常会使用 `Promise.all()` 方法。
|
||||
|
||||
|
||||
# Reference
|
||||
|
||||
* https://www.youtube.com/watch?v=DHvZLI7Db8E&t=85s
|
||||
* https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Using_promises
|
||||
@ -8,6 +8,8 @@ date: 2023-12-18
|
||||
|
||||
# Basic Concept
|
||||
|
||||
# Curve Fitting
|
||||
|
||||
|
||||
# [Stochastic Process](data_sci/stochastic_process/MOC.md)
|
||||
|
||||
|
||||
44
content/data_sci/fit/error_function.md
Normal file
44
content/data_sci/fit/error_function.md
Normal file
@ -0,0 +1,44 @@
|
||||
---
|
||||
title: Error function we can choose in curve fitting
|
||||
tags:
|
||||
- basic
|
||||
- data
|
||||
- math
|
||||
date: 2024-04-01
|
||||
---
|
||||
在曲线拟合中,选择误差函数(error function)是为了衡量模型预测值与实际观测值之间的差异。误差函数通常用于优化过程中,指导算法调整模型参数以最小化误差。以下是一些常用的误差函数:
|
||||
|
||||
1. **均方误差(Mean Squared Error, MSE)**:
|
||||
- 误差的平方和的平均值,是最常用的误差函数之一。
|
||||
- 公式:$MSE = (1/n) * Σ(y_i - f(x_i))^2$,其中$y_i$是实际观测值,$f(x_i)$是模型预测值,$n$是数据点的数量。
|
||||
|
||||
2. **均方根误差(Root Mean Squared Error, RMSE)**:
|
||||
- MSE的平方根,与观测值具有相同的单位,因此更容易解释。
|
||||
- 公式:$RMSE = √(1/n) * Σ(y_i - f(x_i))^2$。
|
||||
|
||||
3. **平均绝对误差(Mean Absolute Error, MAE)**:
|
||||
- 误差的绝对值的平均值,对异常值不如MSE敏感。
|
||||
- 公式:$MAE = (1/n) * Σ|y_i - f(x_i)|$。
|
||||
|
||||
4. **平均绝对百分比误差(Mean Absolute Percentage Error, MAPE)**:
|
||||
- 误差与实际观测值的百分比的绝对值的平均值,常用于百分比或比率数据的拟合。
|
||||
- 公式:$MAPE = (1/n) * Σ|(y_i - f(x_i))/y_i| * 100%$。
|
||||
|
||||
5. **对数似然误差(Log-Likelihood Error)**:
|
||||
- 常用于概率模型,如最大似然估计。
|
||||
- 公式依赖于特定的概率分布。
|
||||
|
||||
6. **交叉熵误差(Cross-Entropy Error)**:
|
||||
- 也称为对数损失,常用于分类问题和神经网络的训练。
|
||||
- 公式:$Cross-Entropy = -Σy_i * log(f(x_i)) + (1 - y_i) * log(1 - f(x_i))$。
|
||||
|
||||
7. **Huber损失(Huber Loss)**:
|
||||
- 结合了MSE和MAE的特点,对异常值具有较强的鲁棒性。
|
||||
- 公式:$Huber(y_i, f(x_i), δ) = |y_i - f(x_i)| if |y_i - f(x_i)| ≤ δ, (1/2) * (|y_i - f(x_i)|^2 - δ^2) otherwise$。
|
||||
|
||||
8. **分位数损失(Quantile Loss)**:
|
||||
- 用于分位数回归,关注模型预测的分位数与实际观测值的分位数之间的误差。
|
||||
- 公式:$Quantile Loss = Σ(τ * (y_i - f(x_i)) if y_i > f(x_i), (1 - τ) * (f(x_i) - y_i) otherwise$,其中τ是分位数。
|
||||
|
||||
|
||||
在选择误差函数时,应考虑数据的特性、模型的目的和误差分布。例如,对于包含许多异常值的数据,使用Huber损失或MAE可能更合适。对于概率预测问题,对数似然误差或交叉熵误差可能更适用。
|
||||
17
content/data_sci/fit/intro.md
Normal file
17
content/data_sci/fit/intro.md
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
title: Simple Intro about fitting
|
||||
tags:
|
||||
- basic
|
||||
- data
|
||||
- math
|
||||
date: 2024-04-01
|
||||
---
|
||||
# What we need in fit
|
||||
|
||||
|
||||
* Model
|
||||
* Data
|
||||
* Coefficient
|
||||
* Optimzation Options
|
||||
* Weights for data
|
||||
* Constrains
|
||||
Loading…
Reference in New Issue
Block a user