❶ 如何實現128點的溫度測量
溫度測量點的數量和溫度感測器數量是相同的
要實現128點溫度測量
必須要有128個溫度感測器
溫度感測器(temperature transcer)是指能感受溫度並轉換成可用輸出信號的感測器。
溫度感測器是溫度測量儀表的核心部分,品種繁多。
進入21世紀後,溫度感測器正朝著高精度、多功能、匯流排標准化、高可靠性及安全性、開發虛擬感測器和網路感測器、研製單片測溫系統等高科技的方向迅速發展。溫度感測器的匯流排技術也實現了標准化、可作為從機可通過專用匯流排介面與主機進行通信。
按測量方式可分為接觸式和非接觸式兩大類,按照感測器材料及電子元件特性分為熱電阻和熱電偶兩類。
❷ 若做128點快速卷積運算,問最低抽樣頻率應該是多少
頻率解析度為:4k/128=31.25Hzk=16的譜線頻率為:31.25*(16-1)=468.75Hz
❸ 一個關於128點的快速傅立葉的C語言程序
這是我寫的1024點的快速傅里葉變換程序,下面有驗證,你把數組
double
A[2049]={0};
double
B[1100]={0};
double
powerA[1025]={0};
改成
A[256]={0};
B[130]={0};
power[129]={0};就行了,
void
FFT(double
data[],
int
nn,
int
isign)
的程序可以針對任何點數,只要是2的n次方
具體程序如下:
#include
<iostream.h>
#include
"math.h"
#include<stdio.h>
#include<string.h>
#include
<stdlib.h>
#include
<fstream.h>
#include
<afx.h>
void
FFT(double
data[],
int
nn,
int
isign)
{
//復數的快速傅里葉變換
int
n,j,i,m,mmax,istep;
double
tempr,tempi,theta,wpr,wpi,wr,wi,wtemp;
n
=
2
*
nn;
j
=
1;
for
(i
=
1;
i<=n
;
i=i+2)
//這個循環進行的是碼位倒置。
{
if(
j
>
i)
{
tempr
=
data[j];
tempi
=
data[j
+
1];
data[j]
=
data[i];
data[j
+
1]
=
data[i
+
1];
data[i]
=
tempr;
data[i
+
1]
=
tempi;
}
m
=
n
/
2;
while
(m
>=
2
&&
j
>
m)
{
j
=
j
-
m;
m
=
m
/
2;
}
j
=
j
+
m;
}
mmax
=
2;
while(
n
>
mmax
)
{
istep
=
2
*
mmax;
//這里表示一次的數字的變化。也體現了級數,若第一級時,也就是書是的第0級,其為兩個虛數,所以對應數組應該增加4,這樣就可以進入下一組運算
theta
=
-6.28318530717959
/
(isign
*
mmax);
wpr
=
-2.0
*
sin(0.5
*
theta)*sin(0.5
*
theta);
wpi
=
sin(theta);
wr
=
1.0;
wi
=
0.0;
for(
m
=
1;
m<=mmax;
m=m+2)
{
for
(i
=
m;
i<=n;
i=i+istep)
{
j
=
i
+
mmax;
tempr=double(wr)*data[j]-double(wi)*data[j+1];//這兩句表示蝶形因子的下一個數乘以W因子所得的實部和虛部。
tempi=double(wr)*data[j+1]+double(wi)*data[j];
data[j]
=
data[i]
-
tempr;
//蝶形單元計算後下面單元的實部,下面為虛部,注意其變換之後的數組序號與書上蝶形單元是一致的
data[j
+
1]
=
data[i
+
1]
-
tempi;
data[i]
=
data[i]
+
tempr;
data[i
+
1]
=
data[i
+
1]
+
tempi;
}
wtemp
=
wr;
wr
=
wr
*
wpr
-
wi
*
wpi
+
wr;
wi
=
wi
*
wpr
+
wtemp
*
wpi
+
wi;
}
mmax
=
istep;
}
}
void
main()
{
//本程序已經和MATLAB運算結果對比,准確無誤,需要注意的的是,計算中數組都是從1開始取得,丟棄了A[0]等數據
double
A[2049]={0};
double
B[1100]={0};
double
powerA[1025]={0};
char
line[50];
char
dataA[20],
dataB[20];
int
ij;
char
ch1[3]="\t";
char
ch2[3]="\n";
int
strl1,strl2;
CString
str1,str2;
ij=1;
//********************************讀入文件data1024.txt中的數據,
其中的數據格式見該文件
FILE
*fp
=
fopen("data1024.txt","r");
if(!fp)
{
cout<<"Open
file
is
failing!"<<endl;
return;
}
while(!feof(fp))
//feof(fp)有兩個返回值:如果遇到文件結束,函數feof(fp)的值為1,否則為0。
{
memset(line,0,50);
//清空為0
memset(dataA,0,20);
memset(dataB,0,20);
fgets(line,50,fp);
//函數的功能是從fp所指文件中讀入n-1個字元放入line為起始地址的空間內
sscanf(line,
"%s%s",
dataA,
dataB);
//我同時讀入了兩列值,但你要求1024個,那麼我就只用了第一列的1024個值
//dataA讀入第一列,dataB讀入第二列
B[ij]=atof(dataA);
//將字元型的dataA值轉化為float型
ij++;
}
for
(int
mm=1;mm<1025;mm++)//A[2*mm-1]是實部,A[2*mm]是虛部,當只要輸入實數時,那麼保證虛部A[mm*2]為零即可
{
A[2*mm-1]=B[mm];
A[2*mm]=0;
}
//*******************************************正式計算FFT
FFT(A,1024,1);
//********************************************寫入數據到workout.txt文件中
for
(int
k=1;k<2049;k=k+2)
{
powerA[(k+1)/2]=sqrt(pow(A[k],2.0)+pow(A[k+1],2.0));//求功率譜
FILE
*pFile=fopen("workout.txt","a+");
//?a+只能在文件最後補充,游標在結尾。沒有則創建
memset(ch1,0,15);
str1.Format("%.4f",powerA[(k+1)/2]);
if
(A[k+1]>=0)
str2.Format("%d\t%6.4f%s%6.4f
%s",(k+1)/2,A[k],"+",A[k+1],"i");//保存fft計算的頻譜,是復數頻譜
else
str2.Format("%d\t%6.4f%6.4f
%s",(k+1)/2,A[k],A[k+1],"i");
strl1=strlen(str1);
strl2=strlen(str2);
//
用
法:fwrite(buffer,size,count,fp);
//
buffer:是一個指針,對fwrite來說,是要輸出數據的地址。
//
size:要寫入的位元組數;
//
count:要進行寫入size位元組的數據項的個數;
//
fp:目標文件指針。
fwrite(str2,1,strl2,pFile);
fwrite(ch1,1,3,pFile);
fwrite(ch1,1,3,pFile);
fwrite(str1,1,strl1,pFile);
fwrite(ch2,1,3,pFile);
fclose(pFile);
}
cout<<"計算完畢,到fft_test\workout.txt查看結果"<<endl;
}
❹ 做128點快速卷積運算,最低抽樣頻率是多少
半周波可用於快速計算有效值,不適宜用於FFT。因為FFT針對的是周期信號,假設使用半個周期數據進行FFT運算,那麼,演算法默認對其按照半周期波形進行周期延拓,得到的將是以兩倍頻率為基波,且富含諧波的結果。
❺ 如何實現128點的基2-FFT演算法,並與MATLAB的fft演算法作對比分析.
我只能給你一個fft演算法,流程圖說起來有點復雜,可以matlab裡面的函數tic(開啟時鍾)t=toc(關閉時鍾)t就是運算過程的時間
當然tic放程序開始,toc放結尾,來分析之即可
function d=lxfft(x)
n=length(x);
if n>2
for i=0:n/2-1
x1(i+1)=x(2*i+1);
x2(i+1)=x(2*i+2);
end
X1=lxfft(x1);
X2=lxfft(x2);
for i=0:n/2-1
X2(i+1)= X2(i+1)*exp(-j*2*pi/n*i);//旋轉因子
d(i+1)=X1(i+1)+X2(i+1);
d(i+n/2+1)=X1(i+1)-X2(i+1);
end
else
d(1)=x(1)+x(2);
d(2)=x(1)-x(2);
end
end
❻ 128點2用科學計數法怎麼表示
128點2用科學計數法表示為1.282x10^2
科學記數法是指把一個數表示成a×10的n次冪的形式(1≤a<10,n 為整數。)
科學計數法可以很方便地表示一些絕對值較大的數,用科學計數法也可以很方便地表示一些絕對值較小的數。
一個小於1的正數可以表示為a×1oⁿ,其中1≤a<10,n是負整數。
128.2=1.282x10^2
❼ 請教達人,我用FPGA做128點的定點FFT運算,再經過逆變換輸出的結果有問題。
你用FFT的IP做就行了,模擬一下看看。我過去就是用IP做的,沒什麼問題。請教達人,我用FPGA做128點的定點FFT運算,再經過逆變換輸出的結果有問題。
❽ 51單片機用128個點產生正弦波
單相的從正弦涵數中從0度到90度范圍中均勻取出n個數再用256的模轉換成表格數。三相的只需從0度到30度取,可這會n要是三的公倍數。後在運行中按你的頻率的不同從該表格中抽取就行了。這就是單牌機由pwm產生的正弦波中的那時間段的數。
❾ 實現128點的基2-FFT演算法,並與MATLAB的fft演算法作對比分析.
http://topic.csdn.net/u/20081029/17/a107254d-5303-47a3-9380-cf00973c7287.html