2013-09-30 113 views
1

我想用Matlab調頻正弦信號。我寫了下面的代碼是一樣的:MATLAB - FM調製

fc = 5000; %Carrier Frequency 
fs = 1000; %Signal Frequency 
t = 0:0.00001:0.002; 
x = sin(2*pi*fs*t); 
dev = 50; 
subplot(2,1,1); 
plot(t,x); 
y = fmmod(x,fc,fs,dev); 
subplot(2,1,2); 
plot(t,y); 

它能夠顯示第一繪圖命令,但沒有第二個。它會拋出一個錯誤:`fmmod' undefined near line 10 column 5。上面的代碼有什麼錯誤?

+0

在哪裏/你是怎麼定義'fmmod'? – Floris

+7

我猜你沒有通訊系統工具箱。 – Doresoom

+1

正如Doresoom指出的,你可能沒有通訊系統工具箱,'fmmod'是其中的一部分。您可以通過在MATLAB命令行輸入'ver'來檢查您的工具箱。 – am304

回答

2

以下功能將生成FM調製信號 - 它不如fmmod那麼好(靈活等),但如果您沒有Comm System Toolbox,這可能是一個不錯的選擇。

function [s t] = makeFM(x, Fc, Fs, strength) 
% for a signal x that modulates a carrier at frequency Fc 
% produce the FM modulated signal 
% works for 1 D input only 
% no error checking 

x = x(:); 

% sampling points in time: 
t = (0 : numel(x) - 1)'/Fs; 

% integrate input signal 
integratedX = cumsum(x)/Fs; 
s = cos(2 * pi * (Fc * t + strength * integratedX)); 

將這個在你的路徑,並與同類參數的fmmod功能(但沒有可選參數)稱之爲:

fc = 5000; %Carrier Frequency 
fs = 1000; %Signal Frequency 
t = 0:0.00001:0.002; 
x = sin(2*pi*fs*t); 
dev = 50; 
subplot(2,1,1); 
plot(t,x); 
y = makeFM(x, fc, 2.5*fc, dev); % note sampling frequency must be > carrier frequency! 
subplot(2,1,2); 
plot(t,y); 

讓我知道如何爲你工作。

0

我想這是更簡單的辦法

clc; 
clear all; 
close all; 
fm=input('Message Frequency='); 
fc=input('Carrier Frequency='); 
mi=input('Modulation Index='); 
t=0:0.0001:0.1; 
m=sin(2*pi*fm*t); 
subplot(3,1,1); 
plot(t,m); 
xlabel('Time'); 
ylabel('Amplitude'); 
title('Message Signal'); 
grid on; 

c=sin(2*pi*fc*t); 
subplot(3,1,2); 
plot(t,c); 
xlabel('Time'); 
ylabel('Amplitude'); 
title('Carrier Signal'); 
grid on; 

y=sin(2*pi*fc*t+(mi.*sin(2*pi*fm*t)));%Frequency changing w.r.t Message 
subplot(3,1,3); 
plot(t,y); 
xlabel('Time'); 
ylabel('Amplitude'); 
title('FM Signal'); 
grid on;