1

一部の信号にキャリア信号を乗算して、MatLab で信号を変調しようとしています。キャリア信号はcos(2*pi*fc*t)これまでのところ私のコードです

for t = 1:length(input);  
      m(t) = (Ac + input(t)).*cos(2*pi.*fc.*t);
end
xam = m;

input、Ac および fc は、関数を使用するときに入力する必要があるパラメーターです。このコードを任意の入力信号 (私は で使用cos(t)していt = 0:0.001:10ます) で実行すると、出力は常に同じ信号になります。ただし、fc の前に .* の代わりに ./ を使用すると、出力が変調されます。./fc の代わりに .*fc を使用すると機能しないのはなぜですか?

4

1 に答える 1

2

まず、方程式を次のようにベクトル化できます。

t = 0:0.001:10;
input = cos(t);
xam = (Ac + input).*cos(2*pi*fc*(1:length(t)));

毎回まったく同じ出力曲線が表示される理由は、fc値が整数であるためだと思います。fcが整数の場合cos(2*pi*fc*t)、 のすべての整数値に対して 1 と評価されt、変調後に入力信号は変更されません。使用1/fcすると、非整数値が得られ、出力が変調されます。

あなたがやりたいことは次のことだと思います:

t = 0:0.001:10; % Time in seconds
f = 1; % Frequency of input signal in rad/s
fc = 3; % Frequency of carrier wave in rad/s
input = cos(2*pi*f*t); % Input signal
xam = (Ac + input).*cos(2*pi*fc*t); % Amplitude modulated signal

コメントは、各引数の意味を示しています。サンプリング レートのみを関数に渡したい場合fs、ソリューションは次のようになります。

N = 1001;
fs = 1000;
t = (0:1:N)*(1/fs);
f = 1;
fc = 3;
input = cos(2*pi*f*t);

そして、あなたの関数は次のようになります:

function xam = modulate(input, fs, fc, Ac) 
    t = (0:1:length(input))*(1/fs);
    xam = (Ac + input).*cos(2*pi*fc*t);
于 2014-04-08T18:04:51.520 に答える