【发布时间】:2014-06-30 02:11:23
【问题描述】:
我正在编写一个 Matlab 程序来执行两个信号的卷积和。我首先开始创建一个简单的正弦信号和一个载波信号。我将两者卷积并创建了卷积信号。您可以看到我的 (x) 轴是在时域中指定的。为了清楚起见,下面显示了我的代码和我的情节的屏幕截图。
我的代码:
注意:此程序不使用 .wav 文件,而是使用简单的正弦信号。
mySignalFreq = 1E3;
%T = 1/f;
T = 1/mySignalFreq;
tmin = 0;
tmax = 5*T;%i want to graph 5 time periods
dt = T/60;%used 60 to specify spaceing of time domain
t = tmin:dt:tmax;
myCarrierFreq = 560E3;
Bandwidth = 10E3;
omega_mySignal = 2*pi*mySignalFreq;%determine angular frequency
omega_myCarrier = 2*pi*myCarrierFreq;%determine angular frequency
modIndex = 0.8;%modulation index
myCarrierAmp = 4.0;%amplitude of carrier signal
ys = sin(omega_mySignal*t);
yc = sin(omega_myCarrier*t);
convSum = myCarrierAmp*(1+modIndex.*ys).*yc;%Convolution Sum
%create txt file with Write permissions
convolutionData.txt = fopen('convolutionData.txt','w');
%7.5 specifies 7digits and 5digits to the right of decimal
%have to use \r\n for readability
%array of values need to be in [x;y1;y2;y3] format
%comma in the function denotes the seperator
fprintf(convolutionData.txt,'%7.5f,%7.5f,%7.5f,%7.5f\r\n',[t;ys;yc;convSum]);
%close out file
fclose(convolutionData.txt);
%creating a basic plot of all three signals
plot(t,ys,'r',t,yc,'g',t,convSum,'b');
title('Convoluted Signal');
xlabel('Time Periods');
ylabel('Amplitude (Volts)');
grid on;
这是上面情节的图片。您可以看到我使用变量 't' 作为我的 x 轴数据。
我终于找到了一些代码来绘制我用录音机创建的 .wav 文件。但是,它在频域中绘制它。正如您在代码中看到的那样,我正在将 .wav 文件中的数据读取到我所理解的数组中。不太了解这部分,所以如果有人可以对此进行更多解释作为旁注,那就太好了。
我的主要问题是如何将 .wav 文件中的数据合并到上面的原始代码中,以便可以像上面的图一样在时域中绘制它?只是无法弄清楚那部分,因为下面的代码只是在频域中进行。
这是 .wav 文件的代码和绘图
[wave,fs]=audioread('myvoice1.wav');
t=0:1/fs:(length(wave)-1)/fs;
subplot(2,1,1);
plot(t,wave);
n=length(wave)-1;
f=0:fs/n:fs;
wavefft=abs(fft(wave));
subplot(2,1,2);
plot(f,wavefft);
【问题讨论】: