當前位置:首頁 » 編程軟體 » fcos源碼編譯錯誤

fcos源碼編譯錯誤

發布時間: 2022-06-12 06:02:02

Ⅰ 如何用C語言或匯編語言實現FFT(快速傅里葉)變換,並寫出C語言或匯編代碼,萬分感謝。

float ar[1024],ai[1024];/* 原始數據實部,虛部 */
float a[2050];

void fft(int nn) /* nn數據長度 */
{
int n1,n2,i,j,k,l,m,s,l1;
float t1,t2,x,y;
float w1,w2,u1,u2,z;
float fsin[10]={0.000000,1.000000,0.707107,0.3826834,0.1950903,0.09801713,0.04906767,0.02454123,0.01227154,0.00613588,};
float fcos[10]={-1.000000,0.000000,0.7071068,0.9238796,0.9807853,0.99518472,0.99879545,0.9996988,0.9999247,0.9999812,};

switch(nn)
{
case 1024: s=10; break;
case 512: s=9; break;
case 256: s=8; break;
}

n1=nn/2; n2=nn-1;
j=1;
for(i=1;i<=nn;i++)
{
a[2*i]=ar[i-1];
a[2*i+1]=ai[i-1];
}
for(l=1;l<n2;l++)
{
if(l<j)
{
t1=a[2*j];
t2=a[2*j+1];
a[2*j]=a[2*l];
a[2*j+1]=a[2*l+1];
a[2*l]=t1;
a[2*l+1]=t2;
}
k=n1;
while (k<j)
{
j=j-k;
k=k/2;
}
j=j+k;
}
for(i=1;i<=s;i++)
{
u1=1;
u2=0;
m=(1<<i);
k=m>>1;
w1=fcos[i-1];
w2=-fsin[i-1];
for(j=1;j<=k;j++)
{
for(l=j;l<nn;l=l+m)
{
l1=l+k;
t1=a[2*l1]*u1-a[2*l1+1]*u2;
t2=a[2*l1]*u2+a[2*l1+1]*u1;
a[2*l1]=a[2*l]-t1;
a[2*l1+1]=a[2*l+1]-t2;
a[2*l]=a[2*l]+t1;
a[2*l+1]=a[2*l+1]+t2;
}
z=u1*w1-u2*w2;
u2=u1*w2+u2*w1;
u1=z;
}
}
for(i=1;i<=nn/2;i++)
{
ar[i]=4*a[2*i+2]/nn; /* 實部 */
ai[i]=-4*a[2*i+3]/nn; /* 虛部 */
a[i]=4*sqrt(ar[i]*ar[i]+ai[i]*ai[i]); /* 幅值 */
}
}

Ⅱ c++代碼轉成c代碼,拿分的請進啊

不知道你為什麼要轉換,C++不是挺強大的么?

Ⅲ 用 IAR 編譯msp430 單片機,中斷一直無法通過怎麼回事

#include "io430.h"與#include "msp430g2553.h" 這兩個頭文件只能使用一個
並且對於晶元msp430g2553來說,io430.h中包含io430g2553.h文件

Ⅳ C/C++求定積分程序問題

沒發現錯誤啊,輸入0,1,結果都是正確的
不要輸入間距太多的兩個數,畢竟你只分了10份,很不精確.

Ⅳ Error: Syntax error, found END-OF-STATEMENT when expecting one of: , )

似乎你並沒有給全程序所有的語句,單就你給的部分,的確是在a(i,j),
b(i,j)處少了兩個右括弧;應該是:
a(i,j)=4*l*cos(j*thita(1)*l/(2*v(1)))*s(j)/((i*pi*(l+d(32)))
$ *(1-(j*thita(1)*l/(i*pi*v(1))))**2)
b(i,j)=4*l*cos(j*thita(1)*l/(2*v(1)))*u(j)/((i*pi*(l+d(32)))
$ *(1-(j*thita(1)*l/(i*pi*v(1))))**2)
而且問題並不僅僅如此,你的多個數組缺少聲明和初始化語句;似乎有些數組需要你自己輸入或給出的。進行修改之後我給出的補充部分(僅是建議:)
Program main4
real *8 wsin(7,32),fcos(7,32),a(7,32),b(7,32),s(1:7),u(1:7)
c***初始化數組****
wsin=0.d0
fcos=0.d0
a=0.d0
b=0.d0
s=0.d0
total=0.0
tot=0.0
c****你的程序主體****
do j=1,7
do i=1,32
wsin(j,i)=p*cos(j*thita(1)*(t(1,i)+l/(2*v(1))))
fcos(j,i)=p*sin(j*thita(1)*(t(1,i)+l/(2*v(1))))
total=total+wsin(j,i)
tot=tot+fcos(j,i)
end do
s(j)=total
u(j)=tot
end do

do i=1,7,2
do j=1,7
a(i,j)=4*l*cos(j*thita(1)*l/(2*v(1)))*s(j)/((i*pi*(l+d(32)))
$ *(1-(j*thita(1)*l/(i*pi*v(1))))**2) !加個右括弧
b(i,j)=4*l*cos(j*thita(1)*l/(2*v(1)))*u(j)/((i*pi*(l+d(32)))
$ *(1-(j*thita(1)*l/(i*pi*v(1))))**2) !加個右括弧
end do
end do
end

Ⅵ C#按鈕實現圖片旋轉代碼

/*************************************************************************
*
* 函數名稱:
* RotateDIB()
*
* 參數:
* LPSTR lpDIB - 指向源DIB的指針
* float iRotateAngle - 旋轉的角度(0-360度)
*
* 返回值:
* HGLOBAL - 旋轉成功返回新DIB句柄,否則返回NULL。
*
* 說明:
* 該函數用來以圖像中心為中心旋轉DIB圖像,返回新生成DIB的句柄。
* 調用該函數會自動擴大圖像以顯示所有的象素。函數中採用最鄰近插
* 值演算法進行插值。
*
************************************************************************/

HGLOBAL WINAPI RotateDIB(LPSTR lpDIB, float iRotateAngle)
{

// 源圖像的寬度和高度
LONG lWidth;
LONG lHeight;

// 旋轉後圖像的寬度和高度
LONG lNewWidth;
LONG lNewHeight;

// 圖像每行的位元組數
LONG lLineBytes;

// 旋轉後圖像的寬度(lNewWidth ',必須是4的倍數)
LONG lNewLineBytes;

// 指向源圖像的指針
LPSTR lpDIBBits;

// 指向源象素的指針
LPSTR lpSrc;

// 旋轉後新DIB句柄
HDIB hDIB;

// 指向旋轉圖像對應象素的指針
LPSTR lpDst;

// 指向旋轉圖像的指針
LPSTR lpNewDIB;
LPSTR lpNewDIBBits;

// 指向BITMAPINFO結構的指針(Win3.0)
LPBITMAPINFOHEADER lpbmi;

// 指向BITMAPCOREINFO結構的指針
LPBITMAPCOREHEADER lpbmc;

// 循環變數(象素在新DIB中的坐標)
LONG i;
LONG j;

// 象素在源DIB中的坐標
LONG i0;
LONG j0;

// 旋轉角度(弧度)
float fRotateAngle;

// 旋轉角度的正弦和餘弦
float fSina, fCosa;

// 源圖四個角的坐標(以圖像中心為坐標系原點)
float fSrcX1,fSrcY1,fSrcX2,fSrcY2,fSrcX3,fSrcY3,fSrcX4,fSrcY4;

// 旋轉後四個角的坐標(以圖像中心為坐標系原點)
float fDstX1,fDstY1,fDstX2,fDstY2,fDstX3,fDstY3,fDstX4,fDstY4;

// 兩個中間常量
float f1,f2;

// 找到源DIB圖像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);

// 獲取圖像的 "寬度 "(4的倍數)
lWidth = ::DIBWidth(lpDIB);

// 計算圖像每行的位元組數
lLineBytes = WIDTHBYTES(lWidth * 8);

// 獲取圖像的高度
lHeight = ::DIBHeight(lpDIB);

// 將旋轉角度從度轉換到弧度
fRotateAngle = (float) RADIAN(iRotateAngle);

// 計算旋轉角度的正弦
fSina = (float) sin((double)fRotateAngle);

// 計算旋轉角度的餘弦
fCosa = (float) cos((double)fRotateAngle);

// 計算原圖的四個角的坐標(以圖像中心為坐標系原點)
fSrcX1 = (float) (- (lWidth - 1) / 2);
fSrcY1 = (float) ( (lHeight - 1) / 2);
fSrcX2 = (float) ( (lWidth - 1) / 2);
fSrcY2 = (float) ( (lHeight - 1) / 2);
fSrcX3 = (float) (- (lWidth - 1) / 2);
fSrcY3 = (float) (- (lHeight - 1) / 2);
fSrcX4 = (float) ( (lWidth - 1) / 2);
fSrcY4 = (float) (- (lHeight - 1) / 2);

// 計算新圖四個角的坐標(以圖像中心為坐標系原點)
fDstX1 = fCosa * fSrcX1 + fSina * fSrcY1;
fDstY1 = -fSina * fSrcX1 + fCosa * fSrcY1;
fDstX2 = fCosa * fSrcX2 + fSina * fSrcY2;
fDstY2 = -fSina * fSrcX2 + fCosa * fSrcY2;
fDstX3 = fCosa * fSrcX3 + fSina * fSrcY3;
fDstY3 = -fSina * fSrcX3 + fCosa * fSrcY3;
fDstX4 = fCosa * fSrcX4 + fSina * fSrcY4;
fDstY4 = -fSina * fSrcX4 + fCosa * fSrcY4;

// 計算旋轉後的圖像實際寬度
lNewWidth = (LONG) ( max( fabs(fDstX4 - fDstX1), fabs(fDstX3 - fDstX2) ) + 0.5);

// 計算新圖像每行的位元組數
lNewLineBytes = WIDTHBYTES(lNewWidth * 8);

// 計算旋轉後的圖像高度
lNewHeight = (LONG) ( max( fabs(fDstY4 - fDstY1), fabs(fDstY3 - fDstY2) ) + 0.5);

// 兩個常數,這樣不用以後每次都計算了
f1 = (float) (-0.5 * (lNewWidth - 1) * fCosa - 0.5 * (lNewHeight - 1) * fSina
+ 0.5 * (lWidth - 1));
f2 = (float) ( 0.5 * (lNewWidth - 1) * fSina - 0.5 * (lNewHeight - 1) * fCosa
+ 0.5 * (lHeight - 1));

// 分配內存,以保存新DIB
hDIB = (HDIB) ::GlobalAlloc(GHND, lNewLineBytes * lNewHeight + *(LPDWORD)lpDIB + ::PaletteSize(lpDIB));

// 判斷是否內存分配失敗
if (hDIB == NULL)
{
// 分配內存失敗
return NULL;
}

// 鎖定內存
lpNewDIB = (char * )::GlobalLock((HGLOBAL) hDIB);

// 復制DIB信息頭和調色板
memcpy(lpNewDIB, lpDIB, *(LPDWORD)lpDIB + ::PaletteSize(lpDIB));

// 找到新DIB象素起始位置
lpNewDIBBits = ::FindDIBBits(lpNewDIB);

// 獲取指針
lpbmi = (LPBITMAPINFOHEADER)lpNewDIB;
lpbmc = (LPBITMAPCOREHEADER)lpNewDIB;

// 更新DIB中圖像的高度和寬度
if (IS_WIN30_DIB(lpNewDIB))
{
// 對於Windows 3.0 DIB
lpbmi-> biWidth = lNewWidth;
lpbmi-> biHeight = lNewHeight;
}
else
{
// 對於其它格式的DIB
lpbmc-> bcWidth = (unsigned short) lNewWidth;
lpbmc-> bcHeight = (unsigned short) lNewHeight;
}

// 針對圖像每行進行操作
for(i = 0; i < lNewHeight; i++)
{
// 針對圖像每列進行操作
for(j = 0; j < lNewWidth; j++)
{
// 指向新DIB第i行,第j個象素的指針
// 注意此處寬度和高度是新DIB的寬度和高度
lpDst = (char *)lpNewDIBBits + lNewLineBytes * (lNewHeight - 1 - i) + j;

// 計算該象素在源DIB中的坐標
i0 = (LONG) (-((float) j) * fSina + ((float) i) * fCosa + f2 + 0.5);
j0 = (LONG) ( ((float) j) * fCosa + ((float) i) * fSina + f1 + 0.5);

// 判斷是否在源圖范圍內
if( (j0 > = 0) && (j0 < lWidth) && (i0 > = 0) && (i0 < lHeight))
{
// 指向源DIB第i0行,第j0個象素的指針
lpSrc = (char *)lpDIBBits + lLineBytes * (lHeight - 1 - i0) + j0;

// 復制象素
*lpDst = *lpSrc;
}
else
{
// 對於源圖中沒有的象素,直接賦值為255
* ((unsigned char*)lpDst) = 255;
}

}

}

// 返回
return hDIB;
}

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:335
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:944
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:739
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:371