Converting Phase Noise to Random Jitter(Period)

         推导了Phase Noise to Random Jitter(Period)的转换过程,解释了分频对Phase Noise & Spur(每2分频改善6dB)的影响,每N分频,TIE RJ(1𝜎)不变(之前已推导),而Period RJ(1𝜎)增加√N倍。在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

### 处理 JavaScript 中循环结构转换为 JSON 的问题 在 JavaScript 中,`JSON.stringify()` 方法无法处理对象中的循环引用。当尝试将具有循环依赖的对象序列化为 JSON 字符串时,会抛出错误 `TypeError: Converting circular structure to JSON`[^1]。 为了应对这一挑战,可以采用以下几种策略: #### 使用自定义 replacer 函数 可以通过向 `JSON.stringify()` 提供一个 **replacer** 参数来自定义序列化的逻辑。此参数允许开发者控制哪些属性应被包含到最终的 JSON 输出中。例如,通过检测并跳过可能导致循环引用的键值对,从而避免错误的发生。 ```javascript const obj = {}; obj.self = obj; function removeCircularReferences(key, value) { if (typeof value === 'object' && value !== null) { const seenObjects = []; return JSON.stringify(value, (k, v) => { if (seenObjects.indexOf(v) >= 0) return; if (typeof v === 'object') seenObjects.push(v); return v; }); } } try { console.log(removeCircularReferences('', obj)); } catch (e) { console.error(e.message); // Should not throw an error now. } ``` 这种方法虽然有效,但对于复杂的数据结构来说可能会变得难以维护[^2]。 #### 利用第三方库 一些成熟的第三方库已经解决了这个问题,比如 Lodash 或者 Flatted 库。这些工具提供了更健壮的方法来处理复杂的嵌套以及循环引用的情况。 以 Flatted 为例: 安装命令如下所示: ```bash npm install flatted ``` 之后可以在项目里这样调用它: ```javascript import { parse, stringify } from 'flatted'; const circularObj = {}; circularObj.self = circularObj; console.log(stringify(circularObj)); // '{"self":"@<0>"}' console.log(parse('{"self":"@<0>"}')); // Object reference intact ``` 这种方式不仅简化了开发者的负担还提高了代码可读性和可靠性。 #### 结合 WeakMap 实现深拷贝 另一种解决方案涉及创建一个新的副本而不会保留原始对象之间的任何链接关系。这通常涉及到递归遍历整个目标树形结构,并手动构建新的节点实例而不复制旧有的指针连接。这里我们可以利用 ES6 引入的新特性——WeakMap 来辅助完成这项工作: ```javascript function deepCloneWithNoCycles(target, hash=new WeakMap()) { if (target instanceof Array || typeof target === 'object'){ let result; if(hash.has(target)){ return hash.get(target); } if(Array.isArray(target)){ result=[]; }else{ result={}; } hash.set(target,result); for(let key in target){ if(typeof target[key]==='object'&&target[key]!=null){ result[key]=deepCloneWithNoCycles(target[key],hash); }else{ result[key]=target[key]; } } return result; } else { return target; } } let a = {b:{}, c:function(){} }; a.b.a=a; let cloneA=deepCloneWithNoCycles(a); cloneA===a.b.a;//false ``` 以上方法能够有效地防止因循环引用而导致的问题发生的同时也兼顾到了性能上的考量.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

当时皓月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值