一.FMGen.cpp
#include \"stdafx.h\"
#include \"mod_demod.h\"
#include \"FMGen.h\"
#include \"head.h\"
#include \"SourceGenClass.h\"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
FMGen::FMGen(CString pnameModel, CString ptypeModel,
long vmodelSampleFreq, long vinputSampleFreq,
int vtimeStep, CString pnameGetDataFile,
CString pnamePutDataFile, double vampCarrier,
long vfreqCarrier, double vphaseCarrier,
double vModPara):
ModBaseClass(pnameModel,ptypeModel,
vmodelSampleFreq, vinputSampleFreq,
vtimeStep, pnameGetDataFile,
pnamePutDataFile, vampCarrier,
vfreqCarrier, vphaseCarrier,
vModPara)
{
}
FMGen::~FMGen()
{
}
void FMGen::run()
{
double dt;
float *fn;
long num_of_scan;
long i;
double phase_n,phase_n_1,dphase;
double const_var;
dt=1.0/inputSampleFreq;
num_of_scan=(long) timeStep/1000.0*inputSampleFreq;
//begin to modulate
fn=getData(nameGetDataFile,1,num_of_scan);
if(!fn)
{
cout<<\"Error occured when read \"< exit(1); } phase_n_1=ModPara*(*fn)*dt+phaseCarrier; *fn=ampCarrier*cos(phase_n_1); const_var=2*pi*freqCarrier*dt; for (i=1;i dphase=const_var+ModPara*(*(fn+i))*dt; while (dphase>=10000*2*pi) dphase-=2*pi*10000; while (dphase<=-2*pi*10000) dphase+=2*pi*10000; phase_n=phase_n_1+dphase; while (phase_n>=2*pi*10000) phase_n-=2*pi*10000; while (phase_n<=-2*pi*10000) phase_n+=2*pi*10000; *(fn+i)=ampCarrier*cos(phase_n); phase_n_1=phase_n; } if(putData(fn,namePutDataFile,num_of_scan)==FALSE) { cout<<\"when save modulation data,error occured.\\n\"; free(fn); getch(); exit(1); } free(fn); cout<<\"FM modulation complete.\\n\"; } 二. // FMGen.h: interface for the FMGen class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_FMGEN_H__119F55AA_0AA6_4CD7_948F_7010ED803ED4__INCLUDED_) #define AFX_FMGEN_H__119F55AA_0AA6_4CD7_948F_7010ED803ED4__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include \"ModBaseClass.h\" class FMGen : public ModBaseClass { public: FMGen(CString,CString, long,long, int,CString, CString,double, long,double,double); virtual ~FMGen(); virtual void run(); }; #endif // !defined(AFX_FMGEN_H__119F55AA_0AA6_4CD7_948F_7010ED803ED4__INCLUDED_) 附录 1:FM调制源程序清单 %程序名称:tiaozhixinhao.m %程序功能:产生模拟基带信号并对调制信号进行傅立叶变化得到调制信号的频谱图 %程序代码 fc = 150; %载波频率 fs = 400; %采样频率 t = (0 :0.001:0.15); %时间区域 x = sin(2*pi*30*t); %输入信号 figure(1) plot(t,x); %调制信号时域图 xlabel('t');ylabel('x'); axis([0 0.15 -1 1]) a=fft(x,1024); %对x进行傅利叶变换 f=(0:length(a)-1)*fs/length(a) -fs/2; figure(2) plot(f,abs(a)); %调制信号频谱图 xlabel('Frequence(Hz)'); %频率分量 ylabel('powerSpectrum(x)'); %频率谱能量 附录2:FM调制源程序清单 %程序名称:quyang400.m %程序功能:调用函数modulate实现FM的调制 %程序代码 fc = 150; %载波频率 fs = 400; %采样频率 t = (0 :0.001:0.15); %时间区域 x = sin(2*pi*30*t); %输入信号 y = modulate(x,fc,fs,'FM'); %调制信号 figure(3) plot(t,y) %对y进行傅利叶变换 f=(0:length(b)-1)*fs/length(b) -fs/2; figure(4) plot(f,abs(b)); %FM信号频谱图 xlabel('Frequence(Hz)'); %频率分量 ylabel('Power Spectrum(y)'); %频率谱能量 附录3:FM调制源程序清单 %程序名称:quyang1600.m %程序功能:调用函数modulate实现FM的调制 %程序代码 fc = 150; %载波频率 fs = 1600; %采样频率 t = (0 :0.001:0.15); % 时间区域 x = sin(2*pi*30*t); %输入信号 y = modulate(x,fc,fs,'FM'); %调制信号 plot(t,y); %FM信号时域图 xlabel('t(s)');ylabel('y'); axis([0 0.15 -1 1]); b=fft(y,1024); %对y进行傅利叶变换 f=(0:length(b)-1)*fs/length(b) -fs/2; figure plot(f,abs(b)); %FM信号频谱图 xlabel('Frequence(Hz)'); %频率分量 ylabel('Power Spectrum(y)'); %频率谱能量 附录4:FM调制源程序清单 % 程序名称: xinzaobi1.m % 程序功能:对FM调制后的信号加入高斯噪声,信噪比为1 %程序代码 fc = 150; %载波频率 fs = 400; %采样频率 t = (0 :0.001:0.15); %时间区域 x = sin(2*pi*30*t); %输入信号 y = modulate(x,fc,fs,'FM'); %调制信号 y1 = y + awgn(y,1,0); % FM信号加入噪声 plot(t,y1); %FM信号时域图 xlabel('t(s)');ylabel('y'); axis([0 0.15 -1 1]); b=fft(y1,1024); %对y进行傅利叶变换 f=(0:length(b)-1)*fs/length(b) -fs/2; figure plot(f,abs(b)); %FM信号频谱图 xlabel('Frequence(Hz)'); %频率分量 ylabel('Power Spectrum(y)'); %频率谱能量 附录 5 : FM 调制源程序清单 % 程序名称: xinzaobi2.m % 程序功能:对 FM 调制后的信号加入高斯噪声,信噪比为 0.1 % 程序代码 fc = 150; % 载波频率 fs = 400; % 采样频率 t = (0 :0.001:0.15); % 时间区域 x = sin(2*pi*30*t); % 输入信号 y = modulate(x,fc,fs,'FM'); % 调制信号 y1 = y + awgn(y ,0.1,0); %FM 信号加入噪声 plot(t,y1); %FM 信号时域图 xlabel('t(s)');ylabel('y'); axis([0 0.15 -1 1]); b=fft(y1,1024); % 对 y 进行傅利叶变换 f=(0:length(b)-1)*fs/length(b) -fs/2; figure plot(f,abs(b)); %FM 信号信号频谱 xlabel('Frequence(Hz)'); % 频率分量 ylabel('Power Spectrum(y)'); % 频率谱能量 附录 6 : FM 调制源程序清单 % 程序名称: FM.m % 程序功能:对 FM 调制后的信号加入高斯噪声,信噪比为 5 % 程序代码 fc = 150; % 载波频率 fs = 400; % 采样频率 t = (0 :0.001:0.15); % 时间区域 x = sin(2*pi*30*t); % 输入信号 y = modulate(x,fc,fs,'FM'); % 调制信号 y1 = y + awgn(y ,5,0); %FM 信号加入噪声 plot(t,y1); %FM 信号时域图 xlabel('t(s)');ylabel('y'); axis([0 0.15 -1 1]); b=fft(y1,1024); % 对 y 进行傅利叶变换 f=(0:length(b)-1)*fs/length(b) -fs/2; figure plot(f,abs(b)); %FM 信号频谱图 xlabel('Frequence(Hz)'); % 频率分量 ylabel('Power Spectrum(y)'); % 频率谱能量 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务