Commit 157c0c00 by Leo

upload code

parent cdb448d7
{
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# 设置随机信号的参数\n",
"fs = 1000 # 采样频率\n",
"T = 1 # 时间长度\n",
"N = fs * T # 信号总采样点数\n",
"t = np.linspace(0, T, N, endpoint=False) # 时间向量\n",
"\n",
"# 生成随机信号\n",
"freq = 50 # 正弦波频率\n",
"signal = np.sin(2 * np.pi * freq * t) + 0.5 * np.random.normal(size=t.shape)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from scipy.fft import fft\n",
"\n",
"# 计算信号的快速傅里叶变换\n",
"signal_fft = fft(signal)\n",
"\n",
"# 计算功率谱\n",
"power_spectrum = np.abs(signal_fft)**2 / N\n",
"freqs = np.fft.fftfreq(N, 1/fs) # 计算频率"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1IAAAIjCAYAAAAJLyrXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABjSklEQVR4nO3deXwU9f3H8ffmvhNyE0ggglxyCoKRU0DOgihqVSqiVKoFreJVtVWwWqzaalHEoy1oK1r9tWC1iERu5ZBD5EZAbkg4c5Nkk53fH9MsLAnHxsB+V1/Px2MfsLOzM5+Z/exk3/nOThyWZVkCAAAAAJy3AF8XAAAAAAD+hiAFAAAAAF4iSAEAAACAlwhSAAAAAOAlghQAAAAAeIkgBQAAAABeIkgBAAAAgJcIUgAAAADgJYIUAAAAAHiJIAUAgBcqKir0yCOPKD09XQEBARo2bJivS/Kaw+HQhAkTfF2G1xYuXCiHw6GFCxf6uhRJ0oQJE+RwOHxdBgAfIUgB+MGZPn26HA6H+xYWFqZmzZpp3Lhxys3N9XV535vL5dI777yjLl26KD4+XtHR0WrWrJlGjhyp5cuX+7o8LV26VBMmTFBeXp6vS7kg/va3v+mFF17QDTfcoLffflsPPPDAGeft1auXRy+Gh4erbdu2evnll+VyuS5i1WYzvacBoCZBvi4AAC6Up59+WpmZmSotLdUXX3yhqVOnavbs2dqwYYMiIiJ8XV6t3XfffZoyZYquvfZajRgxQkFBQdq6das+/fRTXXLJJbryyit9Wt/SpUs1ceJEjRo1SnFxcT6t5UKYP3++GjRooJdeeum85m/YsKEmTZokSTpy5IhmzJihBx54QIcPH9azzz57IUv1G+fb0z169NCJEycUEhLi44oBgCAF4Ads4MCB6tSpkyTp5z//uRISEvSnP/1JH330kW655RYfV3dmLpdL5eXlCgsLq/ZYbm6uXnvtNd1111168803PR57+eWXdfjw4YtVZp0427aa6tChQ14FxNjYWP3sZz9z37/77rvVokULvfLKK3r66acVGBh4Aar0H970dEBAgF/1CoAfNk7tA/Cj0bt3b0nSzp07Jdnfdfnd736nJk2aKDQ0VI0bN9bjjz+usrIy93PGjx+vhIQEWZblnnbvvffK4XBo8uTJ7mm5ublyOByaOnWqe1pZWZmeeuopNW3aVKGhoUpPT9cjjzzisXzJ/r7KuHHj9O677+qyyy5TaGio5syZU+M27Ny5U5ZlqWvXrtUeczgcSk5Odt+vOsVx8eLF+sUvfqGEhATFxMRo5MiROn78eLXnf/rpp+revbsiIyMVHR2twYMHa+PGjdXm27Jli2666SYlJSUpPDxczZs31xNPPCHJ/s7Iww8/LEnKzMx0n9K2a9eus27rmb77smvXLjkcDk2fPt09bdSoUYqKitKePXv0k5/8RFFRUWrQoIGmTJkiSVq/fr169+6tyMhINWrUSDNmzKhxX56uuLhYDz74oNLT0xUaGqrmzZvrxRdfdL/2VbUsWLBAGzdudG+bt9/XCQsL0xVXXKHCwkIdOnTIPX3dunUaNWqULrnkEoWFhSk1NVV33nmnjh496vH8qu/lbN++3T3qFxsbqzvuuEMlJSUe85aVlemBBx5QUlKSoqOjNXToUO3bt6/Gur7++msNHDhQMTExioqKUp8+faqdVlfVU1988YXuu+8+JSUlKS4uTr/4xS9UXl6uvLw8jRw5UvXq1VO9evX0yCOPeLx3auJNT5+pT6ZMmaJLLrlE4eHh6ty5s5YsWaJevXqpV69e1Z77wQcf6Nlnn1XDhg0VFhamPn36aPv27R7LW7JkiW688UZlZGS437sPPPCATpw4cdZtAfDjwogUgB+NHTt2SJISEhIk2aNUb7/9tm644QY9+OCDWrFihSZNmqTNmzdr5syZkqTu3bvrpZde0saNG9W6dWtJ9oesgIAALVmyRPfdd597mmSfeiTZIy1Dhw7VF198oTFjxqhly5Zav369XnrpJX377beaNWuWR23z58/XBx98oHHjxikxMVGNGzeucRsaNWokSfrwww914403ntcpiuPGjVNcXJwmTJigrVu3aurUqdq9e7f7g6Uk/f3vf9ftt9+u/v376w9/+INKSko0depUdevWTV9//bW7nnXr1ql79+4KDg7WmDFj1LhxY+3YsUMff/yxnn32WV1//fX69ttv9d577+mll15SYmKiJCkpKems2+rt96kqKys1cOBA9ejRQ88//7zeffddjRs3TpGRkXriiSc0YsQIXX/99Xr99dc1cuRIZWVlKTMz84zLsyxLQ4cO1YIFCzR69Gi1b99en332mR5++GHt379fL730kpKSkvT3v/9dzz77rIqKityn67Vs2dKr2qWToezUka3s7Gx99913uuOOO5SamqqNGzfqzTff1MaNG7V8+fJqFzW46aablJmZqUmTJmnNmjX6y1/+ouTkZP3hD39wz/Pzn/9c//jHP3Trrbfqqquu0vz58zV48OBq9WzcuFHdu3dXTEyMHnnkEQUHB+uNN95Qr169tGjRInXp0sVj/nvvvVepqamaOHGili9frjfffFNxcXFaunSpMjIy9Pvf/16zZ8/WCy+8oNatW2vkyJFn3Be16elTTZ06VePGjVP37t31wAMPaNeuXRo2bJjq1aunhg0bVpv/ueeeU0BAgB566CHl5+fr+eef14gRI7RixQr3PB9++KFKSkp0zz33KCEhQV999ZVeeeUV7du3Tx9++KFX9QH4AbMA4Adm2rRpliTr888/tw4fPmzt3bvXev/9962EhAQrPDzc2rdvn7V27VpLkvXzn//c47kPPfSQJcmaP3++ZVmWdejQIUuS9dprr1mWZVl5eXlWQECAdeONN1opKSnu5913331WfHy85XK5LMuyrL///e9WQECAtWTJEo/lv/7665Yk68svv3RPk2QFBARYGzduPK/tGzlypCXJqlevnnXddddZL774orV58+Yz7oeOHTta5eXl7unPP/+8Jcn66KOPLMuyrMLCQisuLs666667PJ6fk5NjxcbGekzv0aOHFR0dbe3evdtj3qrttizLeuGFFyxJ1s6dO6vVdKZtXbBggSXJWrBggcf0nTt3WpKsadOmuafdfvvtliTr97//vXva8ePHrfDwcMvhcFjvv/++e/qWLVssSdZTTz1VrZZTzZo1y5JkPfPMMx7Tb7jhBsvhcFjbt293T+vZs6d12WWXnXV5p87bokUL6/Dhw9bhw4etLVu2WA8//LAlyRo8eLDHvCUlJdWe/95771mSrMWLF7unPfXUU5Yk68477/SY97rrrrMSEhLc96t6/Je//KXHfLfeemu1fTJs2DArJCTE2rFjh3vagQMHrOjoaKtHjx7uaVU91b9/f4/XPCsry3I4HNbdd9/tnlZRUWE1bNjQ6tmz5zn20vn39Ol9UlZWZiUkJFhXXHGF5XQ63fNNnz7dkuSx7qrntmzZ0iorK3NP//Of/2xJstavX++eVtNrMWnSJMvhcHj0ftVrAeDHiVP7APxg9e3bV0lJSUpPT9fNN9+sqKgozZw5Uw0aNNDs2bMl2afunerBBx+UJP33v/+VZI+ktGjRQosXL5YkffnllwoMDNTDDz+s3Nxcbdu2TZI9ItWtWzf3qMGHH36oli1bqkWLFjpy5Ij7VnV64YIFCzzW27NnT7Vq1eq8tmvatGl69dVXlZmZqZkzZ+qhhx5Sy5Yt1adPH+3fv7/a/GPGjFFwcLD7/j333KOgoCD3PsjOzlZeXp5uueUWj1oDAwPVpUsXd62HDx/W4sWLdeeddyojI8NjHd5cAtqbbT2bn//85+7/x8XFqXnz5oqMjNRNN93knt68eXPFxcXpu+++O+uyZs+ercDAQPcIY5UHH3xQlmXp008/rXWdW7ZsUVJSkruXXnjhBQ0dOtTjdEVJCg8Pd/+/tLRUR44ccV9kYc2aNdWWe/fdd3vc7969u44ePaqCggL3Nkmqtk3333+/x/3KykrNnTtXw4YN0yWXXOKeXr9+fd1666364osv3MusMnr0aI/XvEuXLrIsS6NHj3ZPCwwMVKdOnc657yXve7rKqlWrdPToUd11110KCjp5ks2IESNUr169Gp9zxx13eFysonv37pLkUeepr0VxcbGOHDmiq666SpZl6euvvz7n9gD4ceDUPgA/WFOmTFGzZs0UFBSklJQUNW/eXAEB9u+Pdu/erYCAADVt2tTjOampqYqLi9Pu3bvd07p37+7+ULpkyRJ16tRJnTp1Unx8vJYsWaKUlBR98803uvXWW93P2bZtmzZv3uxxStupTv1ujKSznnZ2uoCAAI0dO1Zjx47V0aNH9eWXX+r111/Xp59+qptvvtl9mmGVSy+91ON+VFSU6tev7/7eUlUYrAp5p4uJiZF08oNm1SmOteXNtp5JWFhYtX0bGxurhg0bVgt1sbGxNX4n7FS7d+9WWlqaoqOjPaZXnbZ3aj94q3Hjxnrrrbfkcrm0Y8cOPfvsszp8+HC1iyYcO3ZMEydO1Pvvv1+tP/Lz86st9/QwWxUcjh8/rpiYGHePN2nSxGO+5s2be9w/fPiwSkpKqk2X7O13uVzau3evLrvssjOuOzY2VpKUnp5ebfq59r3kfU9XqXpdTn8fBwUFnfH02LPttyp79uzRk08+qf/85z/V6q/ptQDw40SQAvCD1blzZ/dV+87kfEZSunXrprfeekvfffedlixZou7du8vhcKhbt25asmSJ0tLS5HK53L/ZluzvSLVp00Z/+tOfalzm6R84T/0NuDcSEhI0dOhQDR061P19lt27d7u/d3I+qv6e0d///nelpqZWe/zU3/TXhZq29UyvQ2VlZY3Tz3SluzNNt85xwYMLKTIyUn379nXf79q1qy6//HI9/vjjHhcsuemmm7R06VI9/PDDat++vaKiouRyuTRgwIAa/+aUL7fVm/3vbT110dNnc679VllZqWuuuUbHjh3To48+qhYtWigyMlL79+/XqFGj+PtfANwIUgB+lBo1aiSXy6Vt27Z5XCwgNzdXeXl5Hh/aqgJSdna2Vq5cqV//+teS7AtLTJ06VWlpaYqMjFTHjh3dz2nSpIm++eYb9enTx6vT3r6PTp06adGiRTp48KBH/du2bdPVV1/tvl9UVKSDBw9q0KBB7lolKTk52eMD/+mqTvvasGHDWeuozfZWjQqcftGJ7zMS5I1GjRrp888/V2Fhoceo1JYtW9yP15W2bdvqZz/7md544w099NBDysjI0PHjxzVv3jxNnDhRTz75pHveqtHC2qjq8R07dniMNm3dutVjvqSkJEVERFSbLtnbHxAQUC34Xyxn6ukqVdO2b9/u0eMVFRXatWuX2rZt6/U6169fr2+//VZvv/22x0UysrOza7EFAH7I+I4UgB+lqhDx8ssve0yvGkE69cpmmZmZ7j/A6nQ63Zdp7t69u3bs2KH/+7//05VXXukxcnPTTTdp//79euutt6qt+8SJEyouLq5V3Tk5Odq0aVO16eXl5Zo3b16Npyu++eabcjqd7vtTp05VRUWFBg4cKEnq37+/YmJi9Pvf/95jvipVf8cnKSlJPXr00N/+9jft2bPHY55TRx0iIyMlVQ9FZ9OoUSMFBga6v4tW5bXXXjvvZXwfgwYNUmVlpV599VWP6S+99JIcDod7X9WVRx55RE6n091vVaMkp4/enN6f3qiq+dRRr5qWGRgYqH79+umjjz5yn+4p2b9UmDFjhrp16+Y+vfNCqE1PV+nUqZMSEhL01ltvqaKiwj393XffPa9TCmtS02thWZb+/Oc/12p5AH64GJEC8KPUrl073X777XrzzTeVl5ennj176quvvtLbb7+tYcOGefx2W7JD0/vvv682bdq4R08uv/xyRUZG6ttvv/X4fpQk3Xbbbfrggw909913a8GCBeratasqKyu1ZcsWffDBB/rss8/OedphTfbt26fOnTurd+/e6tOnj1JTU3Xo0CG99957+uabb3T//fe7Lzlepby8XH369NFNN92krVu36rXXXlO3bt00dOhQSfZ3oKZOnarbbrtNl19+uW6++WYlJSVpz549+u9//6uuXbu6A8bkyZPVrVs3XX755RozZowyMzO1a9cu/fe//9XatWslyT0y98QTT+jmm29WcHCwhgwZ4g5YNYmNjdWNN96oV155RQ6HQ02aNNEnn3xS7btCF8qQIUN09dVX64knntCuXbvUrl07zZ07Vx999JHuv//+at8z+r5atWqlQYMG6S9/+Yt++9vfKiEhwX0pd6fTqQYNGmju3Lnuv3lWG+3bt9ctt9yi1157Tfn5+brqqqs0b968an8zSZKeeeYZZWdnq1u3bvrlL3+poKAgvfHGGyorK9Pzzz//fTb1nGrT01VCQkI0YcIE3Xvvverdu7duuukm7dq1S9OnT1eTJk1qNTraokULNWnSRA899JD279+vmJgY/etf/6p1MAPwA+ajqwUCwAVTdYnmlStXnnU+p9NpTZw40crMzLSCg4Ot9PR067HHHrNKS0urzTtlyhRLknXPPfd4TO/bt68lyZo3b16155SXl1t/+MMfrMsuu8wKDQ216tWrZ3Xs2NGaOHGilZ+f755PkjV27Njz2raCggLrz3/+s9W/f3+rYcOGVnBwsBUdHW1lZWVZb731lsclqav2w6JFi6wxY8ZY9erVs6KioqwRI0ZYR48erbbsBQsWWP3797diY2OtsLAwq0mTJtaoUaOsVatWecy3YcMG67rrrrPi4uKssLAwq3nz5tZvf/tbj3l+97vfWQ0aNLACAgI8LoV+tm09fPiwNXz4cCsiIsKqV6+e9Ytf/MLasGFDjZc/j4yMrPb8M12WvFGjRtUuNV6TwsJC64EHHrDS0tKs4OBg69JLL7VeeOEFj316tvXU5GzzLly40OMy5Pv27XPv19jYWOvGG2+0Dhw4UO1S5VWX3D58+LDH8qpe71MvO3/ixAnrvvvusxISEqzIyEhryJAh1t69e2u8JPyaNWus/v37W1FRUVZERIR19dVXW0uXLq1xHae/t85U05leq1N509Nnukz+5MmTrUaNGlmhoaFW586drS+//NLq2LGjNWDAgGrP/fDDDz2eW9Ml9jdt2mT17dvXioqKshITE6277rrL+uabb6rNx+XPgR83h2X58Bu4AIALZvr06brjjju0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5JNP6quvvlLnzp3ldDo1Y8aMaqNUp9q9e7fS0tJqfOyWW25RYGCgx7SysjL36FVgYKBSU1MlSaWlpRo2bJiysrI0YcIEj+ekpaVp9+7dXuwtAIC3CFIAgO/t6quv1tSpU933IyMj3f/v2LGjx7zffPONFixY4BG8quzYsUMnTpxQeXm5unTp4p4eHx+v5s2be1XTN998o+3bt1cb+SktLfU47e2yyy7zCC/169fX+vXrJdmn6QUGBqpnz541riMtLU2DBw/W3/72N3Xu3Fkff/yxysrKdOONN56xrhMnTigsLKzGx1566SV3YKvy6KOPqrKystq8d955pwoLC5Wdna2AAM8TTMLDw1VSUnLGGgAA3x9BCgDwvUVGRp7xVLZTQ5UkFRUVaciQIfrDH/5Qbd769euf99X+HA6HLMvymHbqd5uKiorUsWPHGq9gl5SU5P5/cHBwteVWXT48PDz8nHX8/Oc/12233aaXXnpJ06ZN009/+lNFRESccf7ExER3UDtdampqtf0YHR2tvLw8j2nPPPOMPvvsM3311Vc1niJ47Ngxj20EANQ9ghQA4KK6/PLL9a9//UuNGzdWUFD1H0NNmjRRcHCwVqxYoYyMDEnS8ePH9e2333qMDCUlJengwYPu+9u2bfMYhbn88sv1z3/+U8nJyYqJialVrW3atJHL5dKiRYuqjRRVGTRokCIjIzV16lTNmTNHixcvPusyO3TooKlTp8qyLPcph97417/+paefflqffvqpmjRpUu3xqhG3Dh06eL1sAMD542ITAICLauzYsTp27JhuueUWrVy5Ujt27NBnn32mO+64Q5WVlYqKitLo0aP18MMPa/78+dqwYYNGjRpV7fS13r1769VXX9XXX3+tVatW6e677/YYXRoxYoQSExN17bXXasmSJdq5c6cWLlyo++67T/v27TuvWhs3bqzbb79dd955p2bNmuVexgcffOCeJzAwUKNGjdJjjz2mSy+9VFlZWWdd5tVXX62ioiJt3LjRi71m27Bhg0aOHKlHH31Ul112mXJycpSTk6Njx46551m+fLlCQ0PPWQcA4PshSAEALqq0tDR9+eWXqqysVL9+/dSmTRvdf//9iouLc4elF154Qd27d9eQIUPUt29fdevWrdp3rf74xz8qPT1d3bt316233qqHHnrI45S6iIgILV68WBkZGbr++uvVsmVLjR49WqWlpV6NUE2dOlU33HCDfvnLX6pFixa66667VFxc7DHP6NGjVV5erjvuuOOcy0tISNB1111Xqz+au2rVKpWUlOiZZ55R/fr13bfrr7/ePc97772nESNGnPX0QgDA9+ewTj/BHAAAA/Xq1Uvt27fXyy+/7OtSqlmyZIn69OmjvXv3KiUl5Zzzr1u3Ttdcc4127NhR40U3auvIkSNq3ry5Vq1aVeMfRAYA1B1GpAAAqKWysjLt27dPEyZM0I033nheIUqS2rZtqz/84Q/auXNnndaza9cuvfbaa4QoALgIuNgEAAC19N5772n06NFq37693nnnHa+eO2rUqDqvp1OnTurUqVOdLxcAUB2n9gEAAACAlzi1DwAAAAC8RJACAAAAAC8RpAAAAADASwQpAAAAAPASQQoAAAAAvESQAgAAAAAvEaQAAAAAwEsEKQAAAADw0v8Ds3RsNq2rh/0AAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10, 6))\n",
"plt.plot(freqs[:N // 2], power_spectrum[:N // 2], color='b') # 只绘制正频率部分\n",
"plt.title('Power Spectrum of Random Signal')\n",
"plt.xlabel('Frequency (Hz)')\n",
"plt.ylabel('Power')\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Estimated Frequencies: [ 4. 6. 8. 11. 16. 19. 21. 24. 27. 30. 33. 36. 41. 46.\n",
" 50. 52. 54. 57. 60. 62. 64. 67. 69. 71. 74. 79. 81. 83.\n",
" 85. 87. 90. 92. 94. 96. 101. 103. 105. 107. 110. 112. 114. 118.\n",
" 121. 124. 126. 128. 130. 133. 136. 140. 144. 146. 150. 158. 162. 166.\n",
" 169. 171. 175. 182. 187. 190. 192. 195. 197. 200. 202. 207. 209. 211.\n",
" 216. 218. 221. 224. 227. 232. 234. 238. 241. 244. 248. 251. 254. 257.\n",
" 260. 269. 271. 275. 278. 280. 282. 285. 289. 292. 295. 299. 305. 308.\n",
" 311. 314. 316. 319. 323. 330. 333. 339. 344. 347. 352. 354. 357. 359.\n",
" 362. 368. 371. 374. 378. 383. 386. 389. 394. 398. 403. 405. 410. 412.\n",
" 414. 418. 420. 422. 425. 427. 430. 432. 434. 436. 440. 442. 446. 448.\n",
" 450. 455. 463. 465. 469. 471. 474. 477. 479. 482. 484. 487. 489. 492.\n",
" 495.]\n"
]
}
],
"source": [
"from scipy.signal import find_peaks\n",
"\n",
"# 找到功率谱的峰值\n",
"peaks, _ = find_peaks(power_spectrum[:N // 2], height=0.1) \n",
"estimated_freqs = freqs[peaks]\n",
"\n",
"print(\"Estimated Frequencies: \", estimated_freqs)\n",
"# 这里我们假设峰值频率就是我们要估计的信号频率"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.7.16 ('torch')",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.16"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "e31e81658f5534225608c276b55dfe85823db7d131e1a4c9ee51920df6b43463"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment