发明名称 一种基于数字信号处理器快速频谱细化的方法
摘要 一种基于数字信号处理器快速频谱细化的方法。该方法使用数字信号处理器,将大量数据的细化频谱分析分解成多次小量数据分析,得到频谱分析设备关心频率范围内的2的N次方的整倍数的点数的频谱分析,减少分析的数据量和运算量,缩短处理时间,提高频谱分析设备工作效率。本发明的方法包括:生成窗系数和蝶形算子数据;生成与频谱范围有关的数据;模拟信号转换成数字信号,存储到外部扩展数据存储器;对数据抽取分组,在数字信号处理器内部数据存储器中进行离散快速傅里叶变换;生成频谱细化波形数据。本方法在10240点频谱分析时比离散傅里叶变换运算量减少了99.7%,比离散快速傅里叶变换(16384点,必须为2的N次方)运算量减少了35.3%。
申请公布号 CN102841880B 申请公布日期 2016.03.02
申请号 CN201210326106.1 申请日期 2012.09.06
申请人 天津市德力电子仪器有限公司 发明人 孟敬;李晓光
分类号 G06F17/00(2006.01)I 主分类号 G06F17/00(2006.01)I
代理机构 天津佳盟知识产权代理有限公司 12002 代理人 侯力
主权项 一种基于数字信号处理器快速频谱细化的方法,能够实现本发明的硬件结构包括:1)高速模拟与数字信号转换芯片:用于采样需要分析的模拟信号,将模拟信号转换为数字信号处理器能够使用的数字信号,能够工作在频谱分析设备关心的频率范围的终止频率的两倍以上的采样率上;2)、数字信号处理器:用于接收高速模拟与数字信号转换芯片输出的数字信号,并对数字信号进行离散快速傅里叶变换分析和离散傅里叶变换分析,数字信号处理器需要有内部数据存储器,能够处理浮点数据,能够实现对外部扩展数据存储器进行的存储和读取操作;3)、外部扩展数据存储器:用于存储数字信号处理器细化频谱分析过程中使用的窗系数、蝶形算子、采样波形、频谱细化波形的大数据量的数据;其特征在于,该方法的步骤如下:步骤1、生成窗系数和蝶形算子数据;根据频谱分析设备作频谱分析的频率分辨率带宽值F<sub>rbw</sub>和高速模拟与数字信号转换芯片的数据采样率F<sub>sam</sub>确定所需的采样数据量L<sub>sam</sub>,使用窗函数的补偿系数为P<sub>win</sub>,所需的采样数据量如公式(1)所述;L<sub>sam</sub>=[(F<sub>sam</sub>÷F<sub>rbw</sub>)×P<sub>win</sub>+0.5]  (1)公式(1)中“[]”为数据取整的符号,使用编译器提供的窗函数生成数量为L<sub>sam</sub>的窗系数,定义位于外部扩展数据存储器中L<sub>sam</sub>个浮点类型的数据区作为窗系数的存储器,命名为第一存储器(1);确定使用频谱分析的点数L,本方法能够处理L=2<sup>a</sup>×N点的频谱分析,a和N均为正整数,确定N和a值,a一般取9至12,并确保数字信号处理器的内部存储器能够分配2<sup>a</sup>个浮点数类型的数据区,根据L≥L<sub>sam</sub>推导出N的值,确保2<sup>a</sup>×N的值不小于所需的采样数据量L<sub>sam</sub>,且2<sup>a</sup>远大于N;离散快速傅里叶变换的点数M为2的a次方,即M=2<sup>a</sup>,L=M×N=2<sup>a</sup>×N,M&gt;&gt;N,根据M和N确定以下两组的复数数据;第一组数据为L个复数数据,为N×M蝶形算子,计算方法见公式(2),所述的第一组数据在步骤5.2中使用;设n和m为正整数,n和m将在步骤4、步骤5中继续使用,其中第(n-1)×M+m个数据为<img file="FDA0000796321710000011.GIF" wi="199" he="59" />1&lt;n&lt;N,1&lt;m&lt;M,j为虚数单位,j<sup>2</sup>=-1;<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msubsup><mi>W</mi><mi>L</mi><mrow><mi>n</mi><mo>-</mo><mn>1</mn><mo>,</mo><mi>m</mi><mo>-</mo><mn>1</mn></mrow></msubsup><mo>=</mo><msup><mi>e</mi><mrow><mo>-</mo><mi>j</mi><mrow><mo>(</mo><mfrac><mrow><mn>2</mn><mi>&pi;</mi></mrow><mi>L</mi></mfrac><mo>)</mo></mrow><mo>(</mo><mrow><mi>n</mi><mo>-</mo><mn>1</mn></mrow><mo>)</mo><mo>(</mo><mrow><mi>m</mi><mo>-</mo><mn>1</mn></mrow><mo>)</mo></mrow></msup><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000796321710000012.GIF" wi="1006" he="144" /></maths>将公式(2)转换成能够让数字信号处理器实现的N×M蝶形算子计算公式(3);<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><mtable><mtr><mtd><mrow><mi>Re</mi><mrow><mo>(</mo><msubsup><mi>W</mi><mi>L</mi><mrow><mi>n</mi><mo>-</mo><mn>1</mn><mo>,</mo><mi>m</mi><mo>-</mo><mn>1</mn></mrow></msubsup><mo>)</mo></mrow><mo>=</mo><mi>c</mi><mi>o</mi><mi>s</mi><mrow><mo>(</mo><mn>2</mn><mi>&pi;</mi><mo>(</mo><mrow><mi>n</mi><mo>-</mo><mn>1</mn></mrow><mo>)</mo><mo>(</mo><mrow><mi>m</mi><mo>-</mo><mn>1</mn></mrow><mo>)</mo><mo>/</mo><mi>L</mi><mo>)</mo></mrow></mrow></mtd></mtr><mtr><mtd><mrow><mi>Im</mi><mo>(</mo><msubsup><mi>W</mi><mi>L</mi><mrow><mi>n</mi><mo>-</mo><mn>1</mn><mo>,</mo><mi>m</mi><mo>-</mo><mn>1</mn></mrow></msubsup><mo>)</mo><mo>=</mo><mo>-</mo><mi>sin</mi><mrow><mo>(</mo><mn>2</mn><mi>&pi;</mi><mo>(</mo><mrow><mi>n</mi><mo>-</mo><mn>1</mn></mrow><mo>)</mo><mo>(</mo><mrow><mi>m</mi><mo>-</mo><mn>1</mn></mrow><mo>)</mo><mo>/</mo><mi>L</mi><mo>)</mo></mrow></mrow></mtd></mtr></mtable><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000796321710000021.GIF" wi="1164" he="164" /></maths>定义位于外部扩展数据存储器中L×2个浮点类型的数据区作为N×M蝶形算子数据存储器,命名为第二存储器(2),从第二存储器(2)的第一个位置开始奇数位置存储复数数据的实部,偶数位置存储复数数据的虚部;第二存储器(2)的第1个位置存储<img file="FDA0000796321710000022.GIF" wi="232" he="84" />即n=1,m=1,第二存储器(2)的第2个位置存储<img file="FDA0000796321710000023.GIF" wi="230" he="61" />即n=1,m=1;第二存储器(2)的第3个位置存储<img file="FDA0000796321710000024.GIF" wi="264" he="60" />n=1,m=2,第二存储器(2)的第4个位置存储<img file="FDA0000796321710000025.GIF" wi="228" he="99" />n=1,m=2;……,第二存储器(2)的第(n-1)×2×M+(m-1)×2+1个位置存储<img file="FDA0000796321710000026.GIF" wi="288" he="65" />第二存储器(2)的第(n-1)×2×M+(m-1)×2+2个位置存储<img file="FDA0000796321710000027.GIF" wi="282" he="92" />……,第二存储器(2)的第2×L-1个位置存储<img file="FDA0000796321710000028.GIF" wi="314" he="88" />n=N,m=M,第二存储器(2)的第2×L个位置存储<img file="FDA0000796321710000029.GIF" wi="342" he="93" />n=N,m=M;第二组数据为N×N个复数数据,为N×N蝶形算子,计算方法见公式(4),为步骤5.3的N点离散傅里叶变换使用,设定其中第(n<sub>1</sub>-1)×N+n<sub>2</sub>个的数据为<img file="FDA00007963217100000210.GIF" wi="272" he="73" />1&lt;n<sub>1</sub>&lt;N,1&lt;n<sub>2</sub>&lt;N,j为虚数单位,j<sup>2</sup>=-1;<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><msubsup><mi>W</mi><mi>N</mi><mrow><msub><mi>n</mi><mn>1</mn></msub><mo>-</mo><mn>1</mn><mo>,</mo><msub><mi>n</mi><mn>2</mn></msub><mo>-</mo><mn>1</mn></mrow></msubsup><mo>=</mo><msup><mi>e</mi><mrow><mo>-</mo><mi>j</mi><mrow><mo>(</mo><mfrac><mrow><mn>2</mn><mi>&pi;</mi></mrow><mi>N</mi></mfrac><mo>)</mo></mrow><mo>(</mo><mrow><msub><mi>n</mi><mn>1</mn></msub><mo>-</mo><mn>1</mn></mrow><mo>)</mo><mo>(</mo><mrow><msub><mi>n</mi><mn>2</mn></msub><mo>-</mo><mn>1</mn></mrow><mo>)</mo></mrow></msup><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA00007963217100000211.GIF" wi="1018" he="134" /></maths>将公式(4)转换成能够让数字信号处理器实现的N×N蝶形算子计算公式(5);<maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><mtable><mtr><mtd><mrow><mi>Re</mi><mrow><mo>(</mo><msubsup><mi>W</mi><mi>N</mi><mrow><msub><mi>n</mi><mn>1</mn></msub><mo>-</mo><mn>1</mn><mo>,</mo><msub><mi>n</mi><mn>2</mn></msub><mo>-</mo><mn>1</mn></mrow></msubsup><mo>)</mo></mrow><mo>=</mo><mi>c</mi><mi>o</mi><mi>s</mi><mrow><mo>(</mo><mn>2</mn><mi>&pi;</mi><mo>(</mo><mrow><msub><mi>n</mi><mn>1</mn></msub><mo>-</mo><mn>1</mn></mrow><mo>)</mo><mo>(</mo><mrow><msub><mi>n</mi><mn>2</mn></msub><mo>-</mo><mn>1</mn></mrow><mo>)</mo><mo>/</mo><mi>N</mi><mo>)</mo></mrow></mrow></mtd></mtr><mtr><mtd><mrow><mi>Im</mi><mo>(</mo><msubsup><mi>W</mi><mi>N</mi><mrow><msub><mi>n</mi><mn>1</mn></msub><mo>-</mo><mn>1</mn><mo>,</mo><msub><mi>n</mi><mn>2</mn></msub><mo>-</mo><mn>1</mn></mrow></msubsup><mo>)</mo><mo>=</mo><mo>-</mo><mi>sin</mi><mrow><mo>(</mo><mn>2</mn><mi>&pi;</mi><mo>(</mo><mrow><msub><mi>n</mi><mn>1</mn></msub><mo>-</mo><mn>1</mn></mrow><mo>)</mo><mo>(</mo><mrow><msub><mi>n</mi><mn>2</mn></msub><mo>-</mo><mn>1</mn></mrow><mo>)</mo><mo>/</mo><mi>N</mi><mo>)</mo></mrow></mrow></mtd></mtr></mtable><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>5</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA00007963217100000212.GIF" wi="1246" he="156" /></maths>定义位于数字信号处理器的内部数据存储器中N×N×2个浮点类型的数据区作为N×N蝶形算子数据存储器,命名为第三存储器(3),从第三存储器(3)的第一个位置开始奇数位置存储复数数据的实部,偶数位置存储复数数据的虚部;第三存储器(3)的第1个位置存储<img file="FDA00007963217100000213.GIF" wi="230" he="59" />n<sub>1</sub>=1,n<sub>2</sub>=1,第三存储器(3)的第2个位置存储<img file="FDA00007963217100000214.GIF" wi="226" he="65" />n<sub>1</sub>=1,n<sub>2</sub>=1;第三存储器(3)的第3个位置存储<img file="FDA00007963217100000215.GIF" wi="220" he="59" />n<sub>1</sub>=1,n<sub>2</sub>=2,第三存储器(3)的第4个位置存储<img file="FDA00007963217100000216.GIF" wi="226" he="98" />n<sub>1</sub>=1,n<sub>2</sub>=2;……,第三存储器(3)的第(n<sub>1</sub>-1)×2×N+(n<sub>2</sub>-1)×2+1个位置存储<img file="FDA00007963217100000217.GIF" wi="313" he="102" />第三存储器(3)的第(n<sub>1</sub>-1)×2×N+(n<sub>2</sub>-1)×2+2个位置存储<img file="FDA0000796321710000031.GIF" wi="318" he="62" />……,第三存储器(3)的第2×N×N-1个位置存储<img file="FDA0000796321710000032.GIF" wi="311" he="60" />n<sub>1</sub>=N,n<sub>2</sub>=N,第三存储器(3)的第2×N×N个位置存储<img file="FDA0000796321710000033.GIF" wi="302" he="64" />n<sub>1</sub>=N,n<sub>2</sub>=N;本步骤在确定了频谱分辨率带宽F<sub>rbw</sub>和数据采样率F<sub>sam</sub>后只需操作一次,通过编译器提供的功能将数据分别存储在以上三个存储器上,供每次采样后的频谱分析使用;步骤2、生成与频谱分析设备关心的频谱范围有关的第四、第五存储器的数据;设定频谱分析设备关心的频谱范围的起始频率为F<sub>start</sub>,终止频率为F<sub>stop</sub>,起始频率F<sub>start</sub>在L点频谱上的位置为I<sub>start</sub>,计算方法见公式(6),终止频率F<sub>stop</sub>在L点频谱上的位置为I<sub>stop</sub>,计算方法如公式(7);I<sub>start</sub>=[(L÷F<sub>sam</sub>)×F<sub>start</sub>+0.5]  (6)I<sub>stop</sub>=[(L÷F<sub>sam</sub>)×F<sub>stop</sub>+0.5]  (7)定义位于外部扩展数据存储器中M个整型类型的数据区的存储器,作为步骤5离散傅里叶变换的数量存储器,命名为第四存储器(4),和位于外部扩展数据存储器中L个整型类型的数据区的存储器,作为步骤5离散傅里叶变换的参数存储器,命名为第五存储器(5),将第四存储器(4)和第五存储器(5)初始化为0值;设定整数I从I<sub>start</sub>到I<sub>stop</sub>逐个数取值,I<sub>start</sub>≤I≤I<sub>stop</sub>,每次完成以下操作;求取I整除M后得到的商数I<sub>quo</sub>和余数I<sub>mod</sub>,第四存储器(4)的第I<sub>mod</sub>+1个位置读取出来并加1后得到数值N<sub>num</sub>,再将N<sub>num</sub>存储入到第四存储器(4)的第I<sub>mod</sub>+1个位置,将I<sub>quo</sub>存储到第五存储器(5)的第I<sub>mod</sub>×N+N<sub>num</sub>个位置;如果频谱分析设备所关心的频谱范围不变,即起始频率F<sub>start</sub>的数值和终止频率F<sub>stop</sub>的数值都没有变化,步骤2只在开始操作一次,不需要每次采样都操作,只有起始频率F<sub>start</sub>和终止频率F<sub>stop</sub>有变化时,需要重新操作步骤2;步骤3、将模拟信号转换成数字信号,数字信号加窗后存储到外部扩展数据存储器;定义位于外部扩展数据存储器中L个浮点类型的数据区作为加窗后的采样数据存储器,命名为第六存储器(6),使用高速模拟与数字信号转换芯片将需要分析的模拟信号转换成数字信号,连续采样数量为L<sub>sam</sub>的数字信号数据,将这些采样数据逐个乘以从第一存储器(1)的第一个位置开始读取的每个数据,从第一个位置开始逐个存储到第六存储器(6),共存储L<sub>sam</sub>个位置,第六存储器(6)的第L<sub>sam</sub>+1个位置到第L个位置共计L-L<sub>sam</sub>个位置存储为数值0;步骤4、对数据抽取分组,在数字信号处理器的内部数据存储器中进行离散快速傅里叶变换;定义位于数字信号处理器的内部数据存储器中的M个浮点数类型的数据区,用于存储M点离散快速傅里叶变换的输入数据,命名为第七存储器(7),定义位于外部扩展数据存储器中L×2个浮点类型的数据区为本步骤的结果存储器,命名为第八存储器(8),存储本步骤的N次M点离散快速傅里叶变换的复数结果;将存储在第六存储器(6)中的L点浮点数据抽取成N组M点数据,依次作M点的离散快速傅里叶变换;正整数n的初始值为1,判断n的值:如果n小于或等于N,从第六存储器(6)的数据中读取M点的数据,读取第六存储器(6)中的第n,N+n,2×N+n,……,L-N+n个位置的数据,存储于第七存储器(7),对这M点数据做M点的离散快速傅里叶变换,得出M点的复数结果,存储到第八存储器(8)的第(n-1)×M×2+1到n×M×2位置的共计M×2个位置,其中数据的实部存储在奇数位置,虚部存储在偶数位置,n的值加1,重新判断n的值,重复以上操作;如果n大于N,则结束本步骤;步骤5、生成频谱分析设备关心的频谱范围内的频谱细化波形数据;定义位于数字信号处理器的内部数据存储器中N×2个浮点类型的数据区的存储器,作为步骤5.3的运算输入存储器,命名为第九存储器(9),定义位于外部扩展数据存储器中L个浮点类型的数据区为频谱数据存储器,命名为第十存储器(10),正整数m的初始值为1,判断m的数值:如果m小于或等于M,则完成以下步骤5.1到步骤5.3操作;否则结束本步骤;步骤5.1.如果第四存储器(4)中的第m个位置读取的数据为0,跳出本轮循环,m加1进入下一轮循环,否则完成以下其余的操作;步骤5.2.正整数n的初始值为1,判断n的值;当n小于或等于N时,如果m或n有一个数值为1,则从第八存储器(8)中的第(n-1)×2×M+(m-1)×2+1个位置开始的两个位置读取出两个浮点数直接存储到第九存储器(9)的第(n-1)×2+1个位置开始的两个位置,否则将第八存储器(8)中的第(n-1)×2×M+(m-1)×2+1个位置开始的两个位置读取出两个浮点数,第一个数作为复数的实部和第二个数作为虚部与从第二存储器(2)同样位置读取到的复数相乘,将复数结果存储到第九存储器(9)的第(n-1)×2+1个位置开始的两个位置,n的数值加1,重新判断n的值,重复以上操作;当n大于N时,则进行步骤5.3的操作;步骤5.3.正整数n的初始值为1,判断n的值:如果n小于或等于第四存储器(4)中的第m个位置读取的数值,则读取出第五存储器(5)的第(m-1)×N+n个位置的数据I<sub>quo</sub>;从第九存储器(9)中依次读取出N个复数,第k次从第k×2个位置读取出数为X<sub>k</sub>,1≤k≤N,从第三存储器(3)读取出N个复数,第k次从第(k×N+I<sub>quo</sub>)×2个位置读取出复数<img file="FDA0000796321710000051.GIF" wi="195" he="80" />1≤k≤N,利用以下计算公式(8)求出离散傅里叶变换结果D<sub>n</sub>;<maths num="0005" id="cmaths0005"><math><![CDATA[<mrow><msub><mi>D</mi><mi>n</mi></msub><mo>=</mo><munderover><mo>&Sigma;</mo><mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><msub><mi>X</mi><mi>k</mi></msub><msubsup><mi>W</mi><mi>N</mi><mrow><mi>k</mi><mo>,</mo><msub><mi>I</mi><mrow><mi>q</mi><mi>u</mi><mi>o</mi></mrow></msub></mrow></msubsup><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>8</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000796321710000052.GIF" wi="1092" he="192" /></maths>将D<sub>n</sub>的模的平方|D<sub>n</sub>|<sup>2</sup>存储入第十存储器(10)的第I<sub>quo</sub>×M+m位置,n的数值加1,重新判断n的值,重复步骤5.3操作;如果n大于第四存储器(4)中的第m个位置读取的数值,m的值加1,重新判断m的值,重复完成步骤5.1到步骤5.3的操作;运算完成后,第十存储器(10)即得到基于L点离散傅里叶频谱分析的从F<sub>start</sub>到F<sub>stop</sub>的线性频谱数据,对各个数据求取常用对数后乘以10,得到对数频谱数据,此数据即为频谱细化波形数据。
地址 300392 天津市滨海新区新技术产业园区(环外)海泰创新三路8号