① c語言編程獲取信號強度,需要C語言哪些知識
根據信號強度算距離,這個是關鍵,c語言不重要
② C語言如何處理RGB信號
# include <stdio.h>
//計算樣品深度
int sampleDepth(int x)
{
return (x-1)/2;
}
int main()
{
int i=0;
printf("獲取到的樣品深度是:");
scanf("%d",&i);
printf("顏色強度%d\r\n",sampleDepth(i));
return 0;
}
③ 用C語言編程及作界面處理信號
#include<graphics.h>
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<dos.h>
float ar[512],ai[512];
float a[1025];
void testdata()
{
int i;
for(i=0;i<512;i++)
{
ar[i]=50*cos(i*3.14159/32)+60*cos(i*3.14159/16)+53*cos(i*3.14159/64)+24*cos(i*3.14159/8)+10*cos(i*3.14159/128);
ai[i]=0;
}
}
void fft(int nn,int t)
{
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=t*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]=a[2*i+2]/nn;
ai[i]=-a[2*i+3]/nn;
a[i]=4*sqrt(ar[i]*ar[i]+ai[i]*ai[i]);
}
}
int main ()
{
int i;
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"");
setfillstyle(SOLID_FILL,WHITE);
bar(0,0,639,479);
//模擬測試數據
testdata();
//波形顯示
setcolor(BLACK);
line(10,119,550,119); // x軸
line(10,10,10,239); // y軸
setcolor(BLUE);
for(i=0;i<511;i++)
line(i+10,119-ar[i],i+10+1,119-ar[i+1]);
//FFT
fft(512,-1);
//頻譜顯示
setcolor(BLACK);
line(10,459,550,459); // x軸
line(10,259,10,459); // y軸
setcolor(RED);
for(i=0;i<256;i++)
line(2*i+10,459-a[i],2*i+10,459);
getch();
closegraph();
return 0;
}
④ linux中c語言有關信號的程序
簡單處理了一下,希望對你有幫助
#define err_sys( str ) printf("error:%s\n" , str )
static void sig_int(int signo)
{
struct tms timebuf;
int wallclock=times(&timebuf);
fprintf(stderr,"clock ticks since system startup are %d,\n",wallclock);
}
static void sig_term(int signo)
{
struct tms timebuf;
int wallclock=times(&timebuf);
fprintf(stderr,"clock ticks since system start are %d,\n",wallclock);
exit(0); //終止程序
}
static void sig_alrm(int signo)
{
static int times=1;
alarm(0);//輸出時,不再計時
printf("time:%d\n" , times*10 );
times++ ;
alarm(10); //重新開始計時
}
int main()
{
if (signal(SIGINT,sig_int)==SIG_ERR)
err_sys("can't catch SIGINT");
if (signal(SIGTERM,sig_term)==SIG_ERR)
err_sys("can't catch SIGTERM");
alarm(10); //開始計時
if (signal(SIGALRM,sig_alrm)==SIG_ERR)
err_sys("can't catch SIGALRM");
while(1) ; //等待在這里
return(0);
}
⑤ 用C語言設計信號分析程序 兩道題 要求運行時可以顯示波形圖 原理越簡單越好 最好每步都有解釋
DDF還有FFT,我們做過,用的是MATLAB,你要嗎??聯系我即可!我的郵箱[email protected]
⑥ 用MATLAB語言或者C語言編程(信號方面)
蝶形圖的話,書上都有的。8點的話,就是:
8 - 4 - 2 -1這樣的結構
fft的程序:
fs=1000
t=0:1/fs:0.6;
f1=100;
f2=300;
x=sin(2*pi*f1*t)+sin(2*pi*f2*t);
subplot(711)
plot(x);
title('f1(100Hz)\f2(300Hz)的正弦信號,初相0')
xlabel('序列(n)')
grid on
number=512
y=fft(x,number);
n=0:length(y)-1;
f=fs*n/length(y);
subplot(713)
plot(f,abs(y));
title('f1\f2的正弦信號的FFT(512點)')
xlabel('頻率Hz')
grid on
x=x+randn(1,length(x));
subplot(715)
plot(x);
title('原f1\f2的正弦信號(含隨機雜訊)')
xlabel('序列(n)')
grid on
y=fft(x,number);
n=0:length(y)-1;
f=fs*n/length(y);
subplot(717)
plot(f,abs(y));
title('原f1\f2的正弦信號(含隨機雜訊)的FFT(512點)')
xlabel('頻率Hz')
grid on
⑦ 如何用C語言實現數字信號處理演算法
下面的資料可看一下
C語言實現數字信號處理演算法
http://wenku..com/view/eb6e24c52cc58bd63186bd02.html
數字信號處理C語言程序集》
scilab,octave是C語言實現的開源的類matlab軟體,裡面有許多c語言實現的數字信號處理的演算法,可以研究一下。
⑧ 為什麼《數字信號處理c語言程序集》這本書里的主
數字信號處理C語言程序集,包括數字信號的產生、快速傅立葉變換、快速離散正交變換、快速卷積與相關、數字濾波器的時域和頻域響應、IIR數字濾波器的設計、FIR數字濾波器的設計、經典譜估計、現代譜估計、時—頻分析、 隨機信號的數字濾波、數字圖像處理、人工神經網路的C語言實現。
⑨ C語言中信號問題
信號是程序執行過程中出現的異常情況。它可能是由程序中的錯誤造成的,例如引用內存中的一個非法地址;或者是由程序數據中的錯誤造成的,例如浮點數被0除;或者是由外部事件引發的,例如用戶按了Ctrl+Break鍵。
你可以利用標准庫函數signal()指定要對這些異常情況採取的處理措施(實施處理措施的函數被稱為「信號處理函數」)。signal()的原型為:
#include <signal.h>
void(*signal(int hum,void(*func)(int)))(int);
如果定義一個typedef,理解起來就容易一些了。下面給出的sigHandler_t類型是指向一個程序的指針,該函數有一個int類型的參數,並且返回一個void類型:
typedef void(*sigHandler_t)(int);
sigHandler_t signal(int num , sigHandler_t func);
signal()有兩個參數,分別為int類型和sigHandler_t類型,其返回值為sigHandler_t類型。以func參數形式傳遞給signal()的那個函數將成為第num號異常情況的新的信號處理函數。signal()的返回值是信號hum原來的信號處理函數。在設置了一個暫時的信號處理函數之後,你可以利用該值恢復程序先前的行為。num的可能值依賴於系統,並且在signal.h中列出。func的可能值可以是你的程序中的任意函數,或者是SIG_DFL和SLG_IGN這兩個特別定義的值之一。SIG_DFL是指系統的預設處理措施,通常是暫停執行程序;SIG_IGN表示信號將被忽略。
⑩ C語言信號處理程序
#include<signal.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
voidmy_func(intsign_no)
{
if(sign_no==SIGINT)
printf("IhavegetSIGINT ");
elseif(sign_no==SIGTERM)
printf("IhavegetSIGQUIT ");
}
intmain()
{
printf(" ");
printf("processis%d ",getpid());
signal(SIGINT,my_func);
signal(SIGTERM,my_func);
while(1);
exit(0);
}
linux 平台就 用while阻塞就行
不知道你用的是什麼平台?