您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页FM调制代码

FM调制代码

来源:爱go旅游网


一.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 \"<getch();

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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务