课程设计信号分析与处理C语言编程汇总文档格式.docx
- 文档编号:13316634
- 上传时间:2022-10-09
- 格式:DOCX
- 页数:34
- 大小:897.99KB
课程设计信号分析与处理C语言编程汇总文档格式.docx
《课程设计信号分析与处理C语言编程汇总文档格式.docx》由会员分享,可在线阅读,更多相关《课程设计信号分析与处理C语言编程汇总文档格式.docx(34页珍藏版)》请在冰豆网上搜索。
抽样间隔:
Δ=0.004,ß
=100
时域滤波:
由
(h(t)为滤波因子)
第一参数:
ff1=20Hz,ff2=50Hz
第二参数:
ff1=25Hz,ff2=45Hz
抽样点数:
M=60
抽样间隔:
Δ=0.004
,
单独计算:
要求:
画出x(t),h(t),y(t)图形,为了分析方便,也可以画出有效波s(t),干扰波n(t)及其频谱进行分析,如下图:
最后就是答辩,老师问问题,学生回答。
主要注意几点就行了
1,熟悉课本滤波部分知识;
2,第二参数要比第一参数滤波效果好,因为门第一参数开大了,进来的干扰波也多了,从第一参数:
Fy、第二参数Fy图形上可以看出来,干扰波频谱被压小了。
第二参数压制了干扰波,突显了有效波,所有好。
频域滤波
由公式:
1,对x(t)进行补0,28或者29总之必须是2的次方,因为要用到FFT公式与IFFT公式,进行FFT变换得到X(k);
2,H(k)的求法:
H(k)也必须与X(k)点数相同
单门:
20,
50
双门:
50,
=N-
3,
在用IFFT反变换得y(t),存在实部与虚部,需要分析与处理
画出H(k)、X(k)、Y(k)图形,并且分析X(k)、Y(k)的区别,还有开单双门的区别与差异,时域与频域滤波谁好、为什么?
3,分析:
从单双门实部图形看出,与有效波是完全一样的,但是幅值变大,这体现了滤波突显有效波的特性;
从图形看出虚部对结果没有影响;
单双门虚部完全不同,这是由于开单双门效果不同引起的。
单门虚部变化大,而且幅值与起伏变化也大,而双门幅值很小,小到可以忽略不计。
按理说反变化IFFT后应该只有实部,没有虚部,至于为什么会产生虚部,希望读者自己下去研究下,希望大家相互交流、交流!
第一个注意问题:
单门与双门谁好?
答案当然是:
双门好。
因为原始有效波x(t)是实数信号,对应的频谱是偶对称的,单门时,只是让一部分通过了;
而双门则全部通过,肯定效果要好!
而且实部波形,明显看出双门是干扰部分起伏比单门时要平缓,小得多了。
第二个注意问题:
时域与频域哪个好?
频域要好,首先从两者波形上可以看出,其次就是频域滤波,只让有效波通过,而之外的完全被滤掉,可谓是真正的理想状态。
第三个注意问题:
频域滤波y(t)实部图200点以后,为什么有波形起伏?
因为由于时域离散,必将导致频域周期化,这是由于频域周期化的结果。
2、相关
1,
30Hz,抽样点数:
M=100
0.8,
50Hz,抽样点数:
M=150
Δ=0.004s
画出
的图形并分析验证书上自互相关性质的正确性!
3、快速褶积
25Hz,抽样点数:
M=250
0.7,
55Hz,抽样点数:
M=200
4、地震记录的生成和频谱分析
地震记录的生成和频谱分析、信噪比计算以及补0对频谱的影响,给定地震子波的数学表达式:
和反射系数序列:
0.2,
0.4,
0.15,
0.5
0.35,
0.1,
0.2
产生一个含有随机干扰信号的地震信号:
(其中n(t)可以用-0.4—+0.4之间的随机数代替)
1,制作合成地震记录x(t),并对b(t)和s(t)做频谱分析(用FFT),其中:
b(t)(N=41,Δ=0.004s,f=35Hz,α=100,A1=1)反射序列和随机干扰N=200;
2,计算x(t)信噪比,改变n(t)(用-0.8—+0.8之间的随机数代替)的大小再计算。
信噪比:
3,分别对b(t)后边、前边、中间补0,计算补0前后频谱的变化及补0多少对频谱的影响。
附带程序:
最麻烦的就是编程序了,开始的时候,是很麻烦,不过只有去啃,就一定会有收获,比如:
我开始编褶积程序的时候,整理了几天,上网查,翻图书,后来突然明白,靠公式就可以编出来了。
只是FFT需要些功夫,其余都很快!
书上介绍的是基2FFT,这个代码网上到处都有,想提升自己的编程能力,就去尝试编基4FFT,以及考虑基nFFT吧,祝大家好运。
1、时域滤波程序代码
#include<
stdio.h>
math.h>
#include"
conv.cpp"
dft.cpp"
gyh.cpp"
#defineT200//************T表示x(t)点数,R表示n(t)点数
#defineR60
voidmain()
{
inti,j,B=100;
//*********************B表示贝塔的值
FILE*fp;
doubleA1=1.0,A2=0.8,A3=0.5;
//********产生x(t)
doublef1=25,f2=45,f3=5,f4=80;
//******频率取值
doubledata=0.004;
//******************取样点数
doubles[T],n[T],x[T],h[R],y[T+R-1];
doublesi[T]={0},s1[T]={0},s1i[T]={0},Fs[T]={0};
doubleni[T]={0},n1[T]={0},n1i[T]={0},Fn[T]={0};
doublexi[T]={0},x1[T]={0},x1i[T]={0},Fx[T]={0};
doublehi[T]={0},h1[T]={0},h1i[T]={0},Fh[T]={0};
doubley1[T+R-1]={0},yb[T+R-1]={0},yb1[T+R-1]={0},Fy[T+R-1]={0};
for(i=0;
i<
T;
i++)
{
s[i]=A1*exp(-B*pow((i*data),2))*sin(2*PI*f1*i*data)+A2*exp(-B*pow((i*data),2))*sin(2*PI*f2*i*data);
n[i]=A3*(sin(2*PI*f3*i*data)+cos(2*PI*f4*i*data));
x[i]=s[i]+n[i];
}
//对s(t)进行频谱分析,用DFT
dft(s,si,s1,s1i,Fs,T,1);
dft(n,ni,n1,n1i,Fn,T,1);
dft(x,ni,x1,x1i,Fx,T,1);
//统一导出
fp=fopen("
D:
\\sh\\time1\\snxFsFnFx1.txt"
"
w"
);
for(i=0;
fprintf(fp,"
%f\t%f\t%f\t%f\t%f\t%f\n"
s[i],n[i],x[i],Fs[i],Fn[i],Fx[i]);
fclose(fp);
//产生h(t)
floatff1=20,ff2=50;
//*****************可以修改的h(t)参数
doublew1,w2,dataw,w0;
w1=2*PI*ff1,w2=2*PI*ff2;
dataw=(w2-w1)/2,w0=(w2+w1)/2;
h[0]=2*dataw/PI;
for(j=1;
j<
R;
j++)
h[j]=(2.0/(PI*j*data))*cos(w0*j*data)*sin(dataw*j*data);
dft(h,hi,h1,h1i,Fh,R,1);
gyh(Fh,R);
\\sh\\time1\\hFh.txt"
for(j=0;
fprintf(fp,"
%f\t%f\n"
h[j],Fh[j]);
fclose(fp);
//褶积滤波得到y(t)
con(x,h,y,T,R);
//对y(t)作傅里叶变换
dft(y,y1,yb,yb1,Fy,T+R-1,1);
//导出y及频谱Y(k)
fp=fopen("
\\sh\\time1\\yFy1.txt"
T+R-1;
y[i],Fy[i]);
printf("
\nover\n\n"
}
2、频域滤波程序代码:
fft.cpp"
ifft.cpp"
#defineG256
inti,B=100;
//定义指针文件
//产生x(t)
//参数
//抽样间隔
doubles[200],n[200];
doublex[G]={0},x1[G]={0},h[G]={0},h1[G]={0},y[G]={0},y1[G]={0};
doubleFx[G]={0},Fh1[G]={0},Fh2[G]={0},Fy1[G]={0},Fy2[G]={0};
doubleY1[G]={0},Y1i[G]={0},Y2[G]={0},Y2i[G]={0};
200;
//导出
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 信号 分析 处理 语言 编程 汇总