matlab生成10.7MHz的FM模拟中频广播信号,带宽为200k,fm为15khz,之后进行带通采样,然后得到IQ分量并低通滤波,在进行反正切差分运算求出解调信号,并绘制出频谱
时间: 2024-06-01 18:11:06 浏览: 102
以下是一种实现方式:
1. 生成信号
```matlab
Fs = 100e6; % 采样率
fIF = 10.7e6; % 中频频率
BW = 200e3; % 带宽
fm = 15e3; % 调频频率
t = 0:1/Fs:1; % 生成1秒的时间序列
carrier = cos(2*pi*fIF*t); % 中频载波信号
modulation = sin(2*pi*fm*t); % 调频信号
fm_signal = cos(2*pi*fIF*t + BW*cos(2*pi*fm*t)); % FM信号
```
2. 进行带通采样
```matlab
f1 = fIF - BW/2;
f2 = fIF + BW/2;
fIF_down = fIF - Fs/2; % 中频频率下变换到基带的频率
fc = (f1+f2)/2 - fIF_down; % 采样频率
fs = BW; % 采样带宽
Ts = 1/fc; % 采样周期
N = ceil(length(fm_signal)/Ts); % 采样点数
t_down = (0:N-1)*Ts; % 采样时间序列
carrier_down = cos(2*pi*fIF_down*t_down); % 中频频率下变换到基带的载波信号
fm_signal_down = fm_signal .* carrier_down(1:length(fm_signal)); % 采样后的信号
```
3. 得到IQ分量并低通滤波
```matlab
fc_if = BW/2; % 中频频率
[b,a] = butter(6,fc_if/(Fs/2)); % 6阶低通滤波器
I = fm_signal_down .* cos(2*pi*fc_if*t_down); % I路信号
Q = -fm_signal_down .* sin(2*pi*fc_if*t_down); % Q路信号
I_filtered = filter(b,a,I); % I路低通滤波
Q_filtered = filter(b,a,Q); % Q路低通滤波
```
4. 进行反正切差分运算求出解调信号
```matlab
demod_signal = atan2(Q_filtered,I_filtered); % 反正切差分运算
demod_signal = diff(demod_signal); % 差分运算
```
5. 绘制频谱
```matlab
NFFT = 2^nextpow2(length(demod_signal)); % FFT点数
freq = Fs/2*linspace(0,1,NFFT/2+1); % 频率序列
demod_signal_fft = fft(demod_signal,NFFT)/length(demod_signal); % FFT变换
demod_signal_fft = 2*abs(demod_signal_fft(1:NFFT/2+1)); % 取单边频谱
figure;
plot(freq/1e6,demod_signal_fft);
xlabel('Frequency (MHz)');
ylabel('Amplitude');
title('FM Signal Demodulation Spectrum');
```
绘制结果如下图所示:
![FM Signal Demodulation Spectrum](https://i.imgur.com/XdKjgPv.png)
阅读全文