csaaa 发表于 2019-6-18 17:49:20

做了一g微型的音乐频谱显示器

本帖最后由 csaaa 于 2019-6-18 17:54 编辑

我既是发烧友也是硬件工程师还是个程序员。
为了不浪费这几个不值得一提的头衔,我就做了一个能玩意,能把这几个提点结合在一起的。
本来想发到单片机栏目中的,不过想来想去,这个东东还是和音响有更大的关联,于是就放到这了。
我设计的是一个音乐频谱显示器,手头上的材料有ARM-M3的MCU,可以用来采样音频,运算,显示,5532的国产运放,0.96寸的IPS彩色液晶屏。
我设计的目标:
1.双声道采集;
2.带宽覆盖完整的50-20khz段;
3.彩色显示分辨率128段,64级电平指示,动态范围不低于或超越目前市面能见到的最高指标;
4.超小,微型

开始画电路图

画电路板

开始编程
编程思路是这样的:
要显示20-20KHZ的频谱范围,采样率必须要大于最高采样率的2倍,设定在40KHZ。为了减轻CPU的负担,充分利用好ARM内部的资源,需要使用DMA对音频进行采样,目前采样256点,采样定时器使用TIM2。DMA数据满后触发中断,再计算FFT。
接下来要驱动LCD,由于IO富裕,所以使用8080并口,LCD是16位真彩的,使用RGB565格式发送。
最后做成的是这样的



有个电池在上面,在不显示音乐的时候,显示万年历。算是充分利用了。

大家看看还有什么可以开发的功能吗?

csaaa 发表于 2019-6-18 18:41:55

嘉善人 发表于 2019-6-18 18:36
这个小巧玲珑,很是喜欢。
我想能否还实用一点的
加上双声道的频率均衡器


这个体积恐怕再加均衡器有点困难了,需要另做一个屏幕,专门制作一个数字均衡器。所有的均衡量通过数字确定,均衡的频段通过按键选择,取消容易损坏的可调电阻和一堆的电容电感。完全通过运算来实现。目前正在考虑中。不过主要还是看需求。

qzlbwang 发表于 2019-6-18 18:05:51

很好,赞一个!
最好在这里科普一下FFT算法。

ppypp 发表于 2019-6-18 18:24:30

csaaa 发表于 2019-6-18 18:31:49

qzlbwang 发表于 2019-6-18 18:05
很好,赞一个!
最好在这里科普一下FFT算法。

嗯。FFT算法是快速傅里叶变换是缩写。
怎么理解呢,以生活常识为例,就是我们听到的所有声音都是一系列单独的正弦波的叠加,正弦波的属性有频率,相位,幅度。这样组成了我们丰富多彩的声音世界。
各种声音组合叠加起来是很容易的,像我们同时说话一样,得到的声音就是组合的,但是要把这个声音再恢复成基本的正弦波单元是不太容易了,就需要运算,这种运算就是采集一段正弦波的数据再带入傅里叶方程做蝶形运算,俗称卷积和,正弦波是什么,正弦波的本质就是圆,我们这个宇宙是由各种圆组成的,即使是方的,我们也可以把它微分成无数个圆。总之最后得到的是一系列的点的对应的向量值,也就是幅值,这个一些列点其实就是由低到高的频率,幅值就是在这个频率上产生的幅度,这样就把一段声音分解成了不同频率上的幅度值,我把这个频率由做至右显示到屏幕上的x轴,再在y轴上画上这个幅值对应的长度就成了上图的频谱了。
FFT到底有什么用?,其实FFT的用处可大了,做频谱其实是大材小用了。无线电工程上经常需要测量无线电发射的驻波,必须用这个,否则你根本看不出来你的器材问题出在哪里。在军事上,在海水中检测某种船只,潜艇,需要描绘出声纹,就像指纹一样,想子弹的膛线一样,每种机械在工作时都会发出声音,我们能辨别不同的人在说话也是靠声纹,我们的大脑自动完成了这个过程不需要思考。声纹描绘的过程就是FFT运算的过程,只不过需要更强大的CPU才能更细致地描绘出每种声音的差别。

柳关家电维修 发表于 2019-6-18 18:33:30

以前做过,不过不是很理想

嘉善人 发表于 2019-6-18 18:36:46

这个小巧玲珑,很是喜欢。
我想能否还实用一点的
加上双声道的频率均衡器
在触摸屏上能实行控制

qzlbwang 发表于 2019-6-18 18:40:47

csaaa 发表于 2019-6-18 18:31
嗯。FFT算法是快速傅里叶变换是缩写。
怎么理解呢,以生活常识为例,就是我们听到的所有声音都是一系列 ...

我的意思是采集的一系列数据是瞬时值(时域信号)如何通过FFT(快速傅里叶变换)转换为频域数据的。

csaaa 发表于 2019-6-18 18:44:54

本帖最后由 csaaa 于 2019-6-18 18:51 编辑

qzlbwang 发表于 2019-6-18 18:40
我的意思是采集的一系列数据是瞬时值(时域信号)如何通过FFT(快速傅里叶变换)转换为频域数据的。

这个说来话长了,那一堆公式画上去有点让人觉得故弄玄虚吧。实际制作的时候是采用了ST公司提供的DSP库来处理的,因为这个库是经过大量优化的,速度极快,否则很难保证实时性。
关于FFT的算法其实一搜一大堆啦。
这是我的FFT部分代码
void powerMag()
{       int32_t lX,lY;
                uint32_t i;
                for (i=0; i < NPT/2; i++)
                {
                        lX= (lBUFOUT1<<16)>>16; /* sine_cosine --> cos */
                        lY= (lBUFOUT1 >> 16);   /* sine_cosine --> sin */   
                        {
                                        float X=NPT*((float)lX)/32768;
                                        float Y = NPT*((float)lY)/32768;
                                        float Mag = sqrt(X*X+ Y*Y)/NPT;// 先平方和,再开方
                                        //Mag-=0.000001;
                                        if (Mag<filterlevel) Mag*=0.5;
                                       
                                if (i==0)
                                lBUFMAG1 = (uint32_t)(Mag*16384);                  //直流分量/2
                        //        else if(i<5)
                        //                lBUFMAG = (long)(Mag*16384);           //减弱低频
                                else
                                lBUFMAG1 = (uint32_t)(Mag*65535);            //此处倍数可控制幅度
                                lBUFMAG1>>=3;       //有放大器       值除以16
                                if (lBUFMAG1>SEGNUM) lBUFMAG1=SEGNUM;          //限幅
                                                                        //关于噪声门限
                    }   
                }
}

main(){
...
                                                cr4_fft_64_stm32(lBUFOUT1,lBUFIN1,NPT);//调用DSP库作FFT变换
                                                powerMag();//计算频点幅值       结果是对称的,计算前一半即可

}

嘉善人 发表于 2019-6-18 19:20:47

csaaa 发表于 2019-6-18 18:41
这个体积恐怕再加均衡器有点困难了,需要另做一个屏幕,专门制作一个数字均衡器。所有的均衡量通过数字确 ...

这个应该有销量的,尺寸要求在耳放面板上能放进。
最重要的是提升效果如何,去掉电容电感,效果如何?

梧桐子 发表于 2019-6-18 19:36:36

楼主能否搞个手机上用的APP,这样大家的旧手机就有地方用了

wsh2981 发表于 2019-6-18 19:49:25

像个双声道的音频示波器。

csaaa 发表于 2019-6-18 20:15:17

嘉善人 发表于 2019-6-18 19:20
这个应该有销量的,尺寸要求在耳放面板上能放进。
最重要的是提升效果如何,去掉电容电感,效果如何?

提升过程虽然是计算出来的,实际上耳朵是听不出来的,最大增益在+-12db左右,可能能做到18。缺点是频点可能是死的,这个要看程序编写的难度。要快出品就写成死的,要灵活做频点就要慢慢摩算法。

hhui68 发表于 2019-6-18 21:18:48

这个太难了。在手机上实现容易多了。。。

嘉善人 发表于 2019-6-18 21:28:37

csaaa 发表于 2019-6-18 20:15
提升过程虽然是计算出来的,实际上耳朵是听不出来的,最大增益在+-12db左右,可能能做到18。缺点是频点可 ...

我的意思是代替掉体积庞大的电位器,用直流音量控制。
象QQ音乐里的自定义均衡器那样,只是效果不理想,我估计就是没有电感电容吧,是纯电子控制。
页: [1] 2
查看完整版本: 做了一g微型的音乐频谱显示器