{
  "id": 596715,
  "title": "IMU Data Denoising Based on Wavelet Transform",
  "url": "/competitions/cmi-detect-behavior-with-sensor-data/discussion/596715",
  "author_name": "Peter",
  "post_date": "2025-08-05T02:07:54.217000",
  "votes": 10,
  "comment_count": 0,
  "views": 0,
  "content": "<p>In the noise reduction process of IMU (Inertial Measurement Unit), wavelet denoising is an effective method. The basic principle of wavelet denoising is to use the multi-resolution time-frequency localization characteristics of wavelets to decompose the components of different frequencies in the signal into different subspaces, and then process the wavelet coefficients in these subspaces to remove noise.</p>\n<hr>\n<p>Specifically, the process of wavelet denoising can be divided into the following three steps:</p>\n<p>1.Perform wavelet transformation on the noisy IMU signal and decompose it into different wavelet subspaces.</p>\n<p>2.Threshold the coefficients in these wavelet subspaces, that is, coefficients below a certain threshold are regarded as noise and set to zero, while coefficients above the threshold are retained, and these coefficients usually contain useful signal information.</p>\n<p>3.Perform inverse transformation on the processed wavelet coefficients to obtain the denoised signal.</p>\n<hr>\n<p>The IMU data denoising method based on wavelet decomposition has the following advantages:</p>\n<p>1.Able to effectively separate and remove <strong>high-frequency noise</strong> and <strong>low-frequency drift</strong>, improving the accuracy and reliability of IMU data.</p>\n<p>2.Have good time-frequency analysis capabilities and be able to process the time and frequency information of signals at the same time.</p>\n<p>3.Suitable for different types of IMU data and different application scenarios, with strong versatility and flexibility.</p>\n<p><strong>The wavelet functions we can use:</strong><br>\n<em>['bior1.1', 'bior1.3', 'bior1.5', 'bior2.2', 'bior2.4', 'bior2.6', 'bior2.8', 'bior3.1', 'bior3.3', 'bior3.5', 'bior3.7', 'bior3.9', 'bior4.4', 'bior5.5', 'bior6.8', 'cgau1', 'cgau2', 'cgau3', 'cgau4', 'cgau5', 'cgau6', 'cgau7', 'cgau8', 'cmor', 'coif1', 'coif2', 'coif3', 'coif4', 'coif5', 'coif6', 'coif7', 'coif8', 'coif9', 'coif10', 'coif11', 'coif12', 'coif13', 'coif14', 'coif15', 'coif16', 'coif17', 'db1', 'db2', 'db3', 'db4', 'db5', 'db6', 'db7', 'db8', 'db9', 'db10', 'db11', 'db12', 'db13', 'db14', 'db15', 'db16', 'db17', 'db18', 'db19', 'db20', 'db21', 'db22', 'db23', 'db24', 'db25', 'db26', 'db27', 'db28', 'db29', 'db30', 'db31', 'db32', 'db33', 'db34', 'db35', 'db36', 'db37', 'db38', 'dmey', 'fbsp', 'gaus1', 'gaus2', 'gaus3', 'gaus4', 'gaus5', 'gaus6', 'gaus7', 'gaus8', 'haar', 'mexh', 'morl', 'rbio1.1', 'rbio1.3', 'rbio1.5', 'rbio2.2', 'rbio2.4', 'rbio2.6', 'rbio2.8', 'rbio3.1', 'rbio3.3', 'rbio3.5', 'rbio3.7', 'rbio3.9', 'rbio4.4', 'rbio5.5', 'rbio6.8', 'shan', 'sym2', 'sym3', 'sym4', 'sym5', 'sym6', 'sym7', 'sym8', 'sym9', 'sym10', 'sym11', 'sym12', 'sym13', 'sym14', 'sym15', 'sym16', 'sym17', 'sym18', 'sym19', 'sym20']</em></p>\n<pre><code> ():\n     np.mean(np.absolute(d - np.mean(d, axis)), axis)\n\n\n ():    \n    coeff = pywt.wavedec(x, wavelet, mode=)\n    sigma = (/) * maddest(coeff[-level])\n\n    uthresh = sigma * np.sqrt(*np.log((x)))\n    coeff[:] = (pywt.threshold(i, value=uthresh, mode=)  i  coeff[:])\n\n    ret=pywt.waverec(coeff, wavelet, mode=)\n\n     ret\n</code></pre>\n<h4>✅ Phase Region (e.g., Static States)</h4>\n<p>Characteristics: Dominated by low-frequency components, relatively flat, but sensitive to noise.</p>\n<p>Frequency Content: Mostly low-frequency, with small amounts of high-frequency noise mixed in.</p>\n<p>Recommended Wavelets:</p>\n<p><code>Haar (db1)</code>: The simplest wavelet. Useful for detecting abrupt changes even in static states.</p>\n<p><code>Db2, Db3</code>: Smoother filters suitable for detecting short transitions.</p>\n<p><code>Biorthogonal (bior3.3, bior4.4)</code>: Stable in the low-frequency domain, and effective for derivative/integral-based signal analysis.</p>\n<p>✔ Reason: Since the phase region involves little to no movement or very slow changes, the key is to emphasize low-frequency components while effectively removing high-frequency noise.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F16438831%2Fda27cf8eb390a1d4c2f758586595e2f1%2Fbior3.3.JPG?generation=1754372898232850&amp;alt=media\" alt=\"\"></p>\n<h4>✅ Gesture Region (e.g., Active Movement Segments)</h4>\n<p>Characteristics: Contains repetitive or structured motion patterns, often with periodicity or consistent shapes.</p>\n<p>Frequency Content: A combination of low-frequency (overall motion trend) and mid-to-high frequency (fine movement details).</p>\n<p>Recommended Wavelets:</p>\n<p><code>Daubechies (db4, db6)</code>: Well-suited for capturing transient patterns and local variations in motion. Widely used in IMU-based activity recognition.</p>\n<p><code>Symlets (sym4)</code>: A symmetric version of Daubechies, offering more accurate reconstruction and better energy compaction.</p>\n<p><code>Coiflets (coif3, coif5)</code>: Useful when higher-order derivatives or detailed features are needed.</p>\n<p>✔ Reason: The gesture region often includes repeated or structured motion, so wavelets that can preserve both the global trend and local variations are ideal. These wavelets help extract informative features while reducing noise.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F16438831%2F2ac330aa8e7385bcfafdcde9532ee4c1%2Fdb6.JPG?generation=1754372398562525&amp;alt=media\" alt=\"\"></p>",
  "messages": [
    {
      "id": 3263271,
      "postDate": "2025-08-05T02:07:54.217Z",
      "content": "<p>In the noise reduction process of IMU (Inertial Measurement Unit), wavelet denoising is an effective method. The basic principle of wavelet denoising is to use the multi-resolution time-frequency localization characteristics of wavelets to decompose the components of different frequencies in the signal into different subspaces, and then process the wavelet coefficients in these subspaces to remove noise.</p>\n<hr>\n<p>Specifically, the process of wavelet denoising can be divided into the following three steps:</p>\n<p>1.Perform wavelet transformation on the noisy IMU signal and decompose it into different wavelet subspaces.</p>\n<p>2.Threshold the coefficients in these wavelet subspaces, that is, coefficients below a certain threshold are regarded as noise and set to zero, while coefficients above the threshold are retained, and these coefficients usually contain useful signal information.</p>\n<p>3.Perform inverse transformation on the processed wavelet coefficients to obtain the denoised signal.</p>\n<hr>\n<p>The IMU data denoising method based on wavelet decomposition has the following advantages:</p>\n<p>1.Able to effectively separate and remove <strong>high-frequency noise</strong> and <strong>low-frequency drift</strong>, improving the accuracy and reliability of IMU data.</p>\n<p>2.Have good time-frequency analysis capabilities and be able to process the time and frequency information of signals at the same time.</p>\n<p>3.Suitable for different types of IMU data and different application scenarios, with strong versatility and flexibility.</p>\n<p><strong>The wavelet functions we can use:</strong><br>\n<em>['bior1.1', 'bior1.3', 'bior1.5', 'bior2.2', 'bior2.4', 'bior2.6', 'bior2.8', 'bior3.1', 'bior3.3', 'bior3.5', 'bior3.7', 'bior3.9', 'bior4.4', 'bior5.5', 'bior6.8', 'cgau1', 'cgau2', 'cgau3', 'cgau4', 'cgau5', 'cgau6', 'cgau7', 'cgau8', 'cmor', 'coif1', 'coif2', 'coif3', 'coif4', 'coif5', 'coif6', 'coif7', 'coif8', 'coif9', 'coif10', 'coif11', 'coif12', 'coif13', 'coif14', 'coif15', 'coif16', 'coif17', 'db1', 'db2', 'db3', 'db4', 'db5', 'db6', 'db7', 'db8', 'db9', 'db10', 'db11', 'db12', 'db13', 'db14', 'db15', 'db16', 'db17', 'db18', 'db19', 'db20', 'db21', 'db22', 'db23', 'db24', 'db25', 'db26', 'db27', 'db28', 'db29', 'db30', 'db31', 'db32', 'db33', 'db34', 'db35', 'db36', 'db37', 'db38', 'dmey', 'fbsp', 'gaus1', 'gaus2', 'gaus3', 'gaus4', 'gaus5', 'gaus6', 'gaus7', 'gaus8', 'haar', 'mexh', 'morl', 'rbio1.1', 'rbio1.3', 'rbio1.5', 'rbio2.2', 'rbio2.4', 'rbio2.6', 'rbio2.8', 'rbio3.1', 'rbio3.3', 'rbio3.5', 'rbio3.7', 'rbio3.9', 'rbio4.4', 'rbio5.5', 'rbio6.8', 'shan', 'sym2', 'sym3', 'sym4', 'sym5', 'sym6', 'sym7', 'sym8', 'sym9', 'sym10', 'sym11', 'sym12', 'sym13', 'sym14', 'sym15', 'sym16', 'sym17', 'sym18', 'sym19', 'sym20']</em></p>\n<pre><code> ():\n     np.mean(np.absolute(d - np.mean(d, axis)), axis)\n\n\n ():    \n    coeff = pywt.wavedec(x, wavelet, mode=)\n    sigma = (/) * maddest(coeff[-level])\n\n    uthresh = sigma * np.sqrt(*np.log((x)))\n    coeff[:] = (pywt.threshold(i, value=uthresh, mode=)  i  coeff[:])\n\n    ret=pywt.waverec(coeff, wavelet, mode=)\n\n     ret\n</code></pre>\n<h4>✅ Phase Region (e.g., Static States)</h4>\n<p>Characteristics: Dominated by low-frequency components, relatively flat, but sensitive to noise.</p>\n<p>Frequency Content: Mostly low-frequency, with small amounts of high-frequency noise mixed in.</p>\n<p>Recommended Wavelets:</p>\n<p><code>Haar (db1)</code>: The simplest wavelet. Useful for detecting abrupt changes even in static states.</p>\n<p><code>Db2, Db3</code>: Smoother filters suitable for detecting short transitions.</p>\n<p><code>Biorthogonal (bior3.3, bior4.4)</code>: Stable in the low-frequency domain, and effective for derivative/integral-based signal analysis.</p>\n<p>✔ Reason: Since the phase region involves little to no movement or very slow changes, the key is to emphasize low-frequency components while effectively removing high-frequency noise.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F16438831%2Fda27cf8eb390a1d4c2f758586595e2f1%2Fbior3.3.JPG?generation=1754372898232850&amp;alt=media\" alt=\"\"></p>\n<h4>✅ Gesture Region (e.g., Active Movement Segments)</h4>\n<p>Characteristics: Contains repetitive or structured motion patterns, often with periodicity or consistent shapes.</p>\n<p>Frequency Content: A combination of low-frequency (overall motion trend) and mid-to-high frequency (fine movement details).</p>\n<p>Recommended Wavelets:</p>\n<p><code>Daubechies (db4, db6)</code>: Well-suited for capturing transient patterns and local variations in motion. Widely used in IMU-based activity recognition.</p>\n<p><code>Symlets (sym4)</code>: A symmetric version of Daubechies, offering more accurate reconstruction and better energy compaction.</p>\n<p><code>Coiflets (coif3, coif5)</code>: Useful when higher-order derivatives or detailed features are needed.</p>\n<p>✔ Reason: The gesture region often includes repeated or structured motion, so wavelets that can preserve both the global trend and local variations are ideal. These wavelets help extract informative features while reducing noise.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F16438831%2F2ac330aa8e7385bcfafdcde9532ee4c1%2Fdb6.JPG?generation=1754372398562525&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "In the noise reduction process of IMU (Inertial Measurement Unit), wavelet denoising is an effective method. The basic principle of wavelet denoising is to use the multi-resolution time-frequency localization characteristics of wavelets to decompose the components of different frequencies in the signal into different subspaces, and then process the wavelet coefficients in these subspaces to remove noise.\n\n___\n\nSpecifically, the process of wavelet denoising can be divided into the following three steps:\n\n1.Perform wavelet transformation on the noisy IMU signal and decompose it into different wavelet subspaces.\n\n2.Threshold the coefficients in these wavelet subspaces, that is, coefficients below a certain threshold are regarded as noise and set to zero, while coefficients above the threshold are retained, and these coefficients usually contain useful signal information.\n\n3.Perform inverse transformation on the processed wavelet coefficients to obtain the denoised signal.\n\n___\n\nThe IMU data denoising method based on wavelet decomposition has the following advantages:\n\n1.Able to effectively separate and remove **high-frequency noise** and **low-frequency drift**, improving the accuracy and reliability of IMU data.\n\n2.Have good time-frequency analysis capabilities and be able to process the time and frequency information of signals at the same time.\n\n3.Suitable for different types of IMU data and different application scenarios, with strong versatility and flexibility.\n\n**The wavelet functions we can use:**\n*['bior1.1', 'bior1.3', 'bior1.5', 'bior2.2', 'bior2.4', 'bior2.6', 'bior2.8', 'bior3.1', 'bior3.3', 'bior3.5', 'bior3.7', 'bior3.9', 'bior4.4', 'bior5.5', 'bior6.8', 'cgau1', 'cgau2', 'cgau3', 'cgau4', 'cgau5', 'cgau6', 'cgau7', 'cgau8', 'cmor', 'coif1', 'coif2', 'coif3', 'coif4', 'coif5', 'coif6', 'coif7', 'coif8', 'coif9', 'coif10', 'coif11', 'coif12', 'coif13', 'coif14', 'coif15', 'coif16', 'coif17', 'db1', 'db2', 'db3', 'db4', 'db5', 'db6', 'db7', 'db8', 'db9', 'db10', 'db11', 'db12', 'db13', 'db14', 'db15', 'db16', 'db17', 'db18', 'db19', 'db20', 'db21', 'db22', 'db23', 'db24', 'db25', 'db26', 'db27', 'db28', 'db29', 'db30', 'db31', 'db32', 'db33', 'db34', 'db35', 'db36', 'db37', 'db38', 'dmey', 'fbsp', 'gaus1', 'gaus2', 'gaus3', 'gaus4', 'gaus5', 'gaus6', 'gaus7', 'gaus8', 'haar', 'mexh', 'morl', 'rbio1.1', 'rbio1.3', 'rbio1.5', 'rbio2.2', 'rbio2.4', 'rbio2.6', 'rbio2.8', 'rbio3.1', 'rbio3.3', 'rbio3.5', 'rbio3.7', 'rbio3.9', 'rbio4.4', 'rbio5.5', 'rbio6.8', 'shan', 'sym2', 'sym3', 'sym4', 'sym5', 'sym6', 'sym7', 'sym8', 'sym9', 'sym10', 'sym11', 'sym12', 'sym13', 'sym14', 'sym15', 'sym16', 'sym17', 'sym18', 'sym19', 'sym20']*\n\n\n```python\ndef maddest(d, axis=None):\n    return np.mean(np.absolute(d - np.mean(d, axis)), axis)\n\n\ndef denoise(x, wavelet='haar', level=1):    \n    coeff = pywt.wavedec(x, wavelet, mode=\"per\")\n    sigma = (1/0.6745) * maddest(coeff[-level])\n\n    uthresh = sigma * np.sqrt(2*np.log(len(x)))\n    coeff[1:] = (pywt.threshold(i, value=uthresh, mode='hard') for i in coeff[1:])\n\n    ret=pywt.waverec(coeff, wavelet, mode='per')\n    \n    return ret\n```\n\n#### ✅ Phase Region (e.g., Static States)\n\nCharacteristics: Dominated by low-frequency components, relatively flat, but sensitive to noise.\n\nFrequency Content: Mostly low-frequency, with small amounts of high-frequency noise mixed in.\n\nRecommended Wavelets:\n\n`Haar (db1)`: The simplest wavelet. Useful for detecting abrupt changes even in static states.\n\n`Db2, Db3`: Smoother filters suitable for detecting short transitions.\n\n`Biorthogonal (bior3.3, bior4.4)`: Stable in the low-frequency domain, and effective for derivative/integral-based signal analysis.\n\n✔ Reason: Since the phase region involves little to no movement or very slow changes, the key is to emphasize low-frequency components while effectively removing high-frequency noise.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F16438831%2Fda27cf8eb390a1d4c2f758586595e2f1%2Fbior3.3.JPG?generation=1754372898232850&alt=media)\n\n#### ✅ Gesture Region (e.g., Active Movement Segments)\nCharacteristics: Contains repetitive or structured motion patterns, often with periodicity or consistent shapes.\n\nFrequency Content: A combination of low-frequency (overall motion trend) and mid-to-high frequency (fine movement details).\n\nRecommended Wavelets:\n\n`Daubechies (db4, db6)`: Well-suited for capturing transient patterns and local variations in motion. Widely used in IMU-based activity recognition.\n\n`Symlets (sym4)`: A symmetric version of Daubechies, offering more accurate reconstruction and better energy compaction.\n\n`Coiflets (coif3, coif5)`: Useful when higher-order derivatives or detailed features are needed.\n\n✔ Reason: The gesture region often includes repeated or structured motion, so wavelets that can preserve both the global trend and local variations are ideal. These wavelets help extract informative features while reducing noise.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F16438831%2F2ac330aa8e7385bcfafdcde9532ee4c1%2Fdb6.JPG?generation=1754372398562525&alt=media)",
      "votes": 10
    }
  ],
  "comments": [],
  "raw_markdown_by_id": {
    "3263271": "In the noise reduction process of IMU (Inertial Measurement Unit), wavelet denoising is an effective method. The basic principle of wavelet denoising is to use the multi-resolution time-frequency localization characteristics of wavelets to decompose the components of different frequencies in the signal into different subspaces, and then process the wavelet coefficients in these subspaces to remove noise.\n\n___\n\nSpecifically, the process of wavelet denoising can be divided into the following three steps:\n\n1.Perform wavelet transformation on the noisy IMU signal and decompose it into different wavelet subspaces.\n\n2.Threshold the coefficients in these wavelet subspaces, that is, coefficients below a certain threshold are regarded as noise and set to zero, while coefficients above the threshold are retained, and these coefficients usually contain useful signal information.\n\n3.Perform inverse transformation on the processed wavelet coefficients to obtain the denoised signal.\n\n___\n\nThe IMU data denoising method based on wavelet decomposition has the following advantages:\n\n1.Able to effectively separate and remove **high-frequency noise** and **low-frequency drift**, improving the accuracy and reliability of IMU data.\n\n2.Have good time-frequency analysis capabilities and be able to process the time and frequency information of signals at the same time.\n\n3.Suitable for different types of IMU data and different application scenarios, with strong versatility and flexibility.\n\n**The wavelet functions we can use:**\n*['bior1.1', 'bior1.3', 'bior1.5', 'bior2.2', 'bior2.4', 'bior2.6', 'bior2.8', 'bior3.1', 'bior3.3', 'bior3.5', 'bior3.7', 'bior3.9', 'bior4.4', 'bior5.5', 'bior6.8', 'cgau1', 'cgau2', 'cgau3', 'cgau4', 'cgau5', 'cgau6', 'cgau7', 'cgau8', 'cmor', 'coif1', 'coif2', 'coif3', 'coif4', 'coif5', 'coif6', 'coif7', 'coif8', 'coif9', 'coif10', 'coif11', 'coif12', 'coif13', 'coif14', 'coif15', 'coif16', 'coif17', 'db1', 'db2', 'db3', 'db4', 'db5', 'db6', 'db7', 'db8', 'db9', 'db10', 'db11', 'db12', 'db13', 'db14', 'db15', 'db16', 'db17', 'db18', 'db19', 'db20', 'db21', 'db22', 'db23', 'db24', 'db25', 'db26', 'db27', 'db28', 'db29', 'db30', 'db31', 'db32', 'db33', 'db34', 'db35', 'db36', 'db37', 'db38', 'dmey', 'fbsp', 'gaus1', 'gaus2', 'gaus3', 'gaus4', 'gaus5', 'gaus6', 'gaus7', 'gaus8', 'haar', 'mexh', 'morl', 'rbio1.1', 'rbio1.3', 'rbio1.5', 'rbio2.2', 'rbio2.4', 'rbio2.6', 'rbio2.8', 'rbio3.1', 'rbio3.3', 'rbio3.5', 'rbio3.7', 'rbio3.9', 'rbio4.4', 'rbio5.5', 'rbio6.8', 'shan', 'sym2', 'sym3', 'sym4', 'sym5', 'sym6', 'sym7', 'sym8', 'sym9', 'sym10', 'sym11', 'sym12', 'sym13', 'sym14', 'sym15', 'sym16', 'sym17', 'sym18', 'sym19', 'sym20']*\n\n\n```python\ndef maddest(d, axis=None):\n    return np.mean(np.absolute(d - np.mean(d, axis)), axis)\n\n\ndef denoise(x, wavelet='haar', level=1):    \n    coeff = pywt.wavedec(x, wavelet, mode=\"per\")\n    sigma = (1/0.6745) * maddest(coeff[-level])\n\n    uthresh = sigma * np.sqrt(2*np.log(len(x)))\n    coeff[1:] = (pywt.threshold(i, value=uthresh, mode='hard') for i in coeff[1:])\n\n    ret=pywt.waverec(coeff, wavelet, mode='per')\n    \n    return ret\n```\n\n#### ✅ Phase Region (e.g., Static States)\n\nCharacteristics: Dominated by low-frequency components, relatively flat, but sensitive to noise.\n\nFrequency Content: Mostly low-frequency, with small amounts of high-frequency noise mixed in.\n\nRecommended Wavelets:\n\n`Haar (db1)`: The simplest wavelet. Useful for detecting abrupt changes even in static states.\n\n`Db2, Db3`: Smoother filters suitable for detecting short transitions.\n\n`Biorthogonal (bior3.3, bior4.4)`: Stable in the low-frequency domain, and effective for derivative/integral-based signal analysis.\n\n✔ Reason: Since the phase region involves little to no movement or very slow changes, the key is to emphasize low-frequency components while effectively removing high-frequency noise.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F16438831%2Fda27cf8eb390a1d4c2f758586595e2f1%2Fbior3.3.JPG?generation=1754372898232850&alt=media)\n\n#### ✅ Gesture Region (e.g., Active Movement Segments)\nCharacteristics: Contains repetitive or structured motion patterns, often with periodicity or consistent shapes.\n\nFrequency Content: A combination of low-frequency (overall motion trend) and mid-to-high frequency (fine movement details).\n\nRecommended Wavelets:\n\n`Daubechies (db4, db6)`: Well-suited for capturing transient patterns and local variations in motion. Widely used in IMU-based activity recognition.\n\n`Symlets (sym4)`: A symmetric version of Daubechies, offering more accurate reconstruction and better energy compaction.\n\n`Coiflets (coif3, coif5)`: Useful when higher-order derivatives or detailed features are needed.\n\n✔ Reason: The gesture region often includes repeated or structured motion, so wavelets that can preserve both the global trend and local variations are ideal. These wavelets help extract informative features while reducing noise.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F16438831%2F2ac330aa8e7385bcfafdcde9532ee4c1%2Fdb6.JPG?generation=1754372398562525&alt=media)"
  }
}