在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于STM32單片機的音樂頻譜顯示器設計

CHANBAEK ? 來源:電子甲 ? 作者:電子甲 ? 2023-08-22 15:47 ? 次閱讀
  1. 系統設計主要涉及的有作為核心進行計算的STM32單片機的主控電路設計、實現藍牙電磁數據傳輸的MH-M18藍牙音頻采集電路的設計、負責提供音樂切換控制信號的按鍵狀態采集電路、對FFT變換計算所得頻譜進行展示的OLED顯示電路以及作為物理功放的LM386音頻放大電路設計。
  2. 原理圖:
    圖片

3.程序框圖

圖片

主程序首先進行初始化,對系統的ADC定時器、OLED等等進行初始參數配置,其后是對設計目標的計算工作。本設計主要分為三個大的模塊,一是藍牙的數據接收,二是音樂的傳輸播放,三是時域信號傅里葉變換后的頻域展示,其中最主要的是時域信號傅里葉變換后的頻域展示。主程序main中主要對頻譜在OLED上的顯示規則、FFT計算的相關需求進行了設計。

圖片

主程序的總體設計思路是系統開機后首先對STM32單片機內部進行復位,之后是對各項設置進行一個初始化操作,包括定時器、模數轉換器、通信協議等方面,然后程序開始正式運行,執行功放和FFT任務,進入循環和等待控制信號。

圖片

藍牙傳輸模塊的作用是接收源設備所發射的藍牙音頻信號,并提供給音頻放大電路進行放大及播放。藍牙傳輸子程序,首先需要判斷藍牙狀態,確認藍牙開啟后進行參數掃描,掃描后選擇目標設備來進行連接,連接成功之后即可根據指令進行音頻信號接收。本設計的藍牙音樂源為手機,因此需設置適用于手機傳輸的波特率,并于手機相連。

圖片

按鍵狀態采集程序是用于實現對音樂的切換,完成上一曲、下一曲及暫停功能。按鍵狀態的采集程序較為簡單,僅需要對按鍵狀態采集電路中各個按鍵的狀態作出判斷,當按下不同按鈕后,STM32單片機獲取到不同的狀態信息,從而通過判斷語句實現音樂的切換功能。

4.算法的實現

傅里葉變換是時域與頻域之間轉換的重要工具??焖俑凳献儞QFFT是一種用于計算離散傅里葉變換(DFT)的一種快速算法,它是對離散傅里葉變換的一種改進,常用于通信領域。它是傅里葉變化的一大進步,對于計算機系統中的時頻變換來說意義重大,根據奇、偶、虛、實等特性,它把原來復雜度為O(n ^2^ )的樸素多項式乘法轉化為了O(nlogn)的算法。

DFT的復雜度較高,不利于計算機計算,其計算表達式為

FFT算法利用DFT的奇偶相關特性,使時頻變換算法復雜度大大降低,具體的算法原理可見文件夾“DSP_Lib”中算法程序。

利用FFT實現交互的程序設計也可參見主函數main。首先要進行模數轉換,將電子元件中通過電壓傳遞的模擬信號采樣為數字信號,設計程序對數字信號進行緩存,緩存到一定數據量后對該段信號進行FFT計算,得到其頻譜數據;之后清楚數據,重復上述緩存及計算步驟。本設計需要采集的采樣頻率是10 kHz^[14]^。本設計對ADC緩存設計數量為256,即對256個時序信號點進行FFT算法運算,然后反饋至OLED顯示。音頻信號采集、FFT運算及OLED顯示效果程序設計思路:程序系統每次進入ADC_DMA數據傳輸中斷回滾函數后,就可以將ADC_DMA數據傳輸通道關閉,之后將 ADC轉換的數據展開傅里葉(FFT)運算、計算各次諧波幅值,根據用戶設定的特效模式,將各次諧波賦值代入到相應算法中,進行特效運算,最后OLED顯示音樂頻譜效果。FFT運算及OLED顯示流程如圖所示。

圖片

5.主代碼展示:

/* 變量定義 */
uint16_t adc_buff[NPT];                //ADC緩存變量
uint8_t AdcConvEnd;                    //DMA轉換完成標志位
long InBufArray[NPT];                  //輸入數組
long OutBufArray[NPT/2];              //輸出數組
long MagBufArray[NPT/2];              //諧波數組
uint8_t flag;
uint8_t key_flag;                      //按鍵標志位


/* USER CODE END PV */


/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */


void GetPowerMag()
{
  signed short lX,lY;
  float X,Y,Mag;
  unsigned short i;
  for(i=0; i< NPT/2; i++)
  {
    lX  = (OutBufArray[i] < < 16) > > 16;
    lY  = (OutBufArray[i] > > 16);

    //除以32768再乘65536是為了符合浮點數計算規律
    X = NPT * ((float)lX) / 32768;
    Y = NPT * ((float)lY) / 32768;
    Mag = sqrt(X * X + Y * Y) / NPT;
    if(i == 0)
      MagBufArray[i] = (unsigned long)(Mag * 32768);
    else
      MagBufArray[i] = (unsigned long)(Mag * 65536);   //MagBufArray[]為計算輸出的幅值數組
  }
}


/* 顯示柱子高度 */
void display(uint8_t x, uint8_t height)
{
  uint8_t i, j, data, k;
  for(i=0; i< 8; i++)//顯示高度
  {
    OLED_Set_Pos(x*4, i);

    if(((i+1)*8) <= (64-height))
      data = 0x00;
    else{
      if((((i+1)*8)-(64-height)) < 8){
        data = 0;
        for(k=0; k< (((i+1)*8)-(64-height)); k++)
        {
          data > >= 1;
          data |= 0x80;
        }
      }
      else
        data = 0xff;
    }

    for(j=0; j< 3; j++)
    {
      OLED_WR_Byte(data, OLED_DATA);
    }
  }
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6039

    文章

    44583

    瀏覽量

    636492
  • 顯示器
    +關注

    關注

    21

    文章

    4990

    瀏覽量

    140137
  • STM32
    +關注

    關注

    2270

    文章

    10910

    瀏覽量

    356603
  • lm386
    +關注

    關注

    9

    文章

    101

    瀏覽量

    54363
  • 音頻放大電路

    關注

    7

    文章

    34

    瀏覽量

    26769
收藏 人收藏

    評論

    相關推薦

    手把手教你用51單片機DIY音樂頻譜顯示

    `手把手教你用51單片機DIY音樂頻譜顯示`
    發表于 08-15 23:13

    單片機制作音樂頻譜顯示器

    見他們好多人都用單片機作的音樂頻譜顯示器,不知道如何做到的,記得學習數字信號處理的時候須要用到好多FFT啊之類的算法,這里也會用到嗎?如何編程實現的呢?求助
    發表于 08-25 22:09

    求基于單片機音樂頻譜顯示設計

    各位大神,跪求基于單片機音樂頻譜顯示設計,主要要求是:音樂不是外接的音樂,需要自己寫
    發表于 04-11 22:52

    很炫的音樂頻譜——五彩音樂頻譜顯示器

    ` 本帖最后由 chinayuyi 于 2013-5-27 17:00 編輯 很炫的音樂頻譜——五彩音樂頻譜顯示器附出處:百度下“羽翼電
    發表于 05-27 16:57

    炫彩音樂顯示器程序 思路

    51單片機炫彩音樂顯示器程序應該怎么寫
    發表于 03-24 16:40

    基于RT-Thread+RA6M4的FFT音樂頻譜顯示器制作方案

    1、基于RT-Thread+RA6M4的FFT音樂頻譜顯示器制作本項目制作了一個FFT音樂頻譜顯示器
    發表于 07-25 12:46

    基于51單片機音樂噴泉設計頻譜彩燈音樂盒播放源代碼分享

    基于51單片機音樂噴泉設計頻譜彩燈音樂盒播放源代碼
    發表于 09-26 07:16

    用51單片機DIY音樂頻譜顯示

    該資源是手把手教你用51單片機DIY音樂頻譜顯示
    發表于 09-27 07:42

    音樂頻譜-PCB及代碼

    基于stc12c5a單片機音樂頻譜顯示屏幕的制作,可以根據音樂顯示出不同的
    發表于 02-29 15:08 ?65次下載

    單片機控制LED點陣顯示器

    單片機控制LED點陣顯示器,有興趣的同學可以下載學習
    發表于 04-28 17:05 ?40次下載

    單片機控制LED點陣顯示器

    單片機控制LED點陣顯示器,很好的設計資料,快來下載學習吧。
    發表于 05-09 17:35 ?28次下載

    基于增強型8051單片機音樂頻譜顯示器的設計

    基于增強型8051單片機音樂頻譜顯示器的設計基于增強型8051單片機音樂
    發表于 05-20 16:50 ?26次下載

    DIY音樂頻譜顯示源代碼(源碼)

    51單片機DIY音樂頻譜顯示教程+源代碼,感興趣的小伙伴們可以瞧一瞧。
    發表于 11-22 11:15 ?100次下載

    使用51單片機實現音樂噴泉頻譜彩燈音樂盒播放的源代碼免費下載

    本文檔的主要內容詳細介紹的是使用51單片機實現音樂噴泉頻譜彩燈音樂盒播放的源代碼免費下載。
    發表于 05-28 14:55 ?111次下載
    使用51<b class='flag-5'>單片機</b>實現<b class='flag-5'>音樂</b>噴泉<b class='flag-5'>頻譜</b>彩燈<b class='flag-5'>音樂</b>盒播放<b class='flag-5'>器</b>的源代碼免費下載

    stm32音樂頻譜OLED屏顯示

    基于STM32F103和FFT變換的音樂頻譜顯示
    發表于 06-17 14:52 ?52次下載
    主站蜘蛛池模板: 性色视频在线| 交专区videossex另类| 国产一级大片免费看| 国产精品7m凸凹视频分类大全 | 亚洲男人的天堂久久香蕉| 视频一本大道香蕉久在线播放 | 五月丁香| 天堂中文最新版www| 手机看片日韩永久福利盒子| 免费在线黄色网址| 午夜国产精品久久影院| 国产成人经典三级在线观看| 久久综合久久精品| 日本三级理论| 生活片毛片| 午夜精品网| 在线天堂视频| 国产在线精品一区二区夜色| 中文字幕第二区| 91夫妻视频| 4444kk在线看片| 丁香五月情| 丁香激情综合| 被cao到合不拢腿腐男男| 美女和帅哥在床上玩的不可描述| 天天干天天干| 一级大片免费看| 7m凹凸精品分类大全免费| 国产精品久久久亚洲| 五月天婷婷社区| 国产精品久久久久久久久久影院| 在线看免费| sihu免费观看在线高清| 国产精品三级视频| 天天爽爽| 女人又色又爽又黄| 狼人久久尹人香蕉尹人| 精品黄色片| 男女免费视频| 日本怡红| 在线免费观看一级片|