掲示板


[記事リスト] [返信する] [新着記事] [過去ログ] [ワード検索] [留意事項] [管理用]

記事No 1196
タイトル Re: dsPICを使ったFFT関数
投稿日 : 2018/08/13(Mon) 09:40:07
投稿者 Gokan   <gokan@picfun.com>
参照先
多分、SquareMagnitudeCplx関数の最初のパラメータが間違って
いるのだと思います。 FFT_SIZE/2 にする必要があります。


> 初めまして。
> このサイトを参考にdsPIC33FJ64GP804を使ったFFT変換をやっています。
>
> #define LOG2N 7
> #define FFT_SIZE 128 //=2^7
> #define NUM_TAPS 13
> unsigned int Index;
> unsigned int flag;
> fractional SigIn[FFT_SIZE];
> fractional FilterOut[FFT_SIZE];
> fractcomplex fftBuffer[ FFT_SIZE ] __attribute__ ((space(ymemory), aligned (FFT_SIZE * 2 * 2))); // Place fftBuffer in Y-memory aligned to the size the array in bytes
> fractional window[FFT_SIZE]; // Hamming window
> fractional powerspec[FFT_SIZE]; // Power Spectrum
> fractcomplex twiddleFactors[ FFT_SIZE/2 ]__attribute__((space(xmemory)));
> fractional _YBSS(128) delay[FFT_SIZE];
> /*const fractional hpfCoeffs[NUM_TAPS] __attribute__ ((space(auto_psv), aligned (FFT_SIZE * 2 * 2))) ={
> 3,21,30,5,-61,-119,-76,99,296,292,-49,-560,-771,-262,856,1756,1305,-1093,-4854,-8327,23029,-8327,-4854,-1093,1305,1756,856,-262,-771,-560,-49,292,296,99,-76,-119,-61,5,30,21,3,0
> }; //filter coefficient
> FIRStruct HPF; //HPF fc1=1000 fc2=2000 */
> const fractional lpfCoeffs[NUM_TAPS] __attribute__ ((space(auto_psv), aligned (FFT_SIZE * 2 * 2))) ={
> 1424,-2012,-1898,131,4372,8848,10772,8848,4372,131,-1898,-2012,1424
> }; //filter coefficient
> FIRStruct LPF; //LPF fc1=1000 fc2=2000
>
>
> TwidFactorInit(LOG2N, twiddleFactors, 0);
> HammingInit (FFT_SIZE, window);
> FIRStructInit( &LPF, NUM_TAPS, (fractional *)lpfCoeffs, PSVPAG, delay );
> FIRDelayInit (&LPF);
>
> DISICNT = 0x0000; //enable interruput
> while(1)
> {
> //while(!flag);
> //flag = 0;
> for(j = 0; j < FFT_SIZE; j++)
> FIR (1, &FilterOut[j], &SigIn[j], &LPF);
> VectorWindow(FFT_SIZE, FilterOut, FilterOut, window);
> for(i = 0; i < FFT_SIZE; i++) {
> fftBuffer[i].real = FilterOut[i];
> fftBuffer[i].imag = 0;
> }
>
> FFTComplexIP(LOG2N, fftBuffer, twiddleFactors, COEFFS_IN_DATA);
> BitReverseComplex(LOG2N, fftBuffer );
> SquareMagnitudeCplx( FFT_SIZE , fftBuffer, powerspec);
>
>
> 以上のようなプログラミングを組みました。変数bufferとpowerspecをdsPICworksを用いてFFTの結果を確認しています。fftbufferまではうまくいくのですが、パワースペクトルであるpowerspecがうまくいかず、値がすべて0になってしまいます。引数が間違っているのでしょうか。
>
> 是非ご教授ください。
> よろしくお願いいたします。
>

- 関連一覧ツリー (▼ をクリックするとツリーを一括表示します)


- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
おなまえ
Eメール
タイトル
メッセージ
参照先
画像UP
暗証キー (英数字で8文字以内)
投稿キー (右画像の数字を入力) 投稿キー


- 投稿記事修正/削除フォーム -
処理 No 暗証キー

- WebForum -