how can i summarize 2 different signals?
3 次查看(过去 30 天)
显示 更早的评论
Hi all!
I just want to play 2 or more different signals at the same time. If i know well for this, i need to summarize the signals, and the just play back it, but the matrix dimensions musn't agree. Can anyone help me to solve the problem?
Thanks in advance
I tried it with this source code:
clear;
clc;
myFolder = 'C:\Users\Aron\Samples\proba';
if exist(myFolder, 'dir') ~= 7
Message = sprintf('Error: The following folder does not exist:\n%s', myFolder);
uiwait(warndlg(Message));
return;
end
filePattern = fullfile(myFolder, '*.wav');
wavFiles = dir(filePattern);
sampleArray = cell(length(wavFiles),1);
Fs = zeros(size(sampleArray));
for k = 1:length(wavFiles)
baseFileName = wavFiles(k).name;
fullFileName = fullfile(myFolder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
[sampleArray{k}, Fs(k)] = wavread(fullFileName);
end
s=1;
data_1=(sampleArray{s});
%sound(data_1);
%%
L = length(data_1);
NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Y = fft(data_1,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
% Plot single-sided amplitude spectrum.
figure(1);
plot(f,2*abs(Y(1:NFFT/2+1)))
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
%%
g=9;
data_2=(sampleArray{g});
L = length(data_2);
NFFT = 2^nextpow2(L); % Next power of 2 from length of y
X = fft(data_2,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
data_sum=Y+X;
data_sum_in_time = ifft(data_sum,NFFT)*L;
sound (data_sum_in_time);
7 个评论
Walter Roberson
2013-8-21
If sample A is longer than sample B, then after B finishes playing, should the rest of A play by itself, or should one go back to the beginning of B and keep going from there until the end of A ?
Are the samples always taken at the same sampling rate, or does there need to be conversion ?
回答(2 个)
Iain
2013-8-21
Signal A: 10,000 samples, sampled at 20KHz Signal B: 5,000 samples, sampled at 20KHz
A(samples_offset+(1:5000)) = A(samples_offset+(1:5000)) + B; %set the offset to play signal B starting at the same time, ending at the same time, or somethign in the middle.
Signal A: 10,000 samples, sampled at 20KHz Signal B: 5,000 samples, sampled at 10KHz
Here you need to resample B. You can do it via interpolation. - Something like:
C(1:2:9999) = B;
C(2:2:9998) = B(1:end-1) + B(2:end) ./ 2
C(10000) = B(end);
2 个评论
dpb
2013-8-26
How can you do anything w/ them if the sampling rate isn't known (or at least embedded in the storage format)?
The answer to the question is as given earlier; you have to resample one or both to a common time base in some fashion of your choosing. If you don't want to use the Signal Processing Toolbox resample function, then roll your own...
Walter Roberson
2013-8-26
Respampled = ifft( fft(SampleWithLowerFrequency), ceil(length(SampleWithLowerFrequency) * HigherFrequency / LowerFrequency ) )
now play SampleWithHigherFrequency and Resampled together, both at HigherFrequency
11 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!